svn commit: samba r23051 - in branches: SAMBA_3_0/source/passdb SAMBA_3_0_26/source/passdb

idra at samba.org idra at samba.org
Mon May 21 20:51:15 GMT 2007


Author: idra
Date: 2007-05-21 20:51:15 +0000 (Mon, 21 May 2007)
New Revision: 23051

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

Log:

sid_to_[ug]id fixes for smbd


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


Changeset:
Modified: branches/SAMBA_3_0/source/passdb/lookup_sid.c
===================================================================
--- branches/SAMBA_3_0/source/passdb/lookup_sid.c	2007-05-21 20:47:22 UTC (rev 23050)
+++ branches/SAMBA_3_0/source/passdb/lookup_sid.c	2007-05-21 20:51:15 UTC (rev 23051)
@@ -1208,12 +1208,6 @@
 	enum lsa_SidType type;
 	uint32 rid;
 
-	if (sid_peek_check_rid(&global_sid_Unix_Users, psid, &rid)) {
-		uid_t uid = rid;
-		*puid = uid;
-		goto done;
-	}
-
 	if (sid_peek_check_rid(get_global_sam_sid(), psid, &rid)) {
 		union unid_t id;
 		BOOL ret;
@@ -1259,12 +1253,6 @@
 	union unid_t id;
 	enum lsa_SidType type;
 
-	if (sid_peek_check_rid(&global_sid_Unix_Groups, psid, &rid)) {
-		gid_t gid = rid;
-		*pgid = gid;
-		goto done;
-	}
-
 	if ((sid_check_is_in_builtin(psid) ||
 	     sid_check_is_in_wellknown_domain(psid))) {
 		BOOL ret;
@@ -1379,6 +1367,7 @@
 
 BOOL sid_to_uid(const DOM_SID *psid, uid_t *puid)
 {
+	uint32 rid;
 	gid_t gid;
 
 	if (fetch_uid_from_cache(puid, psid))
@@ -1388,6 +1377,18 @@
 		return False;
 	}
 
+	/* Optimize for the Unix Users Domain
+	 * as the conversion is straightforward */
+	if (sid_peek_check_rid(&global_sid_Unix_Users, psid, &rid)) {
+		uid_t uid = rid;
+		*puid = uid;
+
+		/* return here, don't cache */
+		DEBUG(10,("sid %s -> uid %u\n", sid_string_static(psid),
+			(unsigned int)*puid ));
+		return True;
+	}
+
 	if (!winbind_sid_to_uid(puid, psid)) {
 		if (!winbind_ping()) {
 			return legacy_sid_to_uid(psid, puid);
@@ -1415,6 +1416,7 @@
 
 BOOL sid_to_gid(const DOM_SID *psid, gid_t *pgid)
 {
+	uint32 rid;
 	uid_t uid;
 
 	if (fetch_gid_from_cache(pgid, psid))
@@ -1423,6 +1425,18 @@
 	if (fetch_uid_from_cache(&uid, psid))
 		return False;
 
+	/* Optimize for the Unix Groups Domain
+	 * as the conversion is straightforward */
+	if (sid_peek_check_rid(&global_sid_Unix_Groups, psid, &rid)) {
+		gid_t gid = rid;
+		*pgid = gid;
+
+		/* return here, don't cache */
+		DEBUG(10,("sid %s -> gid %u\n", sid_string_static(psid),
+			(unsigned int)*pgid ));
+		return True;
+	}
+
 	/* Ask winbindd if it can map this sid to a gid.
 	 * (Idmap will check it is a valid SID and of the right type) */
 

Modified: branches/SAMBA_3_0_26/source/passdb/lookup_sid.c
===================================================================
--- branches/SAMBA_3_0_26/source/passdb/lookup_sid.c	2007-05-21 20:47:22 UTC (rev 23050)
+++ branches/SAMBA_3_0_26/source/passdb/lookup_sid.c	2007-05-21 20:51:15 UTC (rev 23051)
@@ -1209,12 +1209,6 @@
 	enum lsa_SidType type;
 	uint32 rid;
 
-	if (sid_peek_check_rid(&global_sid_Unix_Users, psid, &rid)) {
-		uid_t uid = rid;
-		*puid = uid;
-		goto done;
-	}
-
 	if (sid_peek_check_rid(get_global_sam_sid(), psid, &rid)) {
 		union unid_t id;
 		BOOL ret;
@@ -1260,12 +1254,6 @@
 	union unid_t id;
 	enum lsa_SidType type;
 
-	if (sid_peek_check_rid(&global_sid_Unix_Groups, psid, &rid)) {
-		gid_t gid = rid;
-		*pgid = gid;
-		goto done;
-	}
-
 	if ((sid_check_is_in_builtin(psid) ||
 	     sid_check_is_in_wellknown_domain(psid))) {
 		BOOL ret;
@@ -1380,6 +1368,7 @@
 
 BOOL sid_to_uid(const DOM_SID *psid, uid_t *puid)
 {
+	uint32 rid;
 	gid_t gid;
 
 	if (fetch_uid_from_cache(puid, psid))
@@ -1389,6 +1378,18 @@
 		return False;
 	}
 
+	/* Optimize for the Unix Users Domain
+	 * as the conversion is straightforward */
+	if (sid_peek_check_rid(&global_sid_Unix_Users, psid, &rid)) {
+		uid_t uid = rid;
+		*puid = uid;
+
+		/* return here, don't cache */
+		DEBUG(10,("sid %s -> uid %u\n", sid_string_static(psid),
+			(unsigned int)*puid ));
+		return True;
+	}
+
 	if (!winbind_sid_to_uid(puid, psid)) {
 		if (!winbind_ping()) {
 			return legacy_sid_to_uid(psid, puid);
@@ -1416,6 +1417,7 @@
 
 BOOL sid_to_gid(const DOM_SID *psid, gid_t *pgid)
 {
+	uint32 rid;
 	uid_t uid;
 
 	if (fetch_gid_from_cache(pgid, psid))
@@ -1424,6 +1426,18 @@
 	if (fetch_uid_from_cache(&uid, psid))
 		return False;
 
+	/* Optimize for the Unix Groups Domain
+	 * as the conversion is straightforward */
+	if (sid_peek_check_rid(&global_sid_Unix_Groups, psid, &rid)) {
+		gid_t gid = rid;
+		*pgid = gid;
+
+		/* return here, don't cache */
+		DEBUG(10,("sid %s -> gid %u\n", sid_string_static(psid),
+			(unsigned int)*pgid ));
+		return True;
+	}
+
 	/* Ask winbindd if it can map this sid to a gid.
 	 * (Idmap will check it is a valid SID and of the right type) */
 



More information about the samba-cvs mailing list