trying to get HEAD building again. If you want the code
[sfrench/samba-autobuild/.git] / source3 / passdb / machine_sid.c
index e1a1de83a6037a55c96b8af1119baf5b7bce0de3..4e7476781c8298ef55558087de9e3858dabfa8b3 100644 (file)
@@ -78,8 +78,8 @@ static void generate_random_sid(DOM_SID *sid)
 
 static BOOL pdb_generate_sam_sid(void)
 {
+       DOM_SID domain_sid;
        char *fname = NULL;
-       extern pstring global_myname;
        BOOL is_dc = False;
 
        if(global_sam_sid==NULL)
@@ -98,8 +98,14 @@ static BOOL pdb_generate_sam_sid(void)
                break;
        }
 
-       if (secrets_fetch_domain_sid(global_myname, global_sam_sid)) {
-               DOM_SID domain_sid;
+       if (is_dc) {
+               if (secrets_fetch_domain_sid(lp_workgroup(), &domain_sid)) {
+                       sid_copy(global_sam_sid, &domain_sid);
+                       return True;
+               }
+       }
+
+       if (secrets_fetch_domain_sid(global_myname(), global_sam_sid)) {
 
                /* We got our sid. If not a pdc/bdc, we're done. */
                if (!is_dc)
@@ -118,11 +124,11 @@ static BOOL pdb_generate_sam_sid(void)
 
                if (!sid_equal(&domain_sid, global_sam_sid)) {
 
-                       /* Domain name sid doesn't match global sam sid. Re-store global sam sid as domain sid. */
+                       /* Domain name sid doesn't match global sam sid. Re-store domain sid as 'local' sid. */
 
                        DEBUG(0,("pdb_generate_sam_sid: Mismatched SIDs as a pdc/bdc.\n"));
-                       if (!secrets_store_domain_sid(lp_workgroup(), global_sam_sid)) {
-                               DEBUG(0,("pdb_generate_sam_sid: Can't re-store domain SID as a pdc/bdc.\n"));
+                       if (!secrets_store_domain_sid(global_myname(), &domain_sid)) {
+                               DEBUG(0,("pdb_generate_sam_sid: Can't re-store domain SID for local sid as PDC/BDC.\n"));
                                return False;
                        }
                        return True;
@@ -137,7 +143,7 @@ static BOOL pdb_generate_sam_sid(void)
 
        if (read_sid_from_file(fname, global_sam_sid)) {
                /* remember it for future reference and unlink the old MACHINE.SID */
-               if (!secrets_store_domain_sid(global_myname, global_sam_sid)) {
+               if (!secrets_store_domain_sid(global_myname(), global_sam_sid)) {
                        DEBUG(0,("pdb_generate_sam_sid: Failed to store SID from file.\n"));
                        SAFE_FREE(fname);
                        return False;
@@ -162,7 +168,7 @@ static BOOL pdb_generate_sam_sid(void)
            generate one and save it */
        generate_random_sid(global_sam_sid);
 
-       if (!secrets_store_domain_sid(global_myname, global_sam_sid)) {
+       if (!secrets_store_domain_sid(global_myname(), global_sam_sid)) {
                DEBUG(0,("pdb_generate_sam_sid: Failed to store generated machine SID.\n"));
                return False;
        }
@@ -185,8 +191,9 @@ DOM_SID *get_global_sam_sid(void)
        /* memory for global_sam_sid is allocated in 
           pdb_generate_sam_sid() as needed */
 
-       if (!pdb_generate_sam_sid())
-               global_sam_sid=NULL;    
+       if (!pdb_generate_sam_sid()) {
+               smb_panic("Could not generate a machine SID\n");
+       }
        
        return global_sam_sid;
 }