Fossil SCM
Handle 301 redirect the same as 302 redirect.
Commit
2678d87d6a2c36435cae66b371a908d61385b4b4
Parent
479805e1ec7f6c4…
1 file changed
+5
-4
+5
-4
| --- src/http.c | ||
| +++ src/http.c | ||
| @@ -285,11 +285,11 @@ | ||
| 285 | 285 | g.zHttpAuth = prompt_for_httpauth_creds(); |
| 286 | 286 | transport_close(&g.url); |
| 287 | 287 | return http_exchange(pSend, pReply, useLogin, maxRedirect); |
| 288 | 288 | } |
| 289 | 289 | } |
| 290 | - if( rc!=200 && rc!=302 ){ | |
| 290 | + if( rc!=200 && rc!=301 && rc!=302 ){ | |
| 291 | 291 | int ii; |
| 292 | 292 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 293 | 293 | while( zLine[ii]==' ' ) ii++; |
| 294 | 294 | fossil_warning("server says: %s", &zLine[ii]); |
| 295 | 295 | goto write_err; |
| @@ -299,11 +299,11 @@ | ||
| 299 | 299 | }else{ |
| 300 | 300 | closeConnection = 0; |
| 301 | 301 | } |
| 302 | 302 | }else if( g.url.isSsh && fossil_strnicmp(zLine, "status:", 7)==0 ){ |
| 303 | 303 | if( sscanf(zLine, "Status: %d", &rc)!=1 ) goto write_err; |
| 304 | - if( rc!=200 && rc!=302 ){ | |
| 304 | + if( rc!=200 && rc!=301 && rc!=302 ){ | |
| 305 | 305 | int ii; |
| 306 | 306 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 307 | 307 | while( zLine[ii]==' ' ) ii++; |
| 308 | 308 | fossil_warning("server says: %s", &zLine[ii]); |
| 309 | 309 | goto write_err; |
| @@ -319,11 +319,12 @@ | ||
| 319 | 319 | if( c=='c' || c=='C' ){ |
| 320 | 320 | closeConnection = 1; |
| 321 | 321 | }else if( c=='k' || c=='K' ){ |
| 322 | 322 | closeConnection = 0; |
| 323 | 323 | } |
| 324 | - }else if( rc==302 && fossil_strnicmp(zLine, "location:", 9)==0 ){ | |
| 324 | + }else if( ( rc==301 || rc==302 ) && | |
| 325 | + fossil_strnicmp(zLine, "location:", 9)==0 ){ | |
| 325 | 326 | int i, j; |
| 326 | 327 | |
| 327 | 328 | if ( --maxRedirect == 0){ |
| 328 | 329 | fossil_warning("redirect limit exceeded"); |
| 329 | 330 | goto write_err; |
| @@ -360,11 +361,11 @@ | ||
| 360 | 361 | if( iLength<0 ){ |
| 361 | 362 | fossil_warning("server did not reply"); |
| 362 | 363 | goto write_err; |
| 363 | 364 | } |
| 364 | 365 | if( rc!=200 ){ |
| 365 | - fossil_warning("\"location:\" missing from 302 redirect reply"); | |
| 366 | + fossil_warning("\"location:\" missing from %d redirect reply", rc); | |
| 366 | 367 | goto write_err; |
| 367 | 368 | } |
| 368 | 369 | |
| 369 | 370 | /* |
| 370 | 371 | ** Extract the reply payload that follows the header |
| 371 | 372 |
| --- src/http.c | |
| +++ src/http.c | |
| @@ -285,11 +285,11 @@ | |
| 285 | g.zHttpAuth = prompt_for_httpauth_creds(); |
| 286 | transport_close(&g.url); |
| 287 | return http_exchange(pSend, pReply, useLogin, maxRedirect); |
| 288 | } |
| 289 | } |
| 290 | if( rc!=200 && rc!=302 ){ |
| 291 | int ii; |
| 292 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 293 | while( zLine[ii]==' ' ) ii++; |
| 294 | fossil_warning("server says: %s", &zLine[ii]); |
| 295 | goto write_err; |
| @@ -299,11 +299,11 @@ | |
| 299 | }else{ |
| 300 | closeConnection = 0; |
| 301 | } |
| 302 | }else if( g.url.isSsh && fossil_strnicmp(zLine, "status:", 7)==0 ){ |
| 303 | if( sscanf(zLine, "Status: %d", &rc)!=1 ) goto write_err; |
| 304 | if( rc!=200 && rc!=302 ){ |
| 305 | int ii; |
| 306 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 307 | while( zLine[ii]==' ' ) ii++; |
| 308 | fossil_warning("server says: %s", &zLine[ii]); |
| 309 | goto write_err; |
| @@ -319,11 +319,12 @@ | |
| 319 | if( c=='c' || c=='C' ){ |
| 320 | closeConnection = 1; |
| 321 | }else if( c=='k' || c=='K' ){ |
| 322 | closeConnection = 0; |
| 323 | } |
| 324 | }else if( rc==302 && fossil_strnicmp(zLine, "location:", 9)==0 ){ |
| 325 | int i, j; |
| 326 | |
| 327 | if ( --maxRedirect == 0){ |
| 328 | fossil_warning("redirect limit exceeded"); |
| 329 | goto write_err; |
| @@ -360,11 +361,11 @@ | |
| 360 | if( iLength<0 ){ |
| 361 | fossil_warning("server did not reply"); |
| 362 | goto write_err; |
| 363 | } |
| 364 | if( rc!=200 ){ |
| 365 | fossil_warning("\"location:\" missing from 302 redirect reply"); |
| 366 | goto write_err; |
| 367 | } |
| 368 | |
| 369 | /* |
| 370 | ** Extract the reply payload that follows the header |
| 371 |
| --- src/http.c | |
| +++ src/http.c | |
| @@ -285,11 +285,11 @@ | |
| 285 | g.zHttpAuth = prompt_for_httpauth_creds(); |
| 286 | transport_close(&g.url); |
| 287 | return http_exchange(pSend, pReply, useLogin, maxRedirect); |
| 288 | } |
| 289 | } |
| 290 | if( rc!=200 && rc!=301 && rc!=302 ){ |
| 291 | int ii; |
| 292 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 293 | while( zLine[ii]==' ' ) ii++; |
| 294 | fossil_warning("server says: %s", &zLine[ii]); |
| 295 | goto write_err; |
| @@ -299,11 +299,11 @@ | |
| 299 | }else{ |
| 300 | closeConnection = 0; |
| 301 | } |
| 302 | }else if( g.url.isSsh && fossil_strnicmp(zLine, "status:", 7)==0 ){ |
| 303 | if( sscanf(zLine, "Status: %d", &rc)!=1 ) goto write_err; |
| 304 | if( rc!=200 && rc!=301 && rc!=302 ){ |
| 305 | int ii; |
| 306 | for(ii=7; zLine[ii] && zLine[ii]!=' '; ii++){} |
| 307 | while( zLine[ii]==' ' ) ii++; |
| 308 | fossil_warning("server says: %s", &zLine[ii]); |
| 309 | goto write_err; |
| @@ -319,11 +319,12 @@ | |
| 319 | if( c=='c' || c=='C' ){ |
| 320 | closeConnection = 1; |
| 321 | }else if( c=='k' || c=='K' ){ |
| 322 | closeConnection = 0; |
| 323 | } |
| 324 | }else if( ( rc==301 || rc==302 ) && |
| 325 | fossil_strnicmp(zLine, "location:", 9)==0 ){ |
| 326 | int i, j; |
| 327 | |
| 328 | if ( --maxRedirect == 0){ |
| 329 | fossil_warning("redirect limit exceeded"); |
| 330 | goto write_err; |
| @@ -360,11 +361,11 @@ | |
| 361 | if( iLength<0 ){ |
| 362 | fossil_warning("server did not reply"); |
| 363 | goto write_err; |
| 364 | } |
| 365 | if( rc!=200 ){ |
| 366 | fossil_warning("\"location:\" missing from %d redirect reply", rc); |
| 367 | goto write_err; |
| 368 | } |
| 369 | |
| 370 | /* |
| 371 | ** Extract the reply payload that follows the header |
| 372 |