]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/auth.c
Import CUPS 1.4svn-r7226.
[thirdparty/cups.git] / scheduler / auth.c
index 06aec349c1b21570eb9e11670f29807ecd0ce80f..5b2dd3e9632fff42d1147f58fdabf040cceb4cf6 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: auth.c 6649 2007-07-11 21:46:42Z mike $"
+ * "$Id: auth.c 6947 2007-09-12 21:09:49Z mike $"
  *
  *   Authorization routines for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007 by Apple Inc.
+ *   Copyright 2007-2008 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   This file contains Kerberos support code, copyright 2006 by
  *   cupsdAddName()            - Add a name to a location...
  *   cupsdAllowHost()          - Add a host name that is allowed to access the
  *                               location.
- *   cupsdAllowIP()            - Add an IP address or network that is allowed
- *                               to access the location.
+ *   cupsdAllowIP()            - Add an IP address or network that is allowed to
+ *                               access the location.
  *   cupsdAuthorize()          - Validate any authorization credentials.
+ *   cupsdCheckAccess()        - Check whether the given address is allowed to
+ *                               access a location.
  *   cupsdCheckAuth()          - Check authorization masks.
  *   cupsdCheckGroup()         - Check for a user's group membership.
  *   cupsdCopyLocation()       - Make a copy of a location...
@@ -40,6 +42,8 @@
  *   cupsdIsAuthorized()       - Check to see if the user is authorized...
  *   add_allow()               - Add an allow mask to the location.
  *   add_deny()                - Add a deny mask to the location.
+ *   check_authref()           - Check if an authorization services reference
+ *                               has the supplied right.
  *   compare_locations()       - Compare two locations.
  *   cups_crypt()              - Encrypt the password using the DES or MD5
  *                               algorithms, as needed.
@@ -47,7 +51,6 @@
  *   get_md5_password()        - Get an MD5 password.
  *   pam_func()                - PAM conversation function.
  *   to64()                    - Base64-encode an integer value...
- *   check_authref()           - Check an authorization services reference.
  */
 
 /*
@@ -83,6 +86,9 @@
 extern const char *cssmErrorString(int error);
 #  endif /* HAVE_SECBASEPRIV_H */
 #endif /* HAVE_AUTHORIZATION_H */
+#ifdef HAVE_SYS_PARAM_H
+#  include <sys/param.h>
+#endif /* HAVE_SYS_PARAM_H */
 #ifdef HAVE_SYS_UCRED_H
 #  include <sys/ucred.h>
 typedef struct xucred cupsd_ucred_t;
@@ -173,8 +179,13 @@ cupsdAddLocation(const char *location)     /* I - Location path */
   * Initialize the record and copy the name over...
   */
 
-  temp->location = strdup(location);
-  temp->length   = strlen(temp->location);
+  if ((temp->location = strdup(location)) == NULL)
+  {
+    free(temp);
+    return (NULL);
+  }
+
+  temp->length = strlen(temp->location);
 
   cupsArrayAdd(Locations, temp);
 
@@ -329,7 +340,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
   int          type;                   /* Authentication type */
   const char   *authorization;         /* Pointer into Authorization string */
   char         *ptr,                   /* Pointer into string */
-               username[65],           /* Username string */
+               username[256],          /* Username string */
                password[33];           /* Password string */
   const char   *localuser;             /* Certificate username */
   char         nonce[HTTP_MAX_VALUE],  /* Nonce value from client */
@@ -360,13 +371,19 @@ cupsdAuthorize(cupsd_client_t *con)       /* I - Client connection */
   */
 
   con->best = cupsdFindBest(con->uri, con->http.state);
+  con->type = AUTH_NONE;
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
                   "cupsdAuthorize: con->uri=\"%s\", con->best=%p(%s)",
                   con->uri, con->best, con->best ? con->best->location : "");
 
   if (con->best && con->best->type != AUTH_NONE)
-    type = con->best->type;
+  {
+    if (con->best->type == AUTH_DEFAULT)
+      type = DefaultAuthType;
+    else
+      type = con->best->type;
+  }
   else
     type = DefaultAuthType;
 
@@ -390,17 +407,7 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
   }
 #endif /* HAVE_AUTHORIZATION_H */
 
-  if (type == AUTH_NONE)
-  {
-   /*
-    * No authorization required, return early...
-    */
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "cupsdAuthorize: No authentication required.");
-    return;
-  }
-  else if (!*authorization)
+  if (!*authorization)
   {
    /*
     * No authorization data provided, return early...
@@ -458,7 +465,13 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
     if (authinfo->count == 1)
       strlcpy(username, authinfo->items[0].value, sizeof(username));
 
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "cupsdAuthorize: Authorized as %s using AuthRef",
+                   username);
+
     AuthorizationFreeItemSet(authinfo);
+
+    con->type = AUTH_BASIC;
   }
 #endif /* HAVE_AUTHORIZATION_H */
 #if defined(SO_PEERCRED) && defined(AF_LOCAL)
@@ -510,6 +523,12 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
     }
 
     strlcpy(username, authorization + 9, sizeof(username));
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "cupsdAuthorize: Authorized as %s using PeerCred",
+                   username);
+
+    con->type = AUTH_BASIC;
   }
 #endif /* SO_PEERCRED && AF_LOCAL */
   else if (!strncmp(authorization, "Local", 5) &&
@@ -524,7 +543,13 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
       authorization ++;
 
     if ((localuser = cupsdFindCert(authorization)) != NULL)
+    {
       strlcpy(username, localuser, sizeof(username));
+
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                     "cupsdAuthorize: Authorized as %s using Local",
+                     username);
+    }
     else
     {
       cupsdLogMessage(CUPSD_LOG_ERROR,
@@ -532,9 +557,10 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
                      "found!");
       return;
     }
+
+    con->type = AUTH_BASIC;
   }
-  else if (!strncmp(authorization, "Basic", 5) &&
-           (type == AUTH_BASIC || type == AUTH_BASICDIGEST))
+  else if (!strncmp(authorization, "Basic", 5))
   {
    /*
     * Get the Basic authentication data...
@@ -593,6 +619,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
 
     switch (type)
     {
+      default :
       case AUTH_BASIC :
           {
 #if HAVE_LIBPAM
@@ -638,6 +665,14 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
              return;
            }
 
+#  if defined(HAVE_PAM_SET_ITEM) && defined(PAM_RHOST)
+           pamerr = pam_set_item(pamh, PAM_RHOST, con->http.hostname);
+           if (pamerr != PAM_SUCCESS)
+             cupsdLogMessage(CUPSD_LOG_WARN,
+                             "cupsdAuthorize: pam_set_item() returned %d "
+                             "(%s)!\n", pamerr, pam_strerror(pamh, pamerr));
+#  endif /* HAVE_PAM_SET_ITEM && PAM_RHOST */
+
            pamerr = pam_authenticate(pamh, PAM_SILENT);
            if (pamerr != PAM_SUCCESS)
            {
@@ -786,6 +821,10 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
            }
 #endif /* HAVE_LIBPAM */
           }
+
+         cupsdLogMessage(CUPSD_LOG_DEBUG,
+                         "cupsdAuthorize: Authorized as %s using Basic",
+                         username);
           break;
 
       case AUTH_BASICDIGEST :
@@ -810,10 +849,16 @@ cupsdAuthorize(cupsd_client_t *con)       /* I - Client connection */
                            username);
             return;
          }
+
+         cupsdLogMessage(CUPSD_LOG_DEBUG,
+                         "cupsdAuthorize: Authorized as %s using BasicDigest",
+                         username);
          break;
     }
+
+    con->type = type;
   }
-  else if (!strncmp(authorization, "Digest", 6) && type == AUTH_DIGEST)
+  else if (!strncmp(authorization, "Digest", 6))
   {
    /*
     * Get the username, password, and nonce from the Digest attributes...
@@ -881,9 +926,15 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
                      username);
       return;
     }
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                    "cupsdAuthorize: Authorized as %s using Digest",
+                   username);
+
+    con->type = AUTH_DIGEST;
   }
 #ifdef HAVE_GSSAPI
-  else if (!strncmp(authorization, "Negotiate", 9) && type == AUTH_NEGOTIATE
+  else if (!strncmp(authorization, "Negotiate", 9)) 
   {
     int                        len;            /* Length of authorization string */
     gss_cred_id_t      server_creds;   /* Server credentials */
@@ -895,6 +946,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
                        output_token = GSS_C_EMPTY_BUFFER;
                                        /* Output token for username */
     gss_name_t         client_name;    /* Client name */
+    unsigned int       ret_flags;      /* Credential flags */
 
 
 #  ifdef __APPLE__
@@ -934,10 +986,7 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
     */
 
     if ((server_creds = get_gss_creds(GSSServiceName)) == NULL)
-    {
-      con->no_negotiate = 1;
       return;  
-    }
 
    /*
     * Decode the authorization string to get the input token...
@@ -963,7 +1012,7 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
                                          &client_name,
                                          NULL,
                                          &con->gss_output_token,
-                                         NULL,
+                                         &ret_flags,
                                          NULL,
                                          &con->gss_delegated_cred);
 
@@ -976,15 +1025,28 @@ cupsdAuthorize(cupsd_client_t *con)      /* I - Client connection */
       if (context != GSS_C_NO_CONTEXT)
        gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER);
 
-      con->no_negotiate = 1;
+      gss_release_cred(&minor_status, &server_creds);
       return;
     }
 
    /*
-    * Get the username associated with the credentials...
+    * Release our credentials...
+    */
+
+    gss_release_cred(&minor_status, &server_creds);
+
+   /*
+    * Get the username associated with the client's credentials...
     */
 
-    if (major_status == GSS_S_COMPLETE)
+    if (!con->gss_delegated_cred)
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                      "cupsdAuthorize: No delegated credentials!");
+
+    if (major_status == GSS_S_CONTINUE_NEEDED)
+      cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status,
+                         "cupsdAuthorize: Credentials not complete");
+    else if (major_status == GSS_S_COMPLETE)
     {
       major_status = gss_display_name(&minor_status, client_name, 
                                      &output_token, NULL);
@@ -995,17 +1057,22 @@ cupsdAuthorize(cupsd_client_t *con)      /* I - Client connection */
                            "cupsdAuthorize: Error getting username");
        gss_release_name(&minor_status, &client_name);
        gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER);
-       con->no_negotiate = 1;
        return;
       }
 
       gss_release_name(&minor_status, &client_name);
       strlcpy(username, output_token.value, sizeof(username));
 
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                     "cupsdAuthorize: Authorized as %s using Negotiate",
+                     username);
+
       gss_release_buffer(&minor_status, &output_token);
       gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER);
 
       con->gss_have_creds = 1;
+
+      con->type = AUTH_NEGOTIATE;
     }
     else
       gss_release_name(&minor_status, &client_name);
@@ -1013,7 +1080,14 @@ cupsdAuthorize(cupsd_client_t *con)      /* I - Client connection */
 #endif /* HAVE_GSSAPI */
   else
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Bad authentication data.");
+    char       scheme[256];            /* Auth scheme... */
+
+
+    if (sscanf(authorization, "%255s", scheme) != 1)
+      strcpy(scheme, "UNKNOWN");
+
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Bad authentication data \"%s ...\"",
+                    scheme);
     return;
   }
 
@@ -1025,9 +1099,67 @@ cupsdAuthorize(cupsd_client_t *con)      /* I - Client connection */
 
   strlcpy(con->username, username, sizeof(con->username));
   strlcpy(con->password, password, sizeof(con->password));
+}
+
+
+/*
+ * 'cupsdCheckAccess()' - Check whether the given address is allowed to
+ *                        access a location.
+ */
+
+int                                    /* O - 1 if allowed, 0 otherwise */
+cupsdCheckAccess(
+    unsigned         ip[4],            /* I - Client address */
+    char             *name,            /* I - Client hostname */
+    int              namelen,          /* I - Length of hostname */
+    cupsd_location_t *loc)             /* I - Location to check */
+{
+  int  allow;                          /* 1 if allowed, 0 otherwise */
+
+
+  if (!strcasecmp(name, "localhost"))
+  {
+   /*
+    * Access from localhost (127.0.0.1 or ::1) is always allowed...
+    */
+
+    return (1);
+  }
+  else
+  {
+   /*
+    * Do authorization checks on the domain/address...
+    */
+
+    switch (loc->order_type)
+    {
+      default :
+         allow = 0;    /* anti-compiler-warning-code */
+         break;
+
+      case AUTH_ALLOW : /* Order Deny,Allow */
+          allow = 1;
+
+          if (cupsdCheckAuth(ip, name, namelen, loc->num_deny, loc->deny))
+           allow = 0;
+
+          if (cupsdCheckAuth(ip, name, namelen, loc->num_allow, loc->allow))
+           allow = 1;
+         break;
+
+      case AUTH_DENY : /* Order Allow,Deny */
+          allow = 0;
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAuthorize: username=\"%s\"",
-                  con->username);
+          if (cupsdCheckAuth(ip, name, namelen, loc->num_allow, loc->allow))
+           allow = 1;
+
+          if (cupsdCheckAuth(ip, name, namelen, loc->num_deny, loc->deny))
+           allow = 0;
+         break;
+    }
+  }
+
+  return (allow);
 }
 
 
@@ -1732,11 +1864,14 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
                   const char     *owner)/* I - Owner of object */
 {
   int                  i, j,           /* Looping vars */
-                       auth;           /* Authorization status */
+                       auth,           /* Authorization status */
+                       type;           /* Type of authentication */
   unsigned             address[4];     /* Authorization address */
   cupsd_location_t     *best;          /* Best match for location so far */
   int                  hostlen;        /* Length of hostname */
-  const char           *username;      /* Username to authorize */
+  char                 username[256],  /* Username to authorize */
+                       ownername[256], /* Owner name to authorize */
+                       *ptr;           /* Pointer into username */
   struct passwd                *pw;            /* User password data */
   static const char * const levels[] = /* Auth levels */
                {
@@ -1746,11 +1881,11 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
                };
   static const char * const types[] =  /* Auth types */
                {
-                 "NONE",
-                 "BASIC",
-                 "DIGEST",
-                 "BASICDIGEST",
-                 "KERBEROS"
+                 "None",
+                 "Basic",
+                 "Digest",
+                 "BasicDigest",
+                 "Negotiate"
                };
 
 
@@ -1779,10 +1914,13 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
 
   best = con->best;
 
+  if ((type = best->type) == AUTH_DEFAULT)
+    type = DefaultAuthType;
+
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdIsAuthorized: level=AUTH_%s, type=AUTH_%s, "
+                  "cupsdIsAuthorized: level=AUTH_%s, type=%s, "
                  "satisfy=AUTH_SATISFY_%s, num_names=%d",
-                  levels[best->level], types[best->type],
+                  levels[best->level], types[type],
                  best->satisfy ? "ANY" : "ALL", best->num_names);
 
   if (best->limit == AUTH_LIMIT_IPP)
@@ -1823,51 +1961,8 @@ cupsdIsAuthorized(cupsd_client_t *con,   /* I - Connection */
 
   hostlen = strlen(con->http.hostname);
 
-  if (!strcasecmp(con->http.hostname, "localhost"))
-  {
-   /*
-    * Access from localhost (127.0.0.1 or ::1) is always allowed...
-    */
-
-    auth = AUTH_ALLOW;
-  }
-  else
-  {
-   /*
-    * Do authorization checks on the domain/address...
-    */
-
-    switch (best->order_type)
-    {
-      default :
-         auth = AUTH_DENY;     /* anti-compiler-warning-code */
-         break;
-
-      case AUTH_ALLOW : /* Order Deny,Allow */
-          auth = AUTH_ALLOW;
-
-          if (cupsdCheckAuth(address, con->http.hostname, hostlen,
-                       best->num_deny, best->deny))
-           auth = AUTH_DENY;
-
-          if (cupsdCheckAuth(address, con->http.hostname, hostlen,
-                       best->num_allow, best->allow))
-           auth = AUTH_ALLOW;
-         break;
-
-      case AUTH_DENY : /* Order Allow,Deny */
-          auth = AUTH_DENY;
-
-          if (cupsdCheckAuth(address, con->http.hostname, hostlen,
-                       best->num_allow, best->allow))
-           auth = AUTH_ALLOW;
-
-          if (cupsdCheckAuth(address, con->http.hostname, hostlen,
-                       best->num_deny, best->deny))
-           auth = AUTH_DENY;
-         break;
-    }
-  }
+  auth = cupsdCheckAccess(address, con->http.hostname, hostlen, best)
+             ? AUTH_ALLOW : AUTH_DENY;
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: auth=AUTH_%s...",
                   auth ? "DENY" : "ALLOW");
@@ -1883,10 +1978,10 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
   if ((best->encryption >= HTTP_ENCRYPT_REQUIRED && !con->http.tls &&
       strcasecmp(con->http.hostname, "localhost") &&
       best->satisfy == AUTH_SATISFY_ALL) &&
-      !(best->type == AUTH_NEGOTIATE || 
-        (best->type == AUTH_NONE && DefaultAuthType == AUTH_NEGOTIATE)))
+      !(type == AUTH_NEGOTIATE || 
+        (type == AUTH_NONE && DefaultAuthType == AUTH_NEGOTIATE)))
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
                     "cupsdIsAuthorized: Need upgrade to TLS...");
     return (HTTP_UPGRADE_REQUIRED);
   }
@@ -1897,10 +1992,10 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
   */
 
   if (best->level == AUTH_ANON ||      /* Anonymous access - allow it */
-      (best->type == AUTH_NONE && best->num_names == 0))
+      (type == AUTH_NONE && best->num_names == 0))
     return (HTTP_OK);
 
-  if (!con->username[0] && best->type == AUTH_NONE &&
+  if (!con->username[0] && type == AUTH_NONE &&
       best->limit == AUTH_LIMIT_IPP)
   {
    /*
@@ -1913,10 +2008,10 @@ cupsdIsAuthorized(cupsd_client_t *con,  /* I - Connection */
     attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME);
     if (attr)
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
                       "cupsdIsAuthorized: requesting-user-name=\"%s\"",
                       attr->values[0].string.text);
-      username = attr->values[0].string.text;
+      strlcpy(username, attr->values[0].string.text, sizeof(username));
     }
     else if (best->satisfy == AUTH_SATISFY_ALL || auth == AUTH_DENY)
       return (HTTP_UNAUTHORIZED);      /* Non-anonymous needs user/pass */
@@ -1925,7 +2020,7 @@ cupsdIsAuthorized(cupsd_client_t *con,    /* I - Connection */
   }
   else
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: username=\"%s\"",
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdIsAuthorized: username=\"%s\"",
                    con->username);
 
 #ifdef HAVE_AUTHORIZATION_H
@@ -1940,7 +2035,16 @@ cupsdIsAuthorized(cupsd_client_t *con,   /* I - Connection */
        return (HTTP_OK);               /* unless overridden with Satisfy */
     }
 
-    username = con->username;
+    if (con->type != type && type != AUTH_NONE &&
+        (con->type != AUTH_BASIC || type != AUTH_BASICDIGEST))
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Authorized using %s, expected %s!",
+                      types[con->type], types[type]);
+
+      return (HTTP_UNAUTHORIZED);
+    }
+
+    strlcpy(username, con->username, sizeof(username));
   }
 
  /*
@@ -1951,6 +2055,23 @@ cupsdIsAuthorized(cupsd_client_t *con,   /* I - Connection */
   if (!strcmp(username, "root"))
     return (HTTP_OK);
 
+ /*
+  * Strip any @domain or @KDC from the username and owner...
+  */
+
+  if ((ptr = strchr(username, '@')) != NULL)
+    *ptr = '\0';
+
+  if (owner)
+  {
+    strlcpy(ownername, owner, sizeof(ownername));
+
+    if ((ptr = strchr(ownername, '@')) != NULL)
+      *ptr = '\0';
+  }
+  else
+    ownername[0] = '\0';
+
  /*
   * Get the user info...
   */
@@ -2006,7 +2127,7 @@ cupsdIsAuthorized(cupsd_client_t *con,    /* I - Connection */
     for (i = 0; i < best->num_names; i ++)
     {
       if (!strcasecmp(best->names[i], "@OWNER") && owner &&
-          !strcasecmp(username, owner))
+          !strcasecmp(username, ownername))
        return (HTTP_OK);
       else if (!strcasecmp(best->names[i], "@SYSTEM"))
       {
@@ -2057,7 +2178,7 @@ cupsdIsAuthorized(cupsd_client_t *con,    /* I - Connection */
   * The user isn't part of the specified group, so deny access...
   */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
                   "cupsdIsAuthorized: User not in group(s)!");
 
   return (HTTP_UNAUTHORIZED);
@@ -2382,7 +2503,8 @@ get_gss_creds(const char *service_name)   /* I - Service name */
     return (NULL);
   }
 
-  cupsdLogMessage(CUPSD_LOG_INFO, "Attempting to acquire credentials for %s...", 
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "get_gss_creds: Attempting to acquire credentials for %s...", 
                   (char *)token.value);
 
   server_creds = GSS_C_NO_CREDENTIAL;
@@ -2398,7 +2520,8 @@ get_gss_creds(const char *service_name)   /* I - Service name */
     return (NULL);
   }
 
-  cupsdLogMessage(CUPSD_LOG_INFO, "Credentials acquired successfully for %s.", 
+  cupsdLogMessage(CUPSD_LOG_DEBUG,
+                  "get_gss_creds: Credentials acquired successfully for %s.", 
                   (char *)token.value);
 
   gss_release_name(&minor_status, &server_name);
@@ -2586,5 +2709,5 @@ to64(char          *s,                    /* O - Output string */
 
 
 /*
- * End of "$Id: auth.c 6649 2007-07-11 21:46:42Z mike $".
+ * End of "$Id: auth.c 6947 2007-09-12 21:09:49Z mike $".
  */