Fossil SCM
Only setup Fossil user if URL is SSH. This is done to avoid problems when cloning a fossil that has SSH settings using into a file:// URL.
Commit
1ebba56f2aa59a84a1b502f280cef806f2b8ef8b
Parent
6265b43ba1bc51b…
4 files changed
+2
-3
+5
-5
+3
-3
+9
-2
+2
-3
| --- src/http.c | ||
| +++ src/http.c | ||
| @@ -38,20 +38,19 @@ | ||
| 38 | 38 | const char *zLogin; /* The user login name */ |
| 39 | 39 | const char *zPw; /* The user password */ |
| 40 | 40 | Blob pw; /* The nonce with user password appended */ |
| 41 | 41 | Blob sig; /* The signature field */ |
| 42 | 42 | |
| 43 | + zLogin = url_or_fossil_user(); | |
| 43 | 44 | blob_zero(pLogin); |
| 44 | - if( g.urlUser==0 && g.zFossilUser==0 || | |
| 45 | - fossil_strcmp(g.urlUser, "anonymous")==0 ){ | |
| 45 | + if( zLogin==0 || fossil_strcmp(g.urlUser, "anonymous")==0 ){ | |
| 46 | 46 | return; /* If no login card for users "nobody" and "anonymous" */ |
| 47 | 47 | } |
| 48 | 48 | blob_zero(&nonce); |
| 49 | 49 | blob_zero(&pw); |
| 50 | 50 | sha1sum_blob(pPayload, &nonce); |
| 51 | 51 | blob_copy(&pw, &nonce); |
| 52 | - zLogin = url_or_fossil_user(); | |
| 53 | 52 | if( g.urlPasswd ){ |
| 54 | 53 | zPw = g.urlPasswd; |
| 55 | 54 | }else if( g.cgiOutput ){ |
| 56 | 55 | /* Password failure while doing a sync from the web interface */ |
| 57 | 56 | cgi_printf("*** incorrect or missing password for user %h\n", zLogin); |
| 58 | 57 |
| --- src/http.c | |
| +++ src/http.c | |
| @@ -38,20 +38,19 @@ | |
| 38 | const char *zLogin; /* The user login name */ |
| 39 | const char *zPw; /* The user password */ |
| 40 | Blob pw; /* The nonce with user password appended */ |
| 41 | Blob sig; /* The signature field */ |
| 42 | |
| 43 | blob_zero(pLogin); |
| 44 | if( g.urlUser==0 && g.zFossilUser==0 || |
| 45 | fossil_strcmp(g.urlUser, "anonymous")==0 ){ |
| 46 | return; /* If no login card for users "nobody" and "anonymous" */ |
| 47 | } |
| 48 | blob_zero(&nonce); |
| 49 | blob_zero(&pw); |
| 50 | sha1sum_blob(pPayload, &nonce); |
| 51 | blob_copy(&pw, &nonce); |
| 52 | zLogin = url_or_fossil_user(); |
| 53 | if( g.urlPasswd ){ |
| 54 | zPw = g.urlPasswd; |
| 55 | }else if( g.cgiOutput ){ |
| 56 | /* Password failure while doing a sync from the web interface */ |
| 57 | cgi_printf("*** incorrect or missing password for user %h\n", zLogin); |
| 58 |
| --- src/http.c | |
| +++ src/http.c | |
| @@ -38,20 +38,19 @@ | |
| 38 | const char *zLogin; /* The user login name */ |
| 39 | const char *zPw; /* The user password */ |
| 40 | Blob pw; /* The nonce with user password appended */ |
| 41 | Blob sig; /* The signature field */ |
| 42 | |
| 43 | zLogin = url_or_fossil_user(); |
| 44 | blob_zero(pLogin); |
| 45 | if( zLogin==0 || fossil_strcmp(g.urlUser, "anonymous")==0 ){ |
| 46 | return; /* If no login card for users "nobody" and "anonymous" */ |
| 47 | } |
| 48 | blob_zero(&nonce); |
| 49 | blob_zero(&pw); |
| 50 | sha1sum_blob(pPayload, &nonce); |
| 51 | blob_copy(&pw, &nonce); |
| 52 | if( g.urlPasswd ){ |
| 53 | zPw = g.urlPasswd; |
| 54 | }else if( g.cgiOutput ){ |
| 55 | /* Password failure while doing a sync from the web interface */ |
| 56 | cgi_printf("*** incorrect or missing password for user %h\n", zLogin); |
| 57 |
+5
-5
| --- src/sync.c | ||
| +++ src/sync.c | ||
| @@ -49,11 +49,11 @@ | ||
| 49 | 49 | }else{ |
| 50 | 50 | /* Autosync defaults on. To make it default off, "return" here. */ |
| 51 | 51 | } |
| 52 | 52 | url_parse(0, URL_REMEMBER); |
| 53 | 53 | if( g.urlProtocol==0 ) return 0; |
| 54 | - if( ( g.urlUser!=0 || g.zFossilUser!=0 ) && g.urlPasswd==0 ){ | |
| 54 | + if( ( url_or_fossil_user()!=0 ) && g.urlPasswd==0 ){ | |
| 55 | 55 | g.urlPasswd = unobscure(db_get("last-sync-pw", 0)); |
| 56 | 56 | if( g.urlIsSsh && g.urlPasswd==0 ){ |
| 57 | 57 | g.urlFlags |= URL_PROMPT_PW; |
| 58 | 58 | url_prompt_for_password(); |
| 59 | 59 | } |
| @@ -69,11 +69,11 @@ | ||
| 69 | 69 | */ |
| 70 | 70 | configSync = CONFIGSET_SHUN; |
| 71 | 71 | } |
| 72 | 72 | #endif |
| 73 | 73 | if( find_option("verbose","v",0)!=0 ) flags |= SYNC_VERBOSE; |
| 74 | - ( g.zFossilUser && g.zFossilUser[0] ) ? | |
| 74 | + is_fossil_user() ? | |
| 75 | 75 | fossil_print("Autosync: (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 76 | 76 | fossil_print("Autosync: %s\n", g.urlCanonical); |
| 77 | 77 | url_enable_proxy("via proxy: "); |
| 78 | 78 | rc = client_sync(flags, configSync, 0); |
| 79 | 79 | if( rc ) fossil_warning("Autosync failed"); |
| @@ -120,19 +120,19 @@ | ||
| 120 | 120 | usage("URL"); |
| 121 | 121 | } |
| 122 | 122 | user_select(); |
| 123 | 123 | if( g.argc==2 ){ |
| 124 | 124 | if( ((*pSyncFlags) & (SYNC_PUSH|SYNC_PULL))==(SYNC_PUSH|SYNC_PULL) ){ |
| 125 | - ( g.zFossilUser && g.zFossilUser[0] ) ? | |
| 125 | + is_fossil_user() ? | |
| 126 | 126 | fossil_print("Sync with (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 127 | 127 | fossil_print("Sync with %s\n", g.urlCanonical); |
| 128 | 128 | }else if( (*pSyncFlags) & SYNC_PUSH ){ |
| 129 | - ( g.zFossilUser && g.zFossilUser[0] ) ? | |
| 129 | + is_fossil_user() ? | |
| 130 | 130 | fossil_print("Push to (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 131 | 131 | fossil_print("Push to %s\n", g.urlCanonical); |
| 132 | 132 | }else if( (*pSyncFlags) & SYNC_PULL ){ |
| 133 | - ( g.zFossilUser && g.zFossilUser[0] ) ? | |
| 133 | + is_fossil_user() ? | |
| 134 | 134 | fossil_print("Pull from (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 135 | 135 | fossil_print("Pull from %s\n", g.urlCanonical); |
| 136 | 136 | } |
| 137 | 137 | } |
| 138 | 138 | url_enable_proxy("via proxy: "); |
| 139 | 139 |
| --- src/sync.c | |
| +++ src/sync.c | |
| @@ -49,11 +49,11 @@ | |
| 49 | }else{ |
| 50 | /* Autosync defaults on. To make it default off, "return" here. */ |
| 51 | } |
| 52 | url_parse(0, URL_REMEMBER); |
| 53 | if( g.urlProtocol==0 ) return 0; |
| 54 | if( ( g.urlUser!=0 || g.zFossilUser!=0 ) && g.urlPasswd==0 ){ |
| 55 | g.urlPasswd = unobscure(db_get("last-sync-pw", 0)); |
| 56 | if( g.urlIsSsh && g.urlPasswd==0 ){ |
| 57 | g.urlFlags |= URL_PROMPT_PW; |
| 58 | url_prompt_for_password(); |
| 59 | } |
| @@ -69,11 +69,11 @@ | |
| 69 | */ |
| 70 | configSync = CONFIGSET_SHUN; |
| 71 | } |
| 72 | #endif |
| 73 | if( find_option("verbose","v",0)!=0 ) flags |= SYNC_VERBOSE; |
| 74 | ( g.zFossilUser && g.zFossilUser[0] ) ? |
| 75 | fossil_print("Autosync: (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 76 | fossil_print("Autosync: %s\n", g.urlCanonical); |
| 77 | url_enable_proxy("via proxy: "); |
| 78 | rc = client_sync(flags, configSync, 0); |
| 79 | if( rc ) fossil_warning("Autosync failed"); |
| @@ -120,19 +120,19 @@ | |
| 120 | usage("URL"); |
| 121 | } |
| 122 | user_select(); |
| 123 | if( g.argc==2 ){ |
| 124 | if( ((*pSyncFlags) & (SYNC_PUSH|SYNC_PULL))==(SYNC_PUSH|SYNC_PULL) ){ |
| 125 | ( g.zFossilUser && g.zFossilUser[0] ) ? |
| 126 | fossil_print("Sync with (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 127 | fossil_print("Sync with %s\n", g.urlCanonical); |
| 128 | }else if( (*pSyncFlags) & SYNC_PUSH ){ |
| 129 | ( g.zFossilUser && g.zFossilUser[0] ) ? |
| 130 | fossil_print("Push to (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 131 | fossil_print("Push to %s\n", g.urlCanonical); |
| 132 | }else if( (*pSyncFlags) & SYNC_PULL ){ |
| 133 | ( g.zFossilUser && g.zFossilUser[0] ) ? |
| 134 | fossil_print("Pull from (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 135 | fossil_print("Pull from %s\n", g.urlCanonical); |
| 136 | } |
| 137 | } |
| 138 | url_enable_proxy("via proxy: "); |
| 139 |
| --- src/sync.c | |
| +++ src/sync.c | |
| @@ -49,11 +49,11 @@ | |
| 49 | }else{ |
| 50 | /* Autosync defaults on. To make it default off, "return" here. */ |
| 51 | } |
| 52 | url_parse(0, URL_REMEMBER); |
| 53 | if( g.urlProtocol==0 ) return 0; |
| 54 | if( ( url_or_fossil_user()!=0 ) && g.urlPasswd==0 ){ |
| 55 | g.urlPasswd = unobscure(db_get("last-sync-pw", 0)); |
| 56 | if( g.urlIsSsh && g.urlPasswd==0 ){ |
| 57 | g.urlFlags |= URL_PROMPT_PW; |
| 58 | url_prompt_for_password(); |
| 59 | } |
| @@ -69,11 +69,11 @@ | |
| 69 | */ |
| 70 | configSync = CONFIGSET_SHUN; |
| 71 | } |
| 72 | #endif |
| 73 | if( find_option("verbose","v",0)!=0 ) flags |= SYNC_VERBOSE; |
| 74 | is_fossil_user() ? |
| 75 | fossil_print("Autosync: (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 76 | fossil_print("Autosync: %s\n", g.urlCanonical); |
| 77 | url_enable_proxy("via proxy: "); |
| 78 | rc = client_sync(flags, configSync, 0); |
| 79 | if( rc ) fossil_warning("Autosync failed"); |
| @@ -120,19 +120,19 @@ | |
| 120 | usage("URL"); |
| 121 | } |
| 122 | user_select(); |
| 123 | if( g.argc==2 ){ |
| 124 | if( ((*pSyncFlags) & (SYNC_PUSH|SYNC_PULL))==(SYNC_PUSH|SYNC_PULL) ){ |
| 125 | is_fossil_user() ? |
| 126 | fossil_print("Sync with (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 127 | fossil_print("Sync with %s\n", g.urlCanonical); |
| 128 | }else if( (*pSyncFlags) & SYNC_PUSH ){ |
| 129 | is_fossil_user() ? |
| 130 | fossil_print("Push to (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 131 | fossil_print("Push to %s\n", g.urlCanonical); |
| 132 | }else if( (*pSyncFlags) & SYNC_PULL ){ |
| 133 | is_fossil_user() ? |
| 134 | fossil_print("Pull from (%s) %s\n", g.zFossilUser, g.urlCanonical) : |
| 135 | fossil_print("Pull from %s\n", g.urlCanonical); |
| 136 | } |
| 137 | } |
| 138 | url_enable_proxy("via proxy: "); |
| 139 |
+3
-3
| --- src/url.c | ||
| +++ src/url.c | ||
| @@ -201,20 +201,20 @@ | ||
| 201 | 201 | g.urlProtocol = "file"; |
| 202 | 202 | g.urlPath = ""; |
| 203 | 203 | g.urlName = mprintf("%b", &cfile); |
| 204 | 204 | g.urlCanonical = mprintf("file://%T", g.urlName); |
| 205 | 205 | blob_reset(&cfile); |
| 206 | - }else if( ( g.urlUser!=0 || g.zFossilUser!=0 ) | |
| 207 | - && g.urlPasswd==0 && (urlFlags & URL_PROMPT_PW) ){ | |
| 206 | + }else if( url_or_fossil_user()!=0 && | |
| 207 | + g.urlPasswd==0 && (urlFlags & URL_PROMPT_PW) ){ | |
| 208 | 208 | url_prompt_for_password(); |
| 209 | 209 | bPrompted = 1; |
| 210 | 210 | } |
| 211 | 211 | if( urlFlags & URL_REMEMBER ){ |
| 212 | 212 | if( bSetUrl ){ |
| 213 | 213 | db_set("last-sync-url", g.urlCanonical, 0); |
| 214 | 214 | } |
| 215 | - if( !bPrompted && g.urlPasswd && ( g.urlUser || g.zFossilUser ) ){ | |
| 215 | + if( !bPrompted && g.urlPasswd && url_or_fossil_user() ){ | |
| 216 | 216 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 217 | 217 | } |
| 218 | 218 | } |
| 219 | 219 | } |
| 220 | 220 | |
| 221 | 221 |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -201,20 +201,20 @@ | |
| 201 | g.urlProtocol = "file"; |
| 202 | g.urlPath = ""; |
| 203 | g.urlName = mprintf("%b", &cfile); |
| 204 | g.urlCanonical = mprintf("file://%T", g.urlName); |
| 205 | blob_reset(&cfile); |
| 206 | }else if( ( g.urlUser!=0 || g.zFossilUser!=0 ) |
| 207 | && g.urlPasswd==0 && (urlFlags & URL_PROMPT_PW) ){ |
| 208 | url_prompt_for_password(); |
| 209 | bPrompted = 1; |
| 210 | } |
| 211 | if( urlFlags & URL_REMEMBER ){ |
| 212 | if( bSetUrl ){ |
| 213 | db_set("last-sync-url", g.urlCanonical, 0); |
| 214 | } |
| 215 | if( !bPrompted && g.urlPasswd && ( g.urlUser || g.zFossilUser ) ){ |
| 216 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 217 | } |
| 218 | } |
| 219 | } |
| 220 | |
| 221 |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -201,20 +201,20 @@ | |
| 201 | g.urlProtocol = "file"; |
| 202 | g.urlPath = ""; |
| 203 | g.urlName = mprintf("%b", &cfile); |
| 204 | g.urlCanonical = mprintf("file://%T", g.urlName); |
| 205 | blob_reset(&cfile); |
| 206 | }else if( url_or_fossil_user()!=0 && |
| 207 | g.urlPasswd==0 && (urlFlags & URL_PROMPT_PW) ){ |
| 208 | url_prompt_for_password(); |
| 209 | bPrompted = 1; |
| 210 | } |
| 211 | if( urlFlags & URL_REMEMBER ){ |
| 212 | if( bSetUrl ){ |
| 213 | db_set("last-sync-url", g.urlCanonical, 0); |
| 214 | } |
| 215 | if( !bPrompted && g.urlPasswd && url_or_fossil_user() ){ |
| 216 | db_set("last-sync-pw", obscure(g.urlPasswd), 0); |
| 217 | } |
| 218 | } |
| 219 | } |
| 220 | |
| 221 |
+9
-2
| --- src/user.c | ||
| +++ src/user.c | ||
| @@ -157,14 +157,21 @@ | ||
| 157 | 157 | blob_reset(&x); |
| 158 | 158 | return zPw; |
| 159 | 159 | } |
| 160 | 160 | |
| 161 | 161 | /* |
| 162 | -** Return Fossil user if defined or URL user | |
| 162 | +** Return Fossil user if allocated and URL is SSH or URL user | |
| 163 | 163 | */ |
| 164 | 164 | const char *url_or_fossil_user(void){ |
| 165 | - return ( g.zFossilUser && g.zFossilUser[0] ) ? g.zFossilUser : g.urlUser; | |
| 165 | + return is_fossil_user() ? g.zFossilUser : g.urlUser; | |
| 166 | +} | |
| 167 | + | |
| 168 | +/* | |
| 169 | +** Return true if URL is SSH and Fossil user is allocated | |
| 170 | +*/ | |
| 171 | +int is_fossil_user(void) { | |
| 172 | + return g.urlIsSsh && g.zFossilUser && g.zFossilUser[0]; | |
| 166 | 173 | } |
| 167 | 174 | |
| 168 | 175 | /* |
| 169 | 176 | ** Prompt the user to enter a single line of text. |
| 170 | 177 | */ |
| 171 | 178 |
| --- src/user.c | |
| +++ src/user.c | |
| @@ -157,14 +157,21 @@ | |
| 157 | blob_reset(&x); |
| 158 | return zPw; |
| 159 | } |
| 160 | |
| 161 | /* |
| 162 | ** Return Fossil user if defined or URL user |
| 163 | */ |
| 164 | const char *url_or_fossil_user(void){ |
| 165 | return ( g.zFossilUser && g.zFossilUser[0] ) ? g.zFossilUser : g.urlUser; |
| 166 | } |
| 167 | |
| 168 | /* |
| 169 | ** Prompt the user to enter a single line of text. |
| 170 | */ |
| 171 |
| --- src/user.c | |
| +++ src/user.c | |
| @@ -157,14 +157,21 @@ | |
| 157 | blob_reset(&x); |
| 158 | return zPw; |
| 159 | } |
| 160 | |
| 161 | /* |
| 162 | ** Return Fossil user if allocated and URL is SSH or URL user |
| 163 | */ |
| 164 | const char *url_or_fossil_user(void){ |
| 165 | return is_fossil_user() ? g.zFossilUser : g.urlUser; |
| 166 | } |
| 167 | |
| 168 | /* |
| 169 | ** Return true if URL is SSH and Fossil user is allocated |
| 170 | */ |
| 171 | int is_fossil_user(void) { |
| 172 | return g.urlIsSsh && g.zFossilUser && g.zFossilUser[0]; |
| 173 | } |
| 174 | |
| 175 | /* |
| 176 | ** Prompt the user to enter a single line of text. |
| 177 | */ |
| 178 |