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)
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)
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;
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;
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;
}
/* 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;
}