s3:passdb: only use gid_to_sid() result if the result is a group of our local sam
authorStefan Metzmacher <metze@samba.org>
Tue, 9 Feb 2010 11:57:01 +0000 (12:57 +0100)
committerKarolin Seeger <kseeger@samba.org>
Thu, 11 Feb 2010 11:02:47 +0000 (12:02 +0100)
Otherwise retry with pdb_gid_to_sid().

metze
(cherry picked from commit 4dc2be2264926fe415e4e40e212f94793c9831d1)

Last seven patches address bug #7116 (pdb_ldap performance fixes).
(cherry picked from commit 8946a47fcebe57f459c59ee2cb163e15901ff996)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/passdb/pdb_get_set.c

index 39a85fa91ba9dd5789ae2cd938b1fd99b8371f4c..1155050d7995d0c05fa9d79b3f433fc21fe5fb2b 100644 (file)
@@ -183,6 +183,7 @@ const DOM_SID *pdb_get_group_sid(struct samu *sampass)
 {
        DOM_SID *gsid;
        struct passwd *pwd;
+       bool need_lookup_sid = false;
 
        /* Return the cached group SID if we have that */
        if ( sampass->group_sid ) {
@@ -213,10 +214,6 @@ const DOM_SID *pdb_get_group_sid(struct samu *sampass)
 
        gid_to_sid(gsid, pwd->pw_gid);
        if (!is_null_sid(gsid)) {
-               enum lsa_SidType type = SID_NAME_UNKNOWN;
-               TALLOC_CTX *mem_ctx;
-               bool lookup_ret;
-               const DOM_SID *usid = pdb_get_user_sid(sampass);
                DOM_SID dgsid;
                uint32_t rid;
 
@@ -232,8 +229,23 @@ const DOM_SID *pdb_get_group_sid(struct samu *sampass)
                        case DOMAIN_RID_USERS:
                                sampass->group_sid = gsid;
                                return sampass->group_sid;
+                       default:
+                               need_lookup_sid = true;
+                               break;
+                       }
+               } else {
+                       ZERO_STRUCTP(gsid);
+                       if (pdb_gid_to_sid(pwd->pw_gid, gsid)) {
+                               need_lookup_sid = true;
                        }
                }
+       }
+
+       if (need_lookup_sid) {
+               enum lsa_SidType type = SID_NAME_UNKNOWN;
+               TALLOC_CTX *mem_ctx;
+               bool lookup_ret;
+               const DOM_SID *usid = pdb_get_user_sid(sampass);
 
                mem_ctx = talloc_init("pdb_get_group_sid");
                if (!mem_ctx) {