Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | The --transport-command now deals correctly with passwords in the URL. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
f485a164af2f9cb71e34239aec9d0d2f |
| User & Date: | drh 2021-12-22 16:41:57.839 |
Context
|
2021-12-22
| ||
| 17:11 | Add the --transport-command option to the "fossil clone" command. check-in: 14b3f48e3c user: drh tags: trunk | |
| 16:41 | The --transport-command now deals correctly with passwords in the URL. check-in: f485a164af user: drh tags: trunk | |
| 15:46 | Add the --transport-command option to "fossil sync" and similar. The option is currently undocumented. check-in: 3cd412eb5c user: drh tags: trunk | |
Changes
Changes to src/http.c.
| ︙ | ︙ | |||
220 221 222 223 224 225 226 227 228 229 230 |
Blob *pReply, /* Write the reply here */
int mHttpFlags, /* Flags. See above */
const char *zAltMimetype /* Alternative mimetype if not NULL */
){
char *zUplink;
char *zDownlink;
char *zCmd;
int rc;
zUplink = fossil_temp_filename();
zDownlink = fossil_temp_filename();
| > > | > | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
Blob *pReply, /* Write the reply here */
int mHttpFlags, /* Flags. See above */
const char *zAltMimetype /* Alternative mimetype if not NULL */
){
char *zUplink;
char *zDownlink;
char *zCmd;
char *zFullUrl;
int rc;
zUplink = fossil_temp_filename();
zDownlink = fossil_temp_filename();
zFullUrl = url_full(&g.url);
zCmd = mprintf("%s %$ %$ %$", g.zHttpCmd, zFullUrl,zUplink,zDownlink);
fossil_free(zFullUrl);
blob_write_to_file(pSend, zUplink);
if( g.fHttpTrace ){
fossil_print("RUN: %s\n", zCmd);
}
rc = fossil_system(zCmd);
if( rc ){
fossil_warning("Transport command failed: %s\n", zCmd);
|
| ︙ | ︙ |
Changes to src/url.c.
| ︙ | ︙ | |||
299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
pUrlData->flags = urlFlags |= URL_REMEMBER_PW;
}else{
pUrlData->flags = urlFlags &= ~URL_REMEMBER_PW;
}
}
}
}
/*
** Reclaim malloced memory from a UrlData object
*/
void url_unparse(UrlData *p){
if( p==0 ){
p = &g.url;
| > > > > > > > > > > > > > > > > > > > > > > > > > > > | 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 |
pUrlData->flags = urlFlags |= URL_REMEMBER_PW;
}else{
pUrlData->flags = urlFlags &= ~URL_REMEMBER_PW;
}
}
}
}
/*
** Construct the complete URL for a UrlData object, including the
** login name and password, into memory obtained from fossil_malloc()
** and return a pointer to that URL text.
*/
char *url_full(const UrlData *p){
Blob x = BLOB_INITIALIZER;
if( p->isFile || p->user==0 || p->user[0]==0 ){
return fossil_strdup(p->canonical);
}
blob_appendf(&x, "%s://", p->protocol);
if( p->user && p->user[0] ){
blob_appendf(&x, "%t", p->user);
if( p->passwd && p->passwd[0] ){
blob_appendf(&x, ":%t", p->passwd);
}
blob_appendf(&x, "@");
}
blob_appendf(&x, "%T", p->name);
if( p->dfltPort!=p->port ){
blob_appendf(&x, ":%d", p->port);
}
blob_appendf(&x, "%T", p->path);
(void)blob_str(&x);
return x.aData;
}
/*
** Reclaim malloced memory from a UrlData object
*/
void url_unparse(UrlData *p){
if( p==0 ){
p = &g.url;
|
| ︙ | ︙ | |||
384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
fossil_print("g.url.hostname = %s\n", g.url.hostname);
fossil_print("g.url.path = %s\n", g.url.path);
fossil_print("g.url.user = %s\n", g.url.user);
fossil_print("g.url.passwd = %s\n", g.url.passwd);
fossil_print("g.url.canonical = %s\n", g.url.canonical);
fossil_print("g.url.fossil = %s\n", g.url.fossil);
fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
if( g.url.isFile || g.url.isSsh ) break;
if( i==0 ){
fossil_print("********\n");
url_enable_proxy("Using proxy: ");
}
url_unparse(0);
}
| > | 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
fossil_print("g.url.hostname = %s\n", g.url.hostname);
fossil_print("g.url.path = %s\n", g.url.path);
fossil_print("g.url.user = %s\n", g.url.user);
fossil_print("g.url.passwd = %s\n", g.url.passwd);
fossil_print("g.url.canonical = %s\n", g.url.canonical);
fossil_print("g.url.fossil = %s\n", g.url.fossil);
fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
fossil_print("url_full(g.url) = %z\n", url_full(&g.url));
if( g.url.isFile || g.url.isSsh ) break;
if( i==0 ){
fossil_print("********\n");
url_enable_proxy("Using proxy: ");
}
url_unparse(0);
}
|
| ︙ | ︙ |
Changes to src/xfer.c.
| ︙ | ︙ | |||
2849 2850 2851 2852 2853 2854 2855 |
}else if( rSkew*24.0*3600.0 < -10.0 ){
fossil_warning("*** time skew *** server is slow by %s",
db_timespan_name(-rSkew));
g.clockSkewSeen = 1;
}
fossil_force_newline();
| > | | | > | 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 |
}else if( rSkew*24.0*3600.0 < -10.0 ){
fossil_warning("*** time skew *** server is slow by %s",
db_timespan_name(-rSkew));
g.clockSkewSeen = 1;
}
fossil_force_newline();
if( g.zHttpCmd==0 ){
fossil_print(
"%s done, wire bytes sent: %lld received: %lld ip: %s\n",
zOpType, nSent, nRcvd, g.zIpAddr);
}
if( syncFlags & SYNC_VERBOSE ){
fossil_print(
"Uncompressed payload sent: %lld received: %lld\n", nUncSent, nUncRcvd);
}
transport_close(&g.url);
transport_global_shutdown(&g.url);
if( nErr && go==2 ){
|
| ︙ | ︙ |