Fossil SCM

The --transport-command now deals correctly with passwords in the URL.

drh 2021-12-22 16:41 trunk
Commit f485a164af2f9cb71e34239aec9d0d2f4c700af0b20c3ab86a993ed4aee43d1d
3 files changed +4 -1 +28 +5 -3
+4 -1
--- src/http.c
+++ src/http.c
@@ -222,15 +222,18 @@
222222
const char *zAltMimetype /* Alternative mimetype if not NULL */
223223
){
224224
char *zUplink;
225225
char *zDownlink;
226226
char *zCmd;
227
+ char *zFullUrl;
227228
int rc;
228229
229230
zUplink = fossil_temp_filename();
230231
zDownlink = fossil_temp_filename();
231
- zCmd = mprintf("%s %$ %$ %$", g.zHttpCmd, g.url.canonical,zUplink,zDownlink);
232
+ zFullUrl = url_full(&g.url);
233
+ zCmd = mprintf("%s %$ %$ %$", g.zHttpCmd, zFullUrl,zUplink,zDownlink);
234
+ fossil_free(zFullUrl);
232235
blob_write_to_file(pSend, zUplink);
233236
if( g.fHttpTrace ){
234237
fossil_print("RUN: %s\n", zCmd);
235238
}
236239
rc = fossil_system(zCmd);
237240
--- src/http.c
+++ src/http.c
@@ -222,15 +222,18 @@
222 const char *zAltMimetype /* Alternative mimetype if not NULL */
223 ){
224 char *zUplink;
225 char *zDownlink;
226 char *zCmd;
 
227 int rc;
228
229 zUplink = fossil_temp_filename();
230 zDownlink = fossil_temp_filename();
231 zCmd = mprintf("%s %$ %$ %$", g.zHttpCmd, g.url.canonical,zUplink,zDownlink);
 
 
232 blob_write_to_file(pSend, zUplink);
233 if( g.fHttpTrace ){
234 fossil_print("RUN: %s\n", zCmd);
235 }
236 rc = fossil_system(zCmd);
237
--- src/http.c
+++ src/http.c
@@ -222,15 +222,18 @@
222 const char *zAltMimetype /* Alternative mimetype if not NULL */
223 ){
224 char *zUplink;
225 char *zDownlink;
226 char *zCmd;
227 char *zFullUrl;
228 int rc;
229
230 zUplink = fossil_temp_filename();
231 zDownlink = fossil_temp_filename();
232 zFullUrl = url_full(&g.url);
233 zCmd = mprintf("%s %$ %$ %$", g.zHttpCmd, zFullUrl,zUplink,zDownlink);
234 fossil_free(zFullUrl);
235 blob_write_to_file(pSend, zUplink);
236 if( g.fHttpTrace ){
237 fossil_print("RUN: %s\n", zCmd);
238 }
239 rc = fossil_system(zCmd);
240
+28
--- src/url.c
+++ src/url.c
@@ -301,10 +301,37 @@
301301
pUrlData->flags = urlFlags &= ~URL_REMEMBER_PW;
302302
}
303303
}
304304
}
305305
}
306
+
307
+/*
308
+** Construct the complete URL for a UrlData object, including the
309
+** login name and password, into memory obtained from fossil_malloc()
310
+** and return a pointer to that URL text.
311
+*/
312
+char *url_full(const UrlData *p){
313
+ Blob x = BLOB_INITIALIZER;
314
+ if( p->isFile || p->user==0 || p->user[0]==0 ){
315
+ return fossil_strdup(p->canonical);
316
+ }
317
+ blob_appendf(&x, "%s://", p->protocol);
318
+ if( p->user && p->user[0] ){
319
+ blob_appendf(&x, "%t", p->user);
320
+ if( p->passwd && p->passwd[0] ){
321
+ blob_appendf(&x, ":%t", p->passwd);
322
+ }
323
+ blob_appendf(&x, "@");
324
+ }
325
+ blob_appendf(&x, "%T", p->name);
326
+ if( p->dfltPort!=p->port ){
327
+ blob_appendf(&x, ":%d", p->port);
328
+ }
329
+ blob_appendf(&x, "%T", p->path);
330
+ (void)blob_str(&x);
331
+ return x.aData;
332
+}
306333
307334
/*
308335
** Reclaim malloced memory from a UrlData object
309336
*/
310337
void url_unparse(UrlData *p){
@@ -386,10 +413,11 @@
386413
fossil_print("g.url.user = %s\n", g.url.user);
387414
fossil_print("g.url.passwd = %s\n", g.url.passwd);
388415
fossil_print("g.url.canonical = %s\n", g.url.canonical);
389416
fossil_print("g.url.fossil = %s\n", g.url.fossil);
390417
fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
418
+ fossil_print("url_full(g.url) = %z\n", url_full(&g.url));
391419
if( g.url.isFile || g.url.isSsh ) break;
392420
if( i==0 ){
393421
fossil_print("********\n");
394422
url_enable_proxy("Using proxy: ");
395423
}
396424
--- src/url.c
+++ src/url.c
@@ -301,10 +301,37 @@
301 pUrlData->flags = urlFlags &= ~URL_REMEMBER_PW;
302 }
303 }
304 }
305 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
307 /*
308 ** Reclaim malloced memory from a UrlData object
309 */
310 void url_unparse(UrlData *p){
@@ -386,10 +413,11 @@
386 fossil_print("g.url.user = %s\n", g.url.user);
387 fossil_print("g.url.passwd = %s\n", g.url.passwd);
388 fossil_print("g.url.canonical = %s\n", g.url.canonical);
389 fossil_print("g.url.fossil = %s\n", g.url.fossil);
390 fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
 
391 if( g.url.isFile || g.url.isSsh ) break;
392 if( i==0 ){
393 fossil_print("********\n");
394 url_enable_proxy("Using proxy: ");
395 }
396
--- src/url.c
+++ src/url.c
@@ -301,10 +301,37 @@
301 pUrlData->flags = urlFlags &= ~URL_REMEMBER_PW;
302 }
303 }
304 }
305 }
306
307 /*
308 ** Construct the complete URL for a UrlData object, including the
309 ** login name and password, into memory obtained from fossil_malloc()
310 ** and return a pointer to that URL text.
311 */
312 char *url_full(const UrlData *p){
313 Blob x = BLOB_INITIALIZER;
314 if( p->isFile || p->user==0 || p->user[0]==0 ){
315 return fossil_strdup(p->canonical);
316 }
317 blob_appendf(&x, "%s://", p->protocol);
318 if( p->user && p->user[0] ){
319 blob_appendf(&x, "%t", p->user);
320 if( p->passwd && p->passwd[0] ){
321 blob_appendf(&x, ":%t", p->passwd);
322 }
323 blob_appendf(&x, "@");
324 }
325 blob_appendf(&x, "%T", p->name);
326 if( p->dfltPort!=p->port ){
327 blob_appendf(&x, ":%d", p->port);
328 }
329 blob_appendf(&x, "%T", p->path);
330 (void)blob_str(&x);
331 return x.aData;
332 }
333
334 /*
335 ** Reclaim malloced memory from a UrlData object
336 */
337 void url_unparse(UrlData *p){
@@ -386,10 +413,11 @@
413 fossil_print("g.url.user = %s\n", g.url.user);
414 fossil_print("g.url.passwd = %s\n", g.url.passwd);
415 fossil_print("g.url.canonical = %s\n", g.url.canonical);
416 fossil_print("g.url.fossil = %s\n", g.url.fossil);
417 fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
418 fossil_print("url_full(g.url) = %z\n", url_full(&g.url));
419 if( g.url.isFile || g.url.isSsh ) break;
420 if( i==0 ){
421 fossil_print("********\n");
422 url_enable_proxy("Using proxy: ");
423 }
424
+5 -3
--- src/xfer.c
+++ src/xfer.c
@@ -2851,13 +2851,15 @@
28512851
db_timespan_name(-rSkew));
28522852
g.clockSkewSeen = 1;
28532853
}
28542854
28552855
fossil_force_newline();
2856
- fossil_print(
2857
- "%s done, wire bytes sent: %lld received: %lld ip: %s\n",
2858
- zOpType, nSent, nRcvd, g.zIpAddr);
2856
+ if( g.zHttpCmd==0 ){
2857
+ fossil_print(
2858
+ "%s done, wire bytes sent: %lld received: %lld ip: %s\n",
2859
+ zOpType, nSent, nRcvd, g.zIpAddr);
2860
+ }
28592861
if( syncFlags & SYNC_VERBOSE ){
28602862
fossil_print(
28612863
"Uncompressed payload sent: %lld received: %lld\n", nUncSent, nUncRcvd);
28622864
}
28632865
transport_close(&g.url);
28642866
--- src/xfer.c
+++ src/xfer.c
@@ -2851,13 +2851,15 @@
2851 db_timespan_name(-rSkew));
2852 g.clockSkewSeen = 1;
2853 }
2854
2855 fossil_force_newline();
2856 fossil_print(
2857 "%s done, wire bytes sent: %lld received: %lld ip: %s\n",
2858 zOpType, nSent, nRcvd, g.zIpAddr);
 
 
2859 if( syncFlags & SYNC_VERBOSE ){
2860 fossil_print(
2861 "Uncompressed payload sent: %lld received: %lld\n", nUncSent, nUncRcvd);
2862 }
2863 transport_close(&g.url);
2864
--- src/xfer.c
+++ src/xfer.c
@@ -2851,13 +2851,15 @@
2851 db_timespan_name(-rSkew));
2852 g.clockSkewSeen = 1;
2853 }
2854
2855 fossil_force_newline();
2856 if( g.zHttpCmd==0 ){
2857 fossil_print(
2858 "%s done, wire bytes sent: %lld received: %lld ip: %s\n",
2859 zOpType, nSent, nRcvd, g.zIpAddr);
2860 }
2861 if( syncFlags & SYNC_VERBOSE ){
2862 fossil_print(
2863 "Uncompressed payload sent: %lld received: %lld\n", nUncSent, nUncRcvd);
2864 }
2865 transport_close(&g.url);
2866

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button