@@ -17,10 +17,22 @@
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code for parsing URLs that appear on the command-line
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "config.h"
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "url.h"
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if INTERFACE
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Flags for url_parse()
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define URL_PROMPT_PW 0x001 /* Prompt for password if needed */
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define URL_REMEMBER 0x002 /* Remember the url for later reuse */
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define URL_ASK_REMEMBER_PW 0x004 /* Ask whether to remember prompted pw */
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define URL_REMEMBER_PW 0x008 /* Should remember pw */
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* INTERFACE */
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
22 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
23 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert a string to lower-case.
25 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void url_tolower(char *z){
@@ -29,11 +41,12 @@
29 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
30 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Parse the given URL. Populate variables in the global "g" structure.
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Parse the given URL, which describes a sync server. Populate variables
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the global "g" structure as follows:
35 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlIsFile True if FILE:
37 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlIsHttps True if HTTPS:
38 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlIsSsh True if SSH:
39 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlProtocol "http" or "https" or "file"
@@ -44,22 +57,32 @@
44 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlUser Userid.
45 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlPasswd Password.
46 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlHostname HOST:PORT or just HOST if port is the default.
47 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** g.urlCanonical The URL in canonical form, omitting the password
48 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** HTTP url format is:
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** HTTP url format as follows (HTTPS is the same with a different scheme):
50 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
51 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** http://userid:password@host:port/path
52 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
53 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SSH url format is:
54 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
55 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ssh://userid:password@host:port/path?fossil=path/to/fossil.exe
56 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
57 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void url_parse(const char *zUrl){
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void url_parse(const char *zUrl, unsigned int urlFlags){
59 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j, c;
60 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFile = 0;
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPrompted = 0;
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bSetUrl = 1;
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zUrl==0 ){
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zUrl = db_get("last-sync-url", 0);
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zUrl==0 ) return;
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.urlPasswd = unobscure(db_get("last-sync-pw", 0));
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bSetUrl = 0;
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
61 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(zUrl, "http://", 7)==0
62 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| strncmp(zUrl, "https://", 8)==0
63 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| strncmp(zUrl, "ssh://", 6)==0
64 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
65 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStart;
@@ -188,15 +211,16 @@
188 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFile = mprintf("%s/FOSSIL", zUrl);
189 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( file_isfile(zFile) ){
190 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlIsFile = 1;
191 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
192 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zFile);
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_panic("unknown repository: %s", zUrl);
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("unknown repository: %s", zUrl);
194 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
195 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_panic("unknown repository: %s", zUrl);
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("unknown repository: %s", zUrl);
197 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.urlFlags = urlFlags;
198 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.urlIsFile ){
199 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob cfile;
200 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dehttpize(zFile);
201 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_canonical_name(zFile, &cfile, 0);
202 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zFile);
@@ -203,23 +227,45 @@
203 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlProtocol = "file";
204 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlPath = "";
205 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlName = mprintf("%b", &cfile);
206 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlCanonical = mprintf("file://%T", g.urlName);
207 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&cfile);
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( g.urlUser!=0 && g.urlPasswd==0 && (urlFlags & URL_PROMPT_PW) ){
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_prompt_for_password();
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bPrompted = 1;
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( urlFlags & URL_REMEMBER ){
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bSetUrl ){
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set("last-sync-url", g.urlCanonical, 0);
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !bPrompted && g.urlPasswd && g.urlUser ){
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set("last-sync-pw", obscure(g.urlPasswd), 0);
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
208 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
209 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
210 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
211 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
212 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-urlparser
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usage: %fossil test-urlparser URL ?options?
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --remember Store results in last-sync-url
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --prompt-pw Prompt for password if missing
213 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
214 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void cmd_test_urlparser(void){
215 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned fg = 0;
216 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_proxy_options();
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("remember",0,0) ){
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_must_be_within_tree();
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fg |= URL_REMEMBER;
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("prompt-pw",0,0) ) fg |= URL_PROMPT_PW;
217 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=3 && g.argc!=4 ){
218 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("URL");
219 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- url_parse(g.argv[2]);
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_parse(g.argv[2], fg);
221 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<2; i++){
222 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlIsFile = %d\n", g.urlIsFile);
223 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlIsHttps = %d\n", g.urlIsHttps);
224 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlIsSsh = %d\n", g.urlIsSsh);
225 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlProtocol = %s\n", g.urlProtocol);
@@ -230,10 +276,11 @@
230 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlPath = %s\n", g.urlPath);
231 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlUser = %s\n", g.urlUser);
232 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlPasswd = %s\n", g.urlPasswd);
233 279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlCanonical = %s\n", g.urlCanonical);
234 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("g.urlFossil = %s\n", g.urlFossil);
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("g.urlFlags = 0x%02x\n", g.urlFlags);
235 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.urlIsFile || g.urlIsSsh ) break;
236 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==0 ){
237 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("********\n");
238 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_enable_proxy("Using proxy: ");
239 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -282,13 +329,14 @@
282 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zProxy && zProxy[0] && !is_false(zProxy) ){
283 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zOriginalUrl = g.urlCanonical;
284 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zOriginalHost = g.urlHostname;
285 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zOriginalUser = g.urlUser;
286 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zOriginalPasswd = g.urlPasswd;
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned uOriginalFlags = g.urlFlags;
287 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlUser = 0;
288 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlPasswd = "";
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- url_parse(zProxy);
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_parse(zProxy, 0);
290 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zMsg ) fossil_print("%s%s\n", zMsg, g.urlCanonical);
291 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlPath = zOriginalUrl;
292 340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlHostname = zOriginalHost;
293 341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.urlUser ){
294 342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zCredentials1 = mprintf("%s:%s", g.urlUser, g.urlPasswd);
@@ -296,10 +344,11 @@
296 344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlProxyAuth = mprintf("Basic %z", zCredentials2);
297 345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zCredentials1);
298 346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
299 347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlUser = zOriginalUser;
300 348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlPasswd = zOriginalPasswd;
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.urlFlags = uOriginalFlags;
301 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
302 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
303 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
304 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if INTERFACE
305 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -382,19 +431,45 @@
382 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
383 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void url_prompt_for_password(void){
384 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isatty(fileno(stdin)) ){
385 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser);
386 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob x;
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_force_newline();
387 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
prompt_for_password(zPrompt, &x, 0);
388 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zPrompt);
389 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlPasswd = mprintf("%b", &x);
390 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&x);
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.urlPasswd[0]
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (g.urlFlags & (URL_REMEMBER|URL_ASK_REMEMBER_PW))!=0
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char c;
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ prompt_user("remember password (Y/n)? ", &x);
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c = blob_str(&x)[0];
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&x);
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c!='n' && c!='N' ){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.urlFlags |= URL_REMEMBER_PW;
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.urlFlags & URL_REMEMBER ){
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set("last-sync-pw", obscure(g.urlPasswd), 0);
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
391 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
392 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("missing or incorrect password for user \"%s\"",
393 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.urlUser);
394 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
395 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Remember the URL if requested.
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void url_remember(void){
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set("last-sync-url", g.urlCanonical, 0);
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.urlFlags & URL_REMEMBER_PW ){
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set("last-sync-pw", obscure(g.urlPasswd), 0);
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.urlFlags = URL_REMEMBER;
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
396 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
397 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Preemptively prompt for a password if a username is given in the
398 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** URL but no password.
399 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
400 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void url_get_password_if_needed(void){
401 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!