]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/auth.c
Merge changes from CUPS 1.4svn-r7614.
[thirdparty/cups.git] / scheduler / auth.c
index 8d551abf044cd25d7e9ad1ab820ff8965f3fcc26..4447ba1b082ba17c1e22316b85ff69559d93ed34 100644 (file)
@@ -1352,13 +1352,13 @@ cupsdCheckGroup(
     struct passwd *user,               /* I - System user info */
     const char    *groupname)          /* I - Group name */
 {
-  int                  i;              /* Looping var */
-  struct group         *group;         /* System group info */
-  char                 junk[33];       /* MD5 password (not used) */
+  int          i;                      /* Looping var */
+  struct group *group;                 /* System group info */
+  char         junk[33];               /* MD5 password (not used) */
 #ifdef HAVE_MBR_UID_TO_UUID
-  uuid_t               useruuid,       /* UUID for username */
-                       groupuuid;      /* UUID for groupname */
-  int                  is_member;      /* True if user is a member of group */
+  uuid_t       useruuid,               /* UUID for username */
+               groupuuid;              /* UUID for groupname */
+  int          is_member;              /* True if user is a member of group */
 #endif /* HAVE_MBR_UID_TO_UUID */
 
 
@@ -1404,24 +1404,40 @@ cupsdCheckGroup(
   * Check group membership through MacOS X membership API...
   */
 
-  if (group)
-  {
-    if (mbr_gid_to_uuid(group->gr_gid, groupuuid))
-      uuid_clear(groupuuid);
-  }
-  else if (groupname[0] == '#')
+  if (!mbr_uid_to_uuid(user->pw_uid, useruuid))
   {
-    if (uuid_parse((char *)groupname + 1, groupuuid))
-      uuid_clear(groupuuid);
-  }
-  else
-    uuid_clear(groupuuid);
+    if (group)
+    {
+     /*
+      * Map group name to UUID and check membership...
+      */
+
+      if (!mbr_gid_to_uuid(group->gr_gid, groupuuid))
+        if (!mbr_check_membership(useruuid, groupuuid, &is_member))
+         if (is_member)
+           return (1);
+    }
+    else if (groupname[0] == '#')
+    {
+     /*
+      * Use UUID directly and check for equality (user UUID) and
+      * membership (group UUID)...
+      */
 
-  if (user && !uuid_is_null(groupuuid))
-    if (!mbr_uid_to_uuid(user->pw_uid, useruuid))
-      if (!mbr_check_membership(useruuid, groupuuid, &is_member))
-       if (is_member)
+      if (!uuid_parse((char *)groupname + 1, groupuuid))
+      {
+        if (!uuid_compare(useruuid, groupuuid))
          return (1);
+       else if (!mbr_check_membership(useruuid, groupuuid, &is_member))
+         if (is_member)
+           return (1);
+      }
+
+      return (0);
+    }
+  }
+  else if (groupname[0] == '#')
+    return (0);
 #endif /* HAVE_MBR_UID_TO_UUID */
 
  /*