Fossil SCM
If REQUEST_URI includes a query string (which it does for "fossil ui" and for Apache, but not for althttpd) then omit that string prior to using the REQUEST_URI when forming the "g=" query parameter for the login redirect in login_needed().
Commit
d327660804fe3bd4633dd64a7e7d4813d4d598a81308a3e646fb4cdbcbf44915
Parent
358d7d8f0ee8e53…
1 file changed
+6
-2
+6
-2
| --- src/login.c | ||
| +++ src/login.c | ||
| @@ -1424,16 +1424,20 @@ | ||
| 1424 | 1424 | }else |
| 1425 | 1425 | #endif /* FOSSIL_ENABLE_JSON */ |
| 1426 | 1426 | { |
| 1427 | 1427 | const char *zUrl = PD("REQUEST_URI", "index"); |
| 1428 | 1428 | const char *zQS = P("QUERY_STRING"); |
| 1429 | + char *zUrlNoQS; | |
| 1430 | + int i; | |
| 1429 | 1431 | Blob redir; |
| 1430 | 1432 | blob_init(&redir, 0, 0); |
| 1433 | + for(i=0; zUrl[i] && zUrl[i]!='?'; i++){} | |
| 1434 | + zUrlNoQS = fossil_strndup(zUrl, i); | |
| 1431 | 1435 | if( fossil_wants_https(1) ){ |
| 1432 | - blob_appendf(&redir, "%s/login?g=%T", g.zHttpsURL, zUrl); | |
| 1436 | + blob_appendf(&redir, "%s/login?g=%T", g.zHttpsURL, zUrlNoQS); | |
| 1433 | 1437 | }else{ |
| 1434 | - blob_appendf(&redir, "%R/login?g=%T", zUrl); | |
| 1438 | + blob_appendf(&redir, "%R/login?g=%T", zUrlNoQS); | |
| 1435 | 1439 | } |
| 1436 | 1440 | if( zQS && zQS[0] ){ |
| 1437 | 1441 | blob_appendf(&redir, "%%3f%T", zQS); |
| 1438 | 1442 | } |
| 1439 | 1443 | if( anonOk ) blob_append(&redir, "&anon", 5); |
| 1440 | 1444 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -1424,16 +1424,20 @@ | |
| 1424 | }else |
| 1425 | #endif /* FOSSIL_ENABLE_JSON */ |
| 1426 | { |
| 1427 | const char *zUrl = PD("REQUEST_URI", "index"); |
| 1428 | const char *zQS = P("QUERY_STRING"); |
| 1429 | Blob redir; |
| 1430 | blob_init(&redir, 0, 0); |
| 1431 | if( fossil_wants_https(1) ){ |
| 1432 | blob_appendf(&redir, "%s/login?g=%T", g.zHttpsURL, zUrl); |
| 1433 | }else{ |
| 1434 | blob_appendf(&redir, "%R/login?g=%T", zUrl); |
| 1435 | } |
| 1436 | if( zQS && zQS[0] ){ |
| 1437 | blob_appendf(&redir, "%%3f%T", zQS); |
| 1438 | } |
| 1439 | if( anonOk ) blob_append(&redir, "&anon", 5); |
| 1440 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -1424,16 +1424,20 @@ | |
| 1424 | }else |
| 1425 | #endif /* FOSSIL_ENABLE_JSON */ |
| 1426 | { |
| 1427 | const char *zUrl = PD("REQUEST_URI", "index"); |
| 1428 | const char *zQS = P("QUERY_STRING"); |
| 1429 | char *zUrlNoQS; |
| 1430 | int i; |
| 1431 | Blob redir; |
| 1432 | blob_init(&redir, 0, 0); |
| 1433 | for(i=0; zUrl[i] && zUrl[i]!='?'; i++){} |
| 1434 | zUrlNoQS = fossil_strndup(zUrl, i); |
| 1435 | if( fossil_wants_https(1) ){ |
| 1436 | blob_appendf(&redir, "%s/login?g=%T", g.zHttpsURL, zUrlNoQS); |
| 1437 | }else{ |
| 1438 | blob_appendf(&redir, "%R/login?g=%T", zUrlNoQS); |
| 1439 | } |
| 1440 | if( zQS && zQS[0] ){ |
| 1441 | blob_appendf(&redir, "%%3f%T", zQS); |
| 1442 | } |
| 1443 | if( anonOk ) blob_append(&redir, "&anon", 5); |
| 1444 |