@@ -61,15 +61,16 @@
61 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *user; /* User id for http: */
62 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *passwd; /* Password for http: */
63 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *canonical; /* Canonical representation of the URL */
64 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *proxyAuth; /* Proxy-Authorizer: string */
65 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *fossil; /* The fossil query parameter on ssh: */
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pwConfig; /* CONFIG table entry that gave us the password */
66 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned flags; /* Boolean flags controlling URL processing */
67 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int useProxy; /* Used to remember that a proxy is in use */
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *proxyUrlPath; /* Remember path when proxy is use */
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int proxyOrigPort; /* Tunneled port number for https through proxy */
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *proxyUrlPath; /* Remember path when proxy is use */
69 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *proxyUrlCanonical; /* Remember canonical path when proxy is use */
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int proxyOrigPort; /* Tunneled port number for https through proxy */
71 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
72 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* INTERFACE */
73 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -87,17 +88,17 @@
87 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user Userid.
88 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** passwd Password.
89 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** hostname HOST:PORT or just HOST if port is the default.
90 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** canonical The URL in canonical form, omitting the password
91 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If zUrl==0 and URL_USE_CONFIG is set, then parse the URL stored
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in last-sync-url and last-sync-pw of the CONFIG table. Or if
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If URL_USECONFIG is set and zUrl is NULL or "default", then parse the
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** URL stored in last-sync-url and last-sync-pw of the CONFIG table. Or if
94 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** URL_USE_PARENT is also set, then use parent-project-url and
95 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parent-project-pw from the CONFIG table instead of last-sync-url
96 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and last-sync-pw.
97 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If zUrl is a symbolic name and URL_USE_CONFIG is true, then look up
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If URL_USE_CONFIG is set and zUrl is a symbolic name, then look up
99 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the URL in sync-url:%Q and sync-pw:%Q elements of the CONFIG table where
100 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** %Q is the symbolic name.
101 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
102 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine differs from url_parse() in that this routine stores the
103 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** results in pUrlData and does not change the values of global variables.
@@ -109,10 +110,11 @@
109 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UrlData *pUrlData
110 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
111 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j, c;
112 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFile = 0;
113 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pUrlData->pwConfig = 0;
114 116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( urlFlags & URL_USE_CONFIG ){
115 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUrl==0 || strcmp(zUrl,"default")==0 ){
116 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPwConfig = "last-sync-pw";
117 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( urlFlags & URL_USE_PARENT ){
118 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUrl = db_get("parent-project-url", 0);
@@ -125,26 +127,28 @@
125 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUrl = db_get("last-sync-url", 0);
126 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
127 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUrl==0 ) return;
128 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pUrlData->passwd==0 ){
129 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUrlData->passwd = unobscure(db_get(zPwConfig, 0));
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pUrlData->pwConfig = fossil_strdup(zPwConfig);
130 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUrlData->isAlias = 1;
132 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zKey = sqlite3_mprintf("sync-url:%q", zUrl);
134 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zAlt = db_get(zKey, 0);
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(zKey);
136 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zAlt ){
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pUrlData->pwConfig = mprintf("sync-pw:%q", zUrl);
137 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUrlData->passwd = unobscure(
138 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_text(0, "SELECT value FROM config WHERE name='sync-pw:%q'",zUrl)
139 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
140 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUrl = zAlt;
141 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
urlFlags |= URL_REMEMBER_PW;
142 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUrlData->isAlias = 1;
143 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUrlData->isAlias = 0;
145 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zKey);
146 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
148 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUrl==0 ) return;
149 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -404,10 +408,11 @@
404 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(p->name);
405 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(p->path);
406 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(p->user);
407 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(p->passwd);
408 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(p->fossil);
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(p->pwConfig);
409 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(p, 0, sizeof(*p));
410 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
411 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
412 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
413 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Parse the given URL, which describes a sync server. Populate variables
@@ -425,19 +430,29 @@
425 430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.url.path Path name for HTTP or HTTPS.
426 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.url.user Userid.
427 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.url.passwd Password.
428 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.url.hostname HOST:PORT or just HOST if port is the default.
429 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.url.canonical The URL in canonical form, omitting the password
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** g.url.pwConfig Name of CONFIG table entry containing the password
430 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
431 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** HTTP url format as follows (HTTPS is the same with a different scheme):
432 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
433 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** http://userid:password@host:port/path
434 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
435 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SSH url format is:
436 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
437 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ssh://userid@host:port/path?fossil=path/to/fossil.exe
438 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If URL_USE_CONFIG is set then the URL and password might be pulled from
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the CONFIG table rather than from the zUrl parameter. If zUrl is NULL
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or "default" then the URL is given by the "last-sync-url" setting and
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the password comes form the "last-sync-pw" setting. If zUrl is a symbolic
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** name, then the URL comes from "sync-url:NAME" and the password from
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "sync-pw:NAME" where NAME is the input zUrl string. Whenever the
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** password is taken from the CONFIG table, the g.url.pwConfig field is
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set to the CONFIG.NAME value from which that password is taken. Otherwise,
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** g.url.pwConfig is NULL.
439 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
440 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void url_parse(const char *zUrl, unsigned int urlFlags){
441 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_parse_local(zUrl, urlFlags, &g.url);
442 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
443 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -444,22 +459,28 @@
444 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
445 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-urlparser
446 461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
447 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: %fossil test-urlparser URL ?options?
448 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** --remember Store results in last-sync-url
450 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --prompt-pw Prompt for password if missing
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --remember Store results in last-sync-url
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --show-pw Show the CONFIG-derived password in the output
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --use-config Pull URL and password from the CONFIG table
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --use-parent Use the parent project URL
451 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
452 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void cmd_test_urlparser(void){
453 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
454 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned fg = 0;
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int showPw = 0;
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_must_be_within_tree();
455 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_proxy_options();
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("remember",0,0) ){
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_must_be_within_tree();
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fg |= URL_REMEMBER;
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("prompt-pw",0,0) ) fg |= URL_PROMPT_PW;
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("remember",0,0) ) fg |= URL_REMEMBER;
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("prompt-pw",0,0) ) fg |= URL_PROMPT_PW;
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("use-parent",0,0) ) fg |= URL_USE_PARENT|URL_USE_CONFIG;
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("use-config",0,0) ) fg |= URL_USE_CONFIG;
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("show-pw",0,0) ) showPw = 1;
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (fg & URL_USE_CONFIG)==0 ) showPw = 1;
461 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=3 && g.argc!=4 ){
462 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("URL");
463 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
464 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_parse(g.argv[2], fg);
465 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<2; i++){
@@ -471,11 +492,16 @@
471 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.port = %d\n", g.url.port);
472 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.dfltPort = %d\n", g.url.dfltPort);
473 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.hostname = %s\n", g.url.hostname);
474 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.path = %s\n", g.url.path);
475 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.user = %s\n", g.url.user);
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("g.url.passwd = %s\n", g.url.passwd);
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( showPw || g.url.pwConfig==0 ){
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("g.url.passwd = %s\n", g.url.passwd);
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("g.url.passwd = ************\n");
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("g.url.pwConfig = %s\n", g.url.pwConfig);
477 503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.canonical = %s\n", g.url.canonical);
478 504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.fossil = %s\n", g.url.fossil);
479 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.url.flags = 0x%02x\n", g.url.flags);
480 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("url_full(g.url) = %z\n", url_full(&g.url));
481 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.url.isFile || g.url.isSsh ) break;
482 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!