httpd: pass authorization header to CGI if not Basic
authorAlexander Vickberg <wickbergster@gmail.com>
Thu, 18 Apr 2019 08:05:53 +0000 (10:05 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 18 Apr 2019 08:06:39 +0000 (10:06 +0200)
Pass the Authorization header to CGI if not of type Basic. This will
make it possible for CGI to verify authorization headers of type
Bearer <token>.

function                                             old     new   delta
handle_incoming_and_exit                            2370    2379      +9

Signed-off-by: Alexander Vickberg <wickbergster@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/httpd.c

index 0f4f22669caef5e1abdd013a948a28caf0cd059b..0b5d2b481df8f4f47dfc3a3e4437d2f2b2cc4485 100644 (file)
@@ -2384,7 +2384,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
                                bb_error_msg("header: '%s'", iobuf);
 #if ENABLE_FEATURE_HTTPD_CGI || ENABLE_FEATURE_HTTPD_PROXY
                        /* Try and do our best to parse more lines */
-                       if ((STRNCASECMP(iobuf, "Content-Length:") == 0)) {
+                       if (STRNCASECMP(iobuf, "Content-Length:") == 0) {
                                /* extra read only for POST */
                                if (prequest != request_GET
 # if ENABLE_FEATURE_HTTPD_CGI
@@ -2410,13 +2410,13 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
                                 * "<user>:<passwd>" is base64 encoded.
                                 */
                                tptr = skip_whitespace(iobuf + sizeof("Authorization:")-1);
-                               if (STRNCASECMP(tptr, "Basic") != 0)
+                               if (STRNCASECMP(tptr, "Basic") == 0) {
+                                       tptr += sizeof("Basic")-1;
+                                       /* decodeBase64() skips whitespace itself */
+                                       decodeBase64(tptr);
+                                       authorized = check_user_passwd(urlcopy, tptr);
                                        continue;
-                               tptr += sizeof("Basic")-1;
-                               /* decodeBase64() skips whitespace itself */
-                               decodeBase64(tptr);
-                               authorized = check_user_passwd(urlcopy, tptr);
-                               continue;
+                               }
                        }
 #endif
 #if ENABLE_FEATURE_HTTPD_RANGES