cups/cups-str3985.patch
Jiri Popelka 30ec41f994 The IPP backend did not always setup username/password authentication. (bug #810007, STR #3985)
Detect authentication errors for all requests. (bug #810007, upstream commit revision10277)
2012-04-17 18:48:32 +02:00

75 lines
2.8 KiB
Diff

diff -up cups-1.5.2/backend/ipp.c.str3985 cups-1.5.2/backend/ipp.c
--- cups-1.5.2/backend/ipp.c.str3985 2012-04-05 10:28:12.568898781 +0200
+++ cups-1.5.2/backend/ipp.c 2012-04-05 10:32:07.165612536 +0200
@@ -957,9 +957,13 @@ main(int argc, /* I - Number of comm
}
else if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
{
- if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
- "Negotiate", 9))
+ const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
+ /* WWW-Authenticate field value */
+
+ if (!strncmp(www_auth, "Negotiate", 9))
auth_info_required = "negotiate";
+ else if (www_auth[0])
+ auth_info_required = "username,password";
fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required);
return (CUPS_BACKEND_AUTH_REQUIRED);
@@ -1315,23 +1319,13 @@ main(int argc, /* I - Number of comm
else if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN ||
ipp_status == IPP_AUTHENTICATION_CANCELED)
{
- /*
- * Update auth-info-required as needed...
- */
-
- fprintf(stderr, "DEBUG: WWW-Authenticate=\"%s\"\n",
- httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE));
-
- /*
- * Normal authentication goes through the password callback, which sets
- * auth_info_required to "username,password". Kerberos goes directly
- * through GSSAPI, so look for Negotiate in the WWW-Authenticate header
- * here and set auth_info_required as needed...
- */
+ const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
+ /* WWW-Authenticate field value */
- if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
- "Negotiate", 9))
+ if (!strncmp(www_auth, "Negotiate", 9))
auth_info_required = "negotiate";
+ else if (www_auth[0])
+ auth_info_required = "username,password";
goto cleanup;
}
@@ -1486,19 +1480,13 @@ main(int argc, /* I - Number of comm
if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
{
- fprintf(stderr, "DEBUG: WWW-Authenticate=\"%s\"\n",
- httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE));
-
- /*
- * Normal authentication goes through the password callback, which sets
- * auth_info_required to "username,password". Kerberos goes directly
- * through GSSAPI, so look for Negotiate in the WWW-Authenticate header
- * here and set auth_info_required as needed...
- */
-
- if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
- "Negotiate", 9))
+ const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
+ /* WWW-Authenticate field value */
+
+ if (!strncmp(www_auth, "Negotiate", 9))
auth_info_required = "negotiate";
+ else if (www_auth[0])
+ auth_info_required = "username,password";
}
else
sleep(10);