make sure to fallback to rid algoruthm for users not in smbpasswd (e.g. force user...
authorGerald Carter <jerry@samba.org>
Tue, 15 Jul 2003 02:27:00 +0000 (02:27 +0000)
committerGerald Carter <jerry@samba.org>
Tue, 15 Jul 2003 02:27:00 +0000 (02:27 +0000)
(This used to be commit 399799c68cbc91cb3908b0d83ee4f51fa3bf3023)

source3/passdb/passdb.c

index a126594d7203d0c542d3aab355f5e0c4d630bf2e..333ac8ace6e9d8cc039f29179cd833598bdfcffd 100644 (file)
@@ -1051,6 +1051,7 @@ DOM_SID *local_uid_to_sid(DOM_SID *psid, uid_t uid)
 {
        SAM_ACCOUNT *sampw = NULL;
        struct passwd *unix_pw;
+       BOOL ret;
        
        winbind_off();
        unix_pw = sys_getpwuid( uid );
@@ -1062,20 +1063,29 @@ DOM_SID *local_uid_to_sid(DOM_SID *psid, uid_t uid)
        }
        
        if ( !NT_STATUS_IS_OK(pdb_init_sam(&sampw)) ) {
-               DEBUG(0,("local_uid_to_sid: failed to allocate SAM_ACCOUTN object\n"));
+               DEBUG(0,("local_uid_to_sid: failed to allocate SAM_ACCOUNT object\n"));
                return NULL;
        }
        
        become_root();
-       if ( !pdb_getsampwnam( sampw, unix_pw->pw_name ) ) {
-               unbecome_root();
+       ret = pdb_getsampwnam( sampw, unix_pw->pw_name );
+       unbecome_root();
+       
+       if ( ret )
+               sid_copy( psid, pdb_get_user_sid(sampw) );
+       else {
                DEBUG(4,("local_uid_to_sid: User %s [uid == %d] has no samba account\n",
                        unix_pw->pw_name, uid));
-               return NULL;
+                       
+               if ( !lp_enable_rid_algorithm() ) 
+                       return NULL;
+
+               DEBUG(8,("local_uid_to_sid: falling back to RID algorithm\n"));
+               
+               sid_copy( psid, get_global_sam_sid() );
+               sid_append_rid( psid, fallback_pdb_uid_to_user_rid(uid) );
        }
-       unbecome_root();
-       
-       sid_copy( psid, pdb_get_user_sid(sampw) );
+
        
        DEBUG(10,("local_uid_to_sid:  uid (%d) -> SID %s (%s).\n", 
                (unsigned int)uid, sid_string_static(psid), unix_pw->pw_name));