| | @@ -64,25 +64,23 @@ |
| 64 | 64 | ** |
| 65 | 65 | ** http://userid:password@host:port/path |
| 66 | 66 | ** |
| 67 | 67 | ** SSH url format is: |
| 68 | 68 | ** |
| 69 | | -** ssh://userid:password@host:port/path?fossil=path/to/fossil.exe |
| 69 | +** ssh://userid@host:port/path?fossil=path/to/fossil.exe |
| 70 | 70 | ** |
| 71 | 71 | */ |
| 72 | 72 | void url_parse(const char *zUrl, unsigned int urlFlags){ |
| 73 | 73 | int i, j, c; |
| 74 | 74 | char *zFile = 0; |
| 75 | | - int bSetUrl = 1; |
| 76 | 75 | |
| 77 | 76 | if( zUrl==0 ){ |
| 78 | 77 | zUrl = db_get("last-sync-url", 0); |
| 79 | 78 | if( zUrl==0 ) return; |
| 80 | 79 | if( g.urlPasswd==0 ){ |
| 81 | 80 | g.urlPasswd = unobscure(db_get("last-sync-pw", 0)); |
| 82 | 81 | } |
| 83 | | - bSetUrl = 0; |
| 84 | 82 | } |
| 85 | 83 | |
| 86 | 84 | if( strncmp(zUrl, "http://", 7)==0 |
| 87 | 85 | || strncmp(zUrl, "https://", 8)==0 |
| 88 | 86 | || strncmp(zUrl, "ssh://", 6)==0 |
| | @@ -115,19 +113,20 @@ |
| 115 | 113 | /* Parse up the user-id and password */ |
| 116 | 114 | for(j=iStart; j<i && zUrl[j]!=':'; j++){} |
| 117 | 115 | g.urlUser = mprintf("%.*s", j-iStart, &zUrl[iStart]); |
| 118 | 116 | dehttpize(g.urlUser); |
| 119 | 117 | if( j<i ){ |
| 120 | | - if( urlFlags & URL_REMEMBER ) urlFlags |= URL_ASK_REMEMBER_PW; |
| 118 | + if( ( urlFlags & URL_REMEMBER ) && g.urlIsSsh==0 ){ |
| 119 | + urlFlags |= URL_ASK_REMEMBER_PW; |
| 120 | + } |
| 121 | 121 | g.urlPasswd = mprintf("%.*s", i-j-1, &zUrl[j+1]); |
| 122 | 122 | dehttpize(g.urlPasswd); |
| 123 | 123 | } |
| 124 | | - if( g.urlIsSsh && g.urlPasswd ){ |
| 125 | | - zLogin = mprintf("%t:*@", g.urlUser); |
| 126 | | - }else{ |
| 127 | | - zLogin = mprintf("%t@", g.urlUser); |
| 124 | + if( g.urlIsSsh ){ |
| 125 | + urlFlags &= ~URL_ASK_REMEMBER_PW; |
| 128 | 126 | } |
| 127 | + zLogin = mprintf("%t@", g.urlUser); |
| 129 | 128 | for(j=i+1; (c=zUrl[j])!=0 && c!='/' && c!=':'; j++){} |
| 130 | 129 | g.urlName = mprintf("%.*s", j-i-1, &zUrl[i+1]); |
| 131 | 130 | i = j; |
| 132 | 131 | }else{ |
| 133 | 132 | for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!=':'; i++){} |
| | @@ -234,18 +233,10 @@ |
| 234 | 233 | }else{ |
| 235 | 234 | g.urlFlags = urlFlags &= ~URL_REMEMBER_PW; |
| 236 | 235 | } |
| 237 | 236 | } |
| 238 | 237 | } |
| 239 | | - if( urlFlags & URL_REMEMBER ){ |
| 240 | | - if( bSetUrl ){ |
| 241 | | - db_set("last-sync-url", g.urlCanonical, 0); |
| 242 | | - } |
| 243 | | - if( g.urlPasswd && g.urlUser && ( g.urlFlags & URL_REMEMBER_PW ) ){ |
| 244 | | - db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 245 | | - } |
| 246 | | - } |
| 247 | 238 | } |
| 248 | 239 | |
| 249 | 240 | /* |
| 250 | 241 | ** COMMAND: test-urlparser |
| 251 | 242 | ** |
| | @@ -453,13 +444,10 @@ |
| 453 | 444 | if( g.urlPasswd[0] |
| 454 | 445 | && (g.urlFlags & (URL_REMEMBER|URL_ASK_REMEMBER_PW))!=0 |
| 455 | 446 | ){ |
| 456 | 447 | if( save_password_prompt() ){ |
| 457 | 448 | g.urlFlags |= URL_REMEMBER_PW; |
| 458 | | - if( g.urlFlags & URL_REMEMBER ){ |
| 459 | | - db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 460 | | - } |
| 461 | 449 | }else{ |
| 462 | 450 | g.urlFlags &= ~URL_REMEMBER_PW; |
| 463 | 451 | } |
| 464 | 452 | } |
| 465 | 453 | }else{ |
| | @@ -467,18 +455,19 @@ |
| 467 | 455 | g.urlUser); |
| 468 | 456 | } |
| 469 | 457 | } |
| 470 | 458 | |
| 471 | 459 | /* |
| 472 | | -** Remember the URL if requested. |
| 460 | +** Remember the URL and password if requested. |
| 473 | 461 | */ |
| 474 | 462 | void url_remember(void){ |
| 475 | | - db_set("last-sync-url", g.urlCanonical, 0); |
| 476 | | - if( g.urlFlags & URL_REMEMBER_PW ){ |
| 477 | | - db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 463 | + if( g.urlFlags & URL_REMEMBER ){ |
| 464 | + db_set("last-sync-url", g.urlCanonical, 0); |
| 465 | + if( g.urlUser!=0 && g.urlPasswd!=0 && ( g.urlFlags & URL_REMEMBER_PW ) ){ |
| 466 | + db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 467 | + } |
| 478 | 468 | } |
| 479 | | - g.urlFlags |= URL_REMEMBER; |
| 480 | 469 | } |
| 481 | 470 | |
| 482 | 471 | /* Preemptively prompt for a password if a username is given in the |
| 483 | 472 | ** URL but no password. |
| 484 | 473 | */ |
| 485 | 474 | |