Author: eadler
Date: Mon Oct 29 04:16:52 2012
New Revision: 242289
URL: http://svn.freebsd.org/changeset/base/242289

Log:
  MFC r241840:
        Don't deny non-temporary redirects if the -A option is set (per
        the man page) [0]
  
        While here add support for draft-reschke-http-status-308-07
  
  PR:           172451 [0]
  Approved by:  cperciva (implicit)

Modified:
  stable/9/lib/libfetch/http.c
  stable/9/lib/libfetch/http.errors
Directory Properties:
  stable/9/lib/libfetch/   (props changed)

Modified: stable/9/lib/libfetch/http.c
==============================================================================
--- stable/9/lib/libfetch/http.c        Mon Oct 29 04:16:52 2012        
(r242288)
+++ stable/9/lib/libfetch/http.c        Mon Oct 29 04:16:52 2012        
(r242289)
@@ -96,6 +96,7 @@ __FBSDID("$FreeBSD$");
 #define HTTP_SEE_OTHER         303
 #define HTTP_NOT_MODIFIED      304
 #define HTTP_TEMP_REDIRECT     307
+#define HTTP_PERM_REDIRECT     308
 #define HTTP_NEED_AUTH         401
 #define HTTP_NEED_PROXY_AUTH   407
 #define HTTP_BAD_RANGE         416
@@ -1516,8 +1517,7 @@ http_request(struct url *URL, const char
        /* try the provided URL first */
        url = URL;
 
-       /* if the A flag is set, we only get one try */
-       n = noredirect ? 1 : MAX_REDIRECT;
+       n = MAX_REDIRECT;
        i = 0;
 
        e = HTTP_PROTOCOL_ERROR;
@@ -1764,6 +1764,16 @@ http_request(struct url *URL, const char
                        case hdr_location:
                                if (!HTTP_REDIRECT(conn->err))
                                        break;
+                               /*
+                                * if the A flag is set, we don't follow
+                                * temporary redirects.
+                                */
+                               if (noredirect &&
+                                   conn->err != HTTP_MOVED_PERM &&
+                                   conn->err != HTTP_PERM_REDIRECT) {
+                                       n = 1;
+                                       break;
+                                }
                                if (new)
                                        free(new);
                                if (verbose)

Modified: stable/9/lib/libfetch/http.errors
==============================================================================
--- stable/9/lib/libfetch/http.errors   Mon Oct 29 04:16:52 2012        
(r242288)
+++ stable/9/lib/libfetch/http.errors   Mon Oct 29 04:16:52 2012        
(r242289)
@@ -18,6 +18,7 @@
 304 OK         Not Modified
 305 INFO       Use Proxy
 307 MOVED      Temporary Redirect
+308 MOVED      Permanent Redirect
 400 PROTO      Bad Request
 401 AUTH       Unauthorized
 402 AUTH       Payment Required
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to