s3:client: The smbspool krb5 wrapper needs negotiate for authentication
authorAndreas Schneider <asn@samba.org>
Fri, 7 Jul 2017 12:08:49 +0000 (14:08 +0200)
committerJeremy Allison <jra@samba.org>
Sat, 15 Jul 2017 04:43:47 +0000 (06:43 +0200)
If you create a new printer it doesn't have AuthInfoRequired set and so
cups calls the backend with:

  AUTH_INFO_REQUIRED=none

In this case we need to return:

  ATTR: auth-info-required=negotiate

and return an error that we require authentication.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12886

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Sat Jul 15 06:43:47 CEST 2017 on sn-devel-144

source3/client/smbspool_krb5_wrapper.c

index bf97d82115a639caebfdf13a9f249e5fbce04833..a72006a4c4fec62205c3c0131fc8772720f7fb77 100644 (file)
@@ -95,17 +95,26 @@ int main(int argc, char *argv[])
 
         /* If not set, then just call smbspool. */
        if (env == NULL) {
-               CUPS_SMB_ERROR("AUTH_INFO_REQUIRED is not set");
-                goto smbspool;
+               CUPS_SMB_DEBUG("AUTH_INFO_REQUIRED is not set - "
+                              "execute smbspool");
+               goto smbspool;
        } else {
-                CUPS_SMB_DEBUG("AUTH_INFO_REQUIRED=%s", env);
-                cmp = strcmp(env, "negotiate");
-                /* If AUTH_INFO_REQUIRED != "negotiate" then call smbspool. */
-                if (cmp != 0) {
-                          CUPS_SMB_ERROR(
-                            "AUTH_INFO_REQUIRED is not set to negotiate");
-                          goto smbspool;
-                }
+               CUPS_SMB_DEBUG("AUTH_INFO_REQUIRED=%s", env);
+
+               cmp = strcmp(env, "username,password");
+               if (cmp == 0) {
+                       CUPS_SMB_DEBUG("Authenticate using username/password - "
+                                      "execute smbspool");
+                       goto smbspool;
+               }
+
+               /* if AUTH_INFO_REQUIRED=none */
+               cmp = strcmp(env, "negotiate");
+               if (cmp != 0) {
+                       CUPS_SMB_ERROR("Authentication unsupported");
+                       fprintf(stderr, "ATTR: auth-info-required=negotiate\n");
+                       return CUPS_BACKEND_AUTH_REQUIRED;
+               }
        }
 
        uid = getuid();