Fossil SCM
Merge changes to normalize the URL of HTTP requests.
Commit
7e937012944ab989876d1b6c0181656f7f1114ebe858ba21426354ab2bdb02cc
Parent
95010490aad1929…
1 file changed
+14
-5
+14
-5
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -1367,24 +1367,33 @@ | ||
| 1367 | 1367 | fossil_fatal("argument to --baseurl should be 'http://host/path'" |
| 1368 | 1368 | " or 'https://host/path'"); |
| 1369 | 1369 | } |
| 1370 | 1370 | if( g.zTop[1]==0 ) g.zTop++; |
| 1371 | 1371 | }else{ |
| 1372 | + char *z; | |
| 1372 | 1373 | zHost = PD("HTTP_HOST",""); |
| 1374 | + z = fossil_strdup(zHost); | |
| 1375 | + for(i=0; z[i]; i++){ | |
| 1376 | + if( z[i]<='Z' && z[i]>='A' ) z[i] += 'a' - 'A'; | |
| 1377 | + } | |
| 1378 | + if( i>3 && z[i-1]=='0' && z[i-2]=='8' && z[i-3]==':' ) i -= 3; | |
| 1379 | + if( i && z[i-1]=='.' ) i--; | |
| 1380 | + z[i] = 0; | |
| 1373 | 1381 | zMode = PD("HTTPS","off"); |
| 1374 | 1382 | zCur = PD("SCRIPT_NAME","/"); |
| 1375 | 1383 | i = strlen(zCur); |
| 1376 | 1384 | while( i>0 && zCur[i-1]=='/' ) i--; |
| 1377 | 1385 | if( fossil_stricmp(zMode,"on")==0 ){ |
| 1378 | - g.zBaseURL = mprintf("https://%s%.*s", zHost, i, zCur); | |
| 1379 | - g.zTop = &g.zBaseURL[8+strlen(zHost)]; | |
| 1386 | + g.zBaseURL = mprintf("https://%s%.*s", z, i, zCur); | |
| 1387 | + g.zTop = &g.zBaseURL[8+strlen(z)]; | |
| 1380 | 1388 | g.zHttpsURL = g.zBaseURL; |
| 1381 | 1389 | }else{ |
| 1382 | - g.zBaseURL = mprintf("http://%s%.*s", zHost, i, zCur); | |
| 1383 | - g.zTop = &g.zBaseURL[7+strlen(zHost)]; | |
| 1384 | - g.zHttpsURL = mprintf("https://%s%.*s", zHost, i, zCur); | |
| 1390 | + g.zBaseURL = mprintf("http://%s%.*s", z, i, zCur); | |
| 1391 | + g.zTop = &g.zBaseURL[7+strlen(z)]; | |
| 1392 | + g.zHttpsURL = mprintf("https://%s%.*s", z, i, zCur); | |
| 1385 | 1393 | } |
| 1394 | + fossil_free(z); | |
| 1386 | 1395 | } |
| 1387 | 1396 | if( db_is_writeable("repository") ){ |
| 1388 | 1397 | int nBase = (int)strlen(g.zBaseURL); |
| 1389 | 1398 | char *zBase = g.zBaseURL; |
| 1390 | 1399 | if( g.nExtraURL>0 && g.nExtraURL<nBase-6 ){ |
| 1391 | 1400 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1367,24 +1367,33 @@ | |
| 1367 | fossil_fatal("argument to --baseurl should be 'http://host/path'" |
| 1368 | " or 'https://host/path'"); |
| 1369 | } |
| 1370 | if( g.zTop[1]==0 ) g.zTop++; |
| 1371 | }else{ |
| 1372 | zHost = PD("HTTP_HOST",""); |
| 1373 | zMode = PD("HTTPS","off"); |
| 1374 | zCur = PD("SCRIPT_NAME","/"); |
| 1375 | i = strlen(zCur); |
| 1376 | while( i>0 && zCur[i-1]=='/' ) i--; |
| 1377 | if( fossil_stricmp(zMode,"on")==0 ){ |
| 1378 | g.zBaseURL = mprintf("https://%s%.*s", zHost, i, zCur); |
| 1379 | g.zTop = &g.zBaseURL[8+strlen(zHost)]; |
| 1380 | g.zHttpsURL = g.zBaseURL; |
| 1381 | }else{ |
| 1382 | g.zBaseURL = mprintf("http://%s%.*s", zHost, i, zCur); |
| 1383 | g.zTop = &g.zBaseURL[7+strlen(zHost)]; |
| 1384 | g.zHttpsURL = mprintf("https://%s%.*s", zHost, i, zCur); |
| 1385 | } |
| 1386 | } |
| 1387 | if( db_is_writeable("repository") ){ |
| 1388 | int nBase = (int)strlen(g.zBaseURL); |
| 1389 | char *zBase = g.zBaseURL; |
| 1390 | if( g.nExtraURL>0 && g.nExtraURL<nBase-6 ){ |
| 1391 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1367,24 +1367,33 @@ | |
| 1367 | fossil_fatal("argument to --baseurl should be 'http://host/path'" |
| 1368 | " or 'https://host/path'"); |
| 1369 | } |
| 1370 | if( g.zTop[1]==0 ) g.zTop++; |
| 1371 | }else{ |
| 1372 | char *z; |
| 1373 | zHost = PD("HTTP_HOST",""); |
| 1374 | z = fossil_strdup(zHost); |
| 1375 | for(i=0; z[i]; i++){ |
| 1376 | if( z[i]<='Z' && z[i]>='A' ) z[i] += 'a' - 'A'; |
| 1377 | } |
| 1378 | if( i>3 && z[i-1]=='0' && z[i-2]=='8' && z[i-3]==':' ) i -= 3; |
| 1379 | if( i && z[i-1]=='.' ) i--; |
| 1380 | z[i] = 0; |
| 1381 | zMode = PD("HTTPS","off"); |
| 1382 | zCur = PD("SCRIPT_NAME","/"); |
| 1383 | i = strlen(zCur); |
| 1384 | while( i>0 && zCur[i-1]=='/' ) i--; |
| 1385 | if( fossil_stricmp(zMode,"on")==0 ){ |
| 1386 | g.zBaseURL = mprintf("https://%s%.*s", z, i, zCur); |
| 1387 | g.zTop = &g.zBaseURL[8+strlen(z)]; |
| 1388 | g.zHttpsURL = g.zBaseURL; |
| 1389 | }else{ |
| 1390 | g.zBaseURL = mprintf("http://%s%.*s", z, i, zCur); |
| 1391 | g.zTop = &g.zBaseURL[7+strlen(z)]; |
| 1392 | g.zHttpsURL = mprintf("https://%s%.*s", z, i, zCur); |
| 1393 | } |
| 1394 | fossil_free(z); |
| 1395 | } |
| 1396 | if( db_is_writeable("repository") ){ |
| 1397 | int nBase = (int)strlen(g.zBaseURL); |
| 1398 | char *zBase = g.zBaseURL; |
| 1399 | if( g.nExtraURL>0 && g.nExtraURL<nBase-6 ){ |
| 1400 |