svn commit: samba r20243 - in branches/SAMBA_3_0/source/passdb: .

idra at samba.org idra at samba.org
Mon Dec 18 20:05:50 GMT 2006


Author: idra
Date: 2006-12-18 20:05:50 +0000 (Mon, 18 Dec 2006)
New Revision: 20243

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20243

Log:

Make lookup_name resolve both the mapped and the real unix group name


Modified:
   branches/SAMBA_3_0/source/passdb/passdb.c


Changeset:
Modified: branches/SAMBA_3_0/source/passdb/passdb.c
===================================================================
--- branches/SAMBA_3_0/source/passdb/passdb.c	2006-12-18 20:04:54 UTC (rev 20242)
+++ branches/SAMBA_3_0/source/passdb/passdb.c	2006-12-18 20:05:50 UTC (rev 20243)
@@ -550,7 +550,7 @@
  Convert a name into a SID. Used in the lookup name rpc.
  ********************************************************************/
 
-BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
+BOOL lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
 			    enum lsa_SidType *type)
 {
 	GROUP_MAP map;
@@ -561,7 +561,7 @@
 	   name "None" on Windows.  You will get an error that 
 	   the group already exists. */
 	   
-	if ( strequal( user, "None" ) ) {
+	if ( strequal( name, "None" ) ) {
 		*rid = DOMAIN_GROUP_RID_USERS;
 		*type = SID_NAME_DOM_GRP;
 		
@@ -581,7 +581,7 @@
 		}
 	
 		become_root();
-		ret =  pdb_getsampwnam(sam_account, user);
+		ret =  pdb_getsampwnam(sam_account, name);
 		unbecome_root();
 
 		if (ret) {
@@ -593,7 +593,7 @@
 		if (ret) {
 			if (!sid_check_is_in_our_domain(&user_sid)) {
 				DEBUG(0, ("User %s with invalid SID %s in passdb\n",
-					  user, sid_string_static(&user_sid)));
+					  name, sid_string_static(&user_sid)));
 				return False;
 			}
 
@@ -608,17 +608,33 @@
 	 */
 
 	become_root();
-	ret = pdb_getgrnam(&map, user);
+	ret = pdb_getgrnam(&map, name);
 	unbecome_root();
 
  	if (!ret) {
-		return False;
+		/* try to see if we can lookup a mapped
+		 * group with the unix group name */
+
+		struct group *grp;
+
+		grp = getgrnam(name);
+		if (!grp) {
+			return False;
+		}
+
+		become_root();
+		ret = pdb_getgrgid(&map, grp->gr_gid);
+		unbecome_root();
+
+		if (!ret) {
+			return False;
+		}
 	}
 
 	/* BUILTIN groups are looked up elsewhere */
 	if (!sid_check_is_in_our_domain(&map.sid)) {
 		DEBUG(10, ("Found group %s (%s) not in our domain -- "
-			   "ignoring.", user,
+			   "ignoring.", name,
 			   sid_string_static(&map.sid)));
 		return False;
 	}



More information about the samba-cvs mailing list