[PATCH] move global_sam_sid to get_global_sam_set()

Stefan (metze) Metzmacher metze at metzemix.de
Tue Jun 4 08:42:02 GMT 2002


Hi Andrew,

Here is the patch which only moves global_sam_sid to get_global_sam_sid().

And the patch for the Makefile.in, I see no (simple) way to change this 
without changing the linking dependences.



metze
-----------------------------------------------------------------------------
Stefan "metze" Metzmacher <metze at metzemix.de>
-------------- next part --------------
diff -Nur HEAD/source/groupdb/mapping.c HEAD-samsid/source/groupdb/mapping.c
--- HEAD/source/groupdb/mapping.c	Mon Apr 29 08:26:39 2002
+++ HEAD-samsid/source/groupdb/mapping.c	Tue Jun  4 15:53:06 2002
@@ -21,8 +21,6 @@
 
 #include "includes.h"
 
-extern DOM_SID global_sam_sid;
-
 static TDB_CONTEXT *tdb; /* used for driver files */
 
 #define DATABASE_VERSION_V1 1 /* native byte format. */
@@ -186,17 +184,17 @@
 
 	/* Add the defaults domain groups */
 
-	sid_copy(&sid_admins, &global_sam_sid);
+	sid_copy(&sid_admins, get_global_sam_sid());
 	sid_append_rid(&sid_admins, DOMAIN_GROUP_RID_ADMINS);
 	sid_to_string(str_admins, &sid_admins);
 	add_initial_entry(-1, str_admins, SID_NAME_DOM_GRP, "Domain Admins", "", privilege_all, PR_ACCESS_FROM_NETWORK|PR_LOG_ON_LOCALLY);
 
-	sid_copy(&sid_users,  &global_sam_sid);
+	sid_copy(&sid_users,  get_global_sam_sid());
 	sid_append_rid(&sid_users,  DOMAIN_GROUP_RID_USERS);
 	sid_to_string(str_users, &sid_users);
 	add_initial_entry(-1, str_users,  SID_NAME_DOM_GRP, "Domain Users",  "", privilege_none, PR_ACCESS_FROM_NETWORK|PR_LOG_ON_LOCALLY);
 
-	sid_copy(&sid_guests, &global_sam_sid);
+	sid_copy(&sid_guests, get_global_sam_sid());
 	sid_append_rid(&sid_guests, DOMAIN_GROUP_RID_GUESTS);
 	sid_to_string(str_guests, &sid_guests);
 	add_initial_entry(-1, str_guests, SID_NAME_DOM_GRP, "Domain Guests", "", privilege_none, PR_ACCESS_FROM_NETWORK);
@@ -1070,7 +1068,7 @@
 
 		/* interim solution until we have a last RID allocated */
 
-		sid_copy(&map->sid, &global_sam_sid);
+		sid_copy(&map->sid, get_global_sam_sid());
 		sid_append_rid(&map->sid, pdb_gid_to_group_rid(gid));
 
 		fstrcpy(map->nt_name, grp->gr_name);
diff -Nur HEAD/source/include/sids.h HEAD-samsid/source/include/sids.h
--- HEAD/source/include/sids.h	Wed Jan 30 07:08:15 2002
+++ HEAD-samsid/source/include/sids.h	Tue Jun  4 15:29:08 2002
@@ -23,7 +23,7 @@
 #ifndef _SIDS_H
 #define _SIDS_H 
 
-extern DOM_SID global_sam_sid;
+extern DOM_SID *global_sam_sid;
 extern fstring global_sam_name;
 
 extern DOM_SID global_member_sid;
diff -Nur HEAD/source/lib/util_sid.c HEAD-samsid/source/lib/util_sid.c
--- HEAD/source/lib/util_sid.c	Mon Apr 15 10:32:58 2002
+++ HEAD-samsid/source/lib/util_sid.c	Tue Jun  4 15:30:10 2002
@@ -22,10 +22,6 @@
 
 #include "includes.h"
 
-/* NOTE! the global_sam_sid is the SID of our local SAM. This is only
-   equal to the domain SID when we are a DC, otherwise its our
-   workstation SID */
-DOM_SID global_sam_sid;
 extern pstring global_myname;
 extern fstring global_myworkgroup;
 
@@ -120,17 +116,17 @@
 	
 
 	if ((lp_security() == SEC_USER) && lp_domain_logons()) {
-		sid_name_map[i].sid = &global_sam_sid;
+		sid_name_map[i].sid = get_global_sam_sid();
 		sid_name_map[i].name = global_myworkgroup;
 		sid_name_map[i].known_users = NULL;
 		i++;
-		sid_name_map[i].sid = &global_sam_sid;
+		sid_name_map[i].sid = get_global_sam_sid();
 		sid_name_map[i].name = global_myname;
 		sid_name_map[i].known_users = NULL;
 		i++;
 	}
 	else {
-		sid_name_map[i].sid = &global_sam_sid;
+		sid_name_map[i].sid = get_global_sam_sid();
 		sid_name_map[i].name = global_myname;
 		sid_name_map[i].known_users = NULL;
 		i++;
@@ -270,14 +266,14 @@
 
 	if (nt_domain == NULL) {
 		DEBUG(5,("map_domain_name_to_sid: mapping NULL domain to our SID.\n"));
-		sid_copy(sid, &global_sam_sid);
+		sid_copy(sid, get_global_sam_sid());
 		return True;
 	}
 
 	if (nt_domain[0] == 0) {
 		fstrcpy(nt_domain, global_myname);
 		DEBUG(5,("map_domain_name_to_sid: overriding blank name to %s\n", nt_domain));
-		sid_copy(sid, &global_sam_sid);
+		sid_copy(sid, get_global_sam_sid());
 		return True;
 	}
 
@@ -631,7 +627,7 @@
 *****************************************************************/  
 BOOL sid_check_is_domain(const DOM_SID *sid)
 {
-	return sid_equal(sid, &global_sam_sid);
+	return sid_equal(sid, get_global_sam_sid());
 }
 
 
@@ -655,7 +651,7 @@
 	sid_copy(&dom_sid, sid);
 	sid_split_rid(&dom_sid, &rid);
 	
-	return sid_equal(&dom_sid, &global_sam_sid);
+	return sid_equal(&dom_sid, get_global_sam_sid());
 }
 
 /*****************************************************************
diff -Nur HEAD/source/passdb/machine_sid.c HEAD-samsid/source/passdb/machine_sid.c
--- HEAD/source/passdb/machine_sid.c	Tue May 21 14:07:16 2002
+++ HEAD-samsid/source/passdb/machine_sid.c	Tue Jun  4 15:59:20 2002
@@ -4,6 +4,7 @@
    Copyright (C) Jeremy Allison 		1996-2002
    Copyright (C) Andrew Tridgell		2002
    Copyright (C) Gerald (Jerry) Carter		2000
+   Copyright (C) Stefan (metze) Metzmacher	2002
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -22,6 +23,8 @@
 
 #include "includes.h"
 
+DOM_SID *global_sam_sid=NULL;
+
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
 
@@ -77,6 +80,10 @@
 	extern fstring global_myworkgroup;
 	BOOL is_dc = False;
 
+	if(global_sam_sid==NULL)
+		if(!(global_sam_sid=(DOM_SID *)malloc(sizeof(DOM_SID))))
+			return False;
+			
 	generate_wellknown_sids();
 
 	switch (lp_server_role()) {
@@ -89,7 +96,7 @@
 		break;
 	}
 
-	if (secrets_fetch_domain_sid(global_myname, &global_sam_sid)) {
+	if (secrets_fetch_domain_sid(global_myname, global_sam_sid)) {
 		DOM_SID domain_sid;
 
 		/* We got our sid. If not a pdc/bdc, we're done. */
@@ -100,19 +107,19 @@
 
 			/* No domain sid and we're a pdc/bdc. Store it */
 
-			if (!secrets_store_domain_sid(global_myworkgroup, &global_sam_sid)) {
+			if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) {
 				DEBUG(0,("pdb_generate_sam_sid: Can't store domain SID as a pdc/bdc.\n"));
 				return False;
 			}
 			return True;
 		}
 
-		if (!sid_equal(&domain_sid, &global_sam_sid)) {
+		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. */
 
 			DEBUG(0,("pdb_generate_sam_sid: Mismatched SIDs as a pdc/bdc.\n"));
-			if (!secrets_store_domain_sid(global_myworkgroup, &global_sam_sid)) {
+			if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) {
 				DEBUG(0,("pdb_generate_sam_sid: Can't re-store domain SID as a pdc/bdc.\n"));
 				return False;
 			}
@@ -126,24 +133,23 @@
 	/* check for an old MACHINE.SID file for backwards compatibility */
 	asprintf(&fname, "%s/MACHINE.SID", lp_private_dir());
 
-	if (read_sid_from_file(fname, &global_sam_sid)) {
+	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;
 		}
 		unlink(fname);
 		if (is_dc) {
-			if (!secrets_store_domain_sid(global_myworkgroup, &global_sam_sid)) {
+			if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) {
 				DEBUG(0,("pdb_generate_sam_sid: Failed to store domain SID from file.\n"));
 				SAFE_FREE(fname);
 				return False;
 			}
 		}
 
-		/* Stored the old sid from MACHINE.SID successfully.
-			Patch from Stefan "metze" Metzmacher <metze at metzemix.de>*/
+		/* Stored the old sid from MACHINE.SID successfully.*/
 		SAFE_FREE(fname);
 		return True;
 	}
@@ -152,14 +158,14 @@
 
 	/* we don't have the SID in secrets.tdb, we will need to
            generate one and save it */
-	generate_random_sid(&global_sam_sid);
+	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;
 	}
 	if (is_dc) {
-		if (!secrets_store_domain_sid(global_myworkgroup, &global_sam_sid)) {
+		if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) {
 			DEBUG(0,("pdb_generate_sam_sid: Failed to store generated domain SID.\n"));
 			return False;
 		}
@@ -167,3 +173,17 @@
 
 	return True;
 }   
+
+/* return our global_sam_sid */
+DOM_SID *get_global_sam_sid(void)
+{
+	if(global_sam_sid!=NULL)
+		return global_sam_sid;
+	
+	/* memory for global_sam_sid is allocated in 
+	   pdb_generate_sam_sid() is needed*/
+	if(!pdb_generate_sam_sid())
+		global_sam_sid=NULL;	
+	
+	return global_sam_sid;
+}
diff -Nur HEAD/source/passdb/passdb.c HEAD-samsid/source/passdb/passdb.c
--- HEAD/source/passdb/passdb.c	Mon May 27 13:11:01 2002
+++ HEAD-samsid/source/passdb/passdb.c	Tue Jun  4 15:49:13 2002
@@ -32,7 +32,6 @@
  * responsible.
  */
 
-extern DOM_SID global_sam_sid;
 extern pstring global_myname;
 
 /************************************************************
@@ -699,7 +698,7 @@
 
 	fstrcpy(user, c_user);
 
-	sid_copy(&local_sid, &global_sam_sid);
+	sid_copy(&local_sid, get_global_sam_sid());
 
 	/*
 	 * Special case for MACHINE\Everyone. Map to the world_sid.
@@ -787,12 +786,11 @@
 
 DOM_SID *local_uid_to_sid(DOM_SID *psid, uid_t uid)
 {
-	extern DOM_SID global_sam_sid;
 	struct passwd *pass;
 	SAM_ACCOUNT *sam_user = NULL;
 	fstring str; /* sid string buffer */
 
-	sid_copy(psid, &global_sam_sid);
+	sid_copy(psid, get_global_sam_sid());
 
 	if((pass = getpwuid_alloc(uid))) {
 
@@ -830,8 +828,6 @@
 
 BOOL local_sid_to_uid(uid_t *puid, DOM_SID *psid, enum SID_NAME_USE *name_type)
 {
-	extern DOM_SID global_sam_sid;
-
 	DOM_SID dom_sid;
 	uint32 rid;
 	fstring str;
@@ -846,7 +842,7 @@
 	 * We can only convert to a uid if this is our local
 	 * Domain SID (ie. we are the controling authority).
 	 */
-	if (!sid_equal(&global_sam_sid, &dom_sid))
+	if (!sid_equal(get_global_sam_sid(), &dom_sid))
 		return False;
 
 	if (NT_STATUS_IS_ERR(pdb_init_sam(&sam_user)))
@@ -878,10 +874,9 @@
 
 DOM_SID *local_gid_to_sid(DOM_SID *psid, gid_t gid)
 {
-	extern DOM_SID global_sam_sid;
 	GROUP_MAP map;
 
-	sid_copy(psid, &global_sam_sid);
+	sid_copy(psid, get_global_sam_sid());
 	
 	if (get_group_map_from_gid(gid, &map, MAPPING_WITHOUT_PRIV)) {
 		sid_copy(psid, &map.sid);
@@ -899,7 +894,6 @@
 
 BOOL local_sid_to_gid(gid_t *pgid, DOM_SID *psid, enum SID_NAME_USE *name_type)
 {
-	extern DOM_SID global_sam_sid;
 	DOM_SID dom_sid;
 	uint32 rid;
 	fstring str;
@@ -917,7 +911,7 @@
 	 * Or in the Builtin SID too. JFM, 11/30/2001
 	 */
 
-	if (!sid_equal(&global_sam_sid, &dom_sid))
+	if (!sid_equal(get_global_sam_sid(), &dom_sid))
 		return False;
 
 	if (get_group_map_from_sid(*psid, &map, MAPPING_WITHOUT_PRIV)) {
diff -Nur HEAD/source/printing/nt_printing.c HEAD-samsid/source/printing/nt_printing.c
--- HEAD/source/printing/nt_printing.c	Mon May 13 14:09:47 2002
+++ HEAD-samsid/source/printing/nt_printing.c	Tue Jun  4 15:32:14 2002
@@ -3683,7 +3683,6 @@
 
 static SEC_DESC_BUF *construct_default_printer_sdb(TALLOC_CTX *ctx)
 {
-	extern DOM_SID global_sam_sid;
 	SEC_ACE ace[3];
 	SEC_ACCESS sa;
 	SEC_ACL *psa = NULL;
@@ -3709,7 +3708,7 @@
  		   This should emulate a lanman printer as security
  		   settings can't be changed. */
 
-		sid_copy(&owner_sid, &global_sam_sid);
+		sid_copy(&owner_sid, get_global_sam_sid());
 		sid_append_rid(&owner_sid, DOMAIN_USER_RID_ADMIN);
 	}
 
diff -Nur HEAD/source/rpc_server/srv_lsa_nt.c HEAD-samsid/source/rpc_server/srv_lsa_nt.c
--- HEAD/source/rpc_server/srv_lsa_nt.c	Tue May 21 14:07:20 2002
+++ HEAD-samsid/source/rpc_server/srv_lsa_nt.c	Tue Jun  4 16:52:23 2002
@@ -26,7 +26,6 @@
 
 #include "includes.h"
 
-extern DOM_SID global_sam_sid;
 extern fstring global_myworkgroup;
 extern pstring global_myname;
 extern PRIVS privs[];
@@ -320,7 +319,7 @@
 	init_sec_access(&mask, POLICY_EXECUTE);
 	init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 
-	sid_copy(&adm_sid, &global_sam_sid);
+	sid_copy(&adm_sid, get_global_sam_sid());
 	sid_append_rid(&adm_sid, DOMAIN_GROUP_RID_ADMINS);
 	init_sec_access(&mask, POLICY_ALL_ACCESS);
 	init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
@@ -367,7 +366,7 @@
 		return NT_STATUS_NO_MEMORY;
 
 	ZERO_STRUCTP(info);
-	info->sid = global_sam_sid;
+	sid_copy(&info->sid,get_global_sam_sid());
 	info->access = acc_granted;
 
 	/* set up the LSA QUERY INFO response */
@@ -405,7 +404,7 @@
 		return NT_STATUS_NO_MEMORY;
 
 	ZERO_STRUCTP(info);
-	info->sid = global_sam_sid;
+	sid_copy(&info->sid,get_global_sam_sid());
 	info->access = acc_granted;
 
 	/* set up the LSA QUERY INFO response */
@@ -502,7 +501,7 @@
 			case ROLE_DOMAIN_PDC:
 			case ROLE_DOMAIN_BDC:
 				name = global_myworkgroup;
-				sid = &global_sam_sid;
+				sid = get_global_sam_sid();
 				break;
 			case ROLE_DOMAIN_MEMBER:
 				name = global_myworkgroup;
@@ -532,15 +531,15 @@
 			case ROLE_DOMAIN_PDC:
 			case ROLE_DOMAIN_BDC:
 				name = global_myworkgroup;
-				sid = &global_sam_sid;
+				sid = get_global_sam_sid();
 				break;
 			case ROLE_DOMAIN_MEMBER:
 				name = global_myname;
-				sid = &global_sam_sid;
+				sid = get_global_sam_sid();
 				break;
 			case ROLE_STANDALONE:
 				name = global_myname;
-				sid = &global_sam_sid;
+				sid = get_global_sam_sid();
 				break;
 			default:
 				return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
diff -Nur HEAD/source/rpc_server/srv_netlog_nt.c HEAD-samsid/source/rpc_server/srv_netlog_nt.c
--- HEAD/source/rpc_server/srv_netlog_nt.c	Tue May 21 14:07:20 2002
+++ HEAD-samsid/source/rpc_server/srv_netlog_nt.c	Tue Jun  4 15:33:06 2002
@@ -27,7 +27,6 @@
 #include "includes.h"
 
 extern pstring global_myname;
-extern DOM_SID global_sam_sid;
 
 /*************************************************************************
  init_net_r_req_chal:
@@ -705,7 +704,7 @@
 				    NULL, /* uchar sess_key[16] */
 				    my_name     , /* char *logon_srv */
 				    my_workgroup, /* char *logon_dom */
-				    &global_sam_sid,     /* DOM_SID *dom_sid */
+				    get_global_sam_sid(),     /* DOM_SID *dom_sid */
 				    NULL); /* char *other_sids */
 	}
 	free_server_info(&server_info);
diff -Nur HEAD/source/rpc_server/srv_samr_nt.c HEAD-samsid/source/rpc_server/srv_samr_nt.c
--- HEAD/source/rpc_server/srv_samr_nt.c	Mon Jun  3 09:20:28 2002
+++ HEAD-samsid/source/rpc_server/srv_samr_nt.c	Tue Jun  4 15:33:39 2002
@@ -31,7 +31,6 @@
 
 extern fstring global_myworkgroup;
 extern pstring global_myname;
-extern DOM_SID global_sam_sid;
 extern DOM_SID global_sid_Builtin;
 
 extern rid_name domain_group_rids[];
@@ -654,7 +653,7 @@
 		}
 		SAFE_FREE(map);
 		
-	} else if (sid_equal(sid, &global_sam_sid) && !lp_hide_local_users()) {
+	} else if (sid_equal(sid, get_global_sam_sid()) && !lp_hide_local_users()) {
 		struct sys_grent *glist;
 		struct sys_grent *grp;
 		struct passwd *pw;
@@ -1356,7 +1355,7 @@
 		group_attrs[i] = SID_NAME_UNKNOWN;
 		*group_names[i] = '\0';
 
-		if (sid_equal(&pol_sid, &global_sam_sid)) {
+		if (sid_equal(&pol_sid, get_global_sam_sid())) {
 			sid_copy(&sid, &pol_sid);
 			sid_append_rid(&sid, q_u->rid[i]);
 
@@ -1796,7 +1795,7 @@
 			num_users=info->disp_info.num_user_account;
 			free_samr_db(info);
 			
-			r_u->status=load_group_domain_entries(info, &global_sam_sid);
+			r_u->status=load_group_domain_entries(info, get_global_sam_sid());
 			if (NT_STATUS_IS_ERR(r_u->status)) {
 				DEBUG(5, ("_samr_query_dispinfo: load_group_domain_entries failed\n"));
 				return r_u->status;
@@ -2725,7 +2724,7 @@
 		if(!get_local_group_from_sid(als_sid, &map, MAPPING_WITHOUT_PRIV))
 			return NT_STATUS_NO_SUCH_ALIAS;
 	} else {
-		if (sid_equal(&alias_sid, &global_sam_sid)) {
+		if (sid_equal(&alias_sid, get_global_sam_sid())) {
 			DEBUG(10, ("lookup on Server SID\n"));
 			if(!get_local_group_from_sid(als_sid, &map, MAPPING_WITHOUT_PRIV))
 				return NT_STATUS_NO_SUCH_ALIAS;
@@ -2744,7 +2743,7 @@
 		struct passwd *pass;
 		uint32 rid;
 
-		sid_copy(&temp_sid, &global_sam_sid);
+		sid_copy(&temp_sid, get_global_sam_sid());
 
 		pass = getpwuid_alloc(uid[i]);
 		if (!pass) continue;
@@ -2818,7 +2817,7 @@
 	DEBUG(10, ("sid is %s\n", group_sid_str));
 
 	/* can we get a query for an SID outside our domain ? */
-	if (!sid_equal(&group_sid, &global_sam_sid))
+	if (!sid_equal(&group_sid, get_global_sam_sid()))
 		return NT_STATUS_NO_SUCH_GROUP;
 
 	sid_append_rid(&group_sid, group_rid);
@@ -2901,7 +2900,7 @@
 	sid_to_string(alias_sid_str, &alias_sid);
 	DEBUG(10, ("sid is %s\n", alias_sid_str));
 
-	if (sid_compare(&alias_sid, &global_sam_sid)>0) {
+	if (sid_compare(&alias_sid, get_global_sam_sid())>0) {
 		DEBUG(10, ("adding member on Server SID\n"));
 		if(!get_local_group_from_sid(alias_sid, &map, MAPPING_WITHOUT_PRIV))
 			return NT_STATUS_NO_SUCH_ALIAS;
@@ -3050,7 +3049,7 @@
 	sid_to_string(group_sid_str, &group_sid);
 	DEBUG(10, ("sid is %s\n", group_sid_str));
 
-	if (sid_compare(&group_sid, &global_sam_sid)<=0)
+	if (sid_compare(&group_sid, get_global_sam_sid())<=0)
 		return NT_STATUS_NO_SUCH_GROUP;
 
 	DEBUG(10, ("lookup on Domain SID\n"));
@@ -3058,7 +3057,7 @@
 	if(!get_domain_group_from_sid(group_sid, &map, MAPPING_WITHOUT_PRIV))
 		return NT_STATUS_NO_SUCH_GROUP;
 
-	sid_copy(&user_sid, &global_sam_sid);
+	sid_copy(&user_sid, get_global_sam_sid());
 	sid_append_rid(&user_sid, q_u->rid);
 
 	ret = pdb_init_sam(&sam_user);
@@ -3137,7 +3136,7 @@
 	if(!sid_check_is_in_our_domain(&group_sid))
 		return NT_STATUS_NO_SUCH_GROUP;
 
-	sid_copy(&user_sid, &global_sam_sid);
+	sid_copy(&user_sid, get_global_sam_sid());
 	sid_append_rid(&user_sid, q_u->rid);
 
 	if(!get_domain_group_from_sid(group_sid, &map, MAPPING_WITHOUT_PRIV))
@@ -3270,7 +3269,7 @@
 	DEBUG(10, ("sid is %s\n", group_sid_str));
 
 	/* we check if it's our SID before deleting */
-	if (!sid_equal(&dom_sid, &global_sam_sid))
+	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_NO_SUCH_GROUP;
 
 	DEBUG(10, ("lookup on Domain SID\n"));
@@ -3327,7 +3326,7 @@
 	DEBUG(10, ("sid is %s\n", alias_sid_str));
 
 	/* we check if it's our SID before deleting */
-	if (!sid_equal(&dom_sid, &global_sam_sid))
+	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_NO_SUCH_ALIAS;
 
 	DEBUG(10, ("lookup on Local SID\n"));
@@ -3377,7 +3376,7 @@
 	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &dom_sid)) 
 		return NT_STATUS_INVALID_HANDLE;
 
-	if (!sid_equal(&dom_sid, &global_sam_sid))
+	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
 	/* TODO: check if allowed to create group and add a become_root/unbecome_root pair.*/
@@ -3398,7 +3397,7 @@
 	r_u->rid=pdb_gid_to_group_rid(grp->gr_gid);
 
 	/* add the group to the mapping table */
-	sid_copy(&info_sid, &global_sam_sid);
+	sid_copy(&info_sid, get_global_sam_sid());
 	sid_append_rid(&info_sid, r_u->rid);
 	sid_to_string(sid_string, &info_sid);
 
@@ -3435,7 +3434,7 @@
 	if (!get_lsa_policy_samr_sid(p, &q_u->dom_pol, &dom_sid)) 
 		return NT_STATUS_INVALID_HANDLE;
 
-	if (!sid_equal(&dom_sid, &global_sam_sid))
+	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
 	/* TODO: check if allowed to create group  and add a become_root/unbecome_root pair.*/
@@ -3455,7 +3454,7 @@
 
 	r_u->rid=pdb_gid_to_group_rid(grp->gr_gid);
 
-	sid_copy(&info_sid, &global_sam_sid);
+	sid_copy(&info_sid, get_global_sam_sid());
 	sid_append_rid(&info_sid, r_u->rid);
 	sid_to_string(sid_string, &info_sid);
 
@@ -3641,10 +3640,10 @@
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* this should not be hard-coded like this */
-	if (!sid_equal(&sid, &global_sam_sid))
+	if (!sid_equal(&sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
-	sid_copy(&info_sid, &global_sam_sid);
+	sid_copy(&info_sid, get_global_sam_sid());
 	sid_append_rid(&info_sid, q_u->rid_group);
 	sid_to_string(sid_string, &info_sid);
 
@@ -3733,7 +3732,7 @@
 			num_users=info->disp_info.num_user_account;
 			free_samr_db(info);
 			
-			r_u->status=load_group_domain_entries(info, &global_sam_sid);
+			r_u->status=load_group_domain_entries(info, get_global_sam_sid());
 			if (NT_STATUS_IS_ERR(r_u->status)) {
 				DEBUG(5, ("_samr_query_dispinfo: load_group_domain_entries failed\n"));
 				return r_u->status;
diff -Nur HEAD/source/smbd/groupname.c HEAD-samsid/source/smbd/groupname.c
--- HEAD/source/smbd/groupname.c	Wed Jan 30 07:08:38 2002
+++ HEAD-samsid/source/smbd/groupname.c	Tue Jun  4 16:44:20 2002
@@ -21,7 +21,6 @@
 #ifdef USING_GROUPNAME_MAP
 
 #include "includes.h"
-extern DOM_SID global_sam_sid;
 
 /**************************************************************************
  Groupname map functionality. The code loads a groupname map file and
@@ -160,7 +159,7 @@
        * It's not a well known name, convert the UNIX gid_t
        * to a rid within this domain SID.
        */
-      tmp_sid = global_sam_sid;
+      sid_copy(&tmp_sid,get_global_sam_sid());
       tmp_sid.sub_auths[tmp_sid.num_auths++] = 
                     pdb_gid_to_group_rid(gid);
     }
@@ -228,7 +227,7 @@
    * If there's no map, convert the UNIX gid_t
    * to a rid within this domain SID.
    */
-  *psid = global_sam_sid;
+  sid_copy(psid,get_global_sam_sid());
   psid->sub_auths[psid->num_auths++] = pdb_gid_to_group_rid(gid);
 
   return;
diff -Nur HEAD/source/smbd/uid.c HEAD-samsid/source/smbd/uid.c
--- HEAD/source/smbd/uid.c	Mon Apr 15 10:33:07 2002
+++ HEAD-samsid/source/smbd/uid.c	Tue Jun  4 15:35:16 2002
@@ -504,7 +504,7 @@
 		sid_copy(&tmp_sid, sid);
 		sid_split_rid(&tmp_sid, &rid);
 
-		if (sid_equal(&global_sam_sid, &tmp_sid)) {
+		if (sid_equal(get_global_sam_sid(), &tmp_sid)) {
 
 			return map_domain_sid_to_name(&tmp_sid, dom_name) &&
 				local_lookup_sid(sid, name, name_type);
@@ -598,7 +598,7 @@
 	fstring sid_str;
 
 	/* if we know its local then don't try winbindd */
-	if (sid_compare_domain(&global_sam_sid, psid) == 0) {
+	if (sid_compare_domain(get_global_sam_sid(), psid) == 0) {
 		return local_sid_to_uid(puid, psid, sidtype);
 	}
 
diff -Nur HEAD/source/utils/smbgroupedit.c HEAD-samsid/source/utils/smbgroupedit.c
--- HEAD/source/utils/smbgroupedit.c	Fri Apr 19 00:56:34 2002
+++ HEAD-samsid/source/utils/smbgroupedit.c	Tue Jun  4 15:35:49 2002
@@ -23,7 +23,6 @@
 
 extern pstring global_myname;
 extern pstring global_myworkgroup;
-extern DOM_SID global_sam_sid;
 
 /*
  * Next two lines needed for SunOS and don't
-------------- next part --------------
diff -Nur HEAD/source/Makefile.in HEAD-fix/source/Makefile.in
--- HEAD/source/Makefile.in	Mon May 27 13:10:59 2002
+++ HEAD-fix/source/Makefile.in	Fri May 31 12:03:01 2002
@@ -134,7 +134,7 @@
 	  lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \
 	  nsswitch/wb_client.o nsswitch/wb_common.o \
 	  lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \
-	  $(TDB_OBJ) 
+	  $(TDB_OBJ)
 
 READLINE_OBJ = lib/readline.o
 
@@ -264,13 +264,14 @@
             nmbd/nmbd_workgroupdb.o nmbd/nmbd_synclists.o
 
 NMBD_OBJ = $(NMBD_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) \
-           $(PROFILE_OBJ) $(LIB_OBJ)
+           $(PROFILE_OBJ) $(LIB_OBJ) passdb/machine_sid.o
 
 WREPL_OBJ1 = wrepld/server.o wrepld/process.o wrepld/parser.o wrepld/socket.o \
              wrepld/partners.o
 
 WREPL_OBJ = $(WREPL_OBJ1)  $(PARAM_OBJ) $(UBIQX_OBJ) \
-	    $(PROFILE_OBJ) $(LIB_OBJ)
+	    $(PROFILE_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+            libsmb/smbencrypt.o libsmb/smbdes.o passdb/secrets.o 
 
 SWAT_OBJ = web/cgi.o web/diagnose.o web/startstop.o web/statuspage.o \
            web/swat.o web/neg_lang.o $(PRINTING_OBJ) $(LIBSMB_OBJ) $(LOCKING_OBJ) \
@@ -279,29 +280,41 @@
 	   smbwrapper/shared.o
 
 SMBSH_OBJ = smbwrapper/smbsh.o smbwrapper/shared.o \
-            $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+            $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+	    passdb/secrets.o libsmb/smbencrypt.o libsmb/smbdes.o
+
+
 
 MAKE_PRINTERDEF_OBJ = utils/make_printerdef.o $(PARAM_OBJ) \
                       $(UBIQX_OBJ) $(LIB_OBJ)
 
 STATUS_OBJ = utils/status.o $(LOCKING_OBJ) $(PARAM_OBJ) \
-             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ)
+             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+	     passdb/secrets.o libsmb/smbencrypt.o libsmb/smbdes.o
 
 SMBCONTROL_OBJ = utils/smbcontrol.o $(LOCKING_OBJ) $(PARAM_OBJ) \
-             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ)
+             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+	     passdb/secrets.o libsmb/smbencrypt.o libsmb/smbdes.o
+
+
 
 SMBTREE_OBJ = utils/smbtree.o $(LOCKING_OBJ) $(PARAM_OBJ) \
-             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ) $(LIBSMB_OBJ)
+             $(UBIQX_OBJ) $(PROFILE_OBJ) $(LIB_OBJ) $(LIBSMB_OBJ) \
+	     passdb/machine_sid.o 
+
+
 
 TESTPARM_OBJ = utils/testparm.o \
-               $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+               $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+               libsmb/smbencrypt.o libsmb/smbdes.o passdb/secrets.o 
 
 TESTPRNS_OBJ = utils/testprns.o $(PARAM_OBJ) $(PRINTING_OBJ) $(UBIQX_OBJ) \
-               $(LIB_OBJ)
+               $(LIB_OBJ) passdb/machine_sid.o \
+               libsmb/smbencrypt.o libsmb/smbdes.o passdb/secrets.o 
 
 SMBPASSWD_OBJ = utils/smbpasswd.o $(PARAM_OBJ) \
 		$(LIBSMB_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ)\
-                $(UBIQX_OBJ) $(LIB_OBJ)
+                $(UBIQX_OBJ) $(LIB_OBJ) 
 
 PDBEDIT_OBJ = utils/pdbedit.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) \
 		$(UBIQX_OBJ) $(LIB_OBJ) $(GROUPDB_OBJ)
@@ -313,7 +326,7 @@
 	         rpcclient/cmd_samr.o rpcclient/cmd_spoolss.o \
 		 rpcclient/cmd_netlogon.o rpcclient/cmd_srvsvc.o \
 		 rpcclient/cmd_dfs.o rpcclient/cmd_reg.o \
-		 rpcclient/display_sec.o
+		 rpcclient/display_sec.o 
 
 RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
              $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \
@@ -342,7 +355,7 @@
 
 CLIENT_OBJ = client/client.o client/clitar.o \
              $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \
-             $(READLINE_OBJ)
+             $(READLINE_OBJ) passdb/machine_sid.o 
 
 NET_OBJ = utils/net.o utils/net_ads.o utils/net_help.o \
           utils/net_rap.o utils/net_rpc.o \
@@ -351,23 +364,26 @@
 	$(GROUPDB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
 
 
-CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o
 
 MOUNT_OBJ = client/smbmount.o \
-             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o 
 
 MNT_OBJ = client/smbmnt.o \
-             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o 
 
 UMOUNT_OBJ = client/smbumount.o \
-             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+             $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o 
 
 NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(UBIQX_OBJ) \
-                $(LIBSMB_OBJ) $(LIB_OBJ)
+                $(LIBSMB_OBJ) $(LIB_OBJ) passdb/machine_sid.o 
 
 SMBTORTURE_OBJ = torture/torture.o torture/nbio.o torture/scanner.o torture/utable.o \
 		torture/denytest.o torture/mangle_test.o \
-	$(LIBSMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ)
+	$(LIBSMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) passdb/machine_sid.o \
+	     passdb/secrets.o libsmb/smbencrypt.o libsmb/smbdes.o
+
+
 
 MASKTEST_OBJ = torture/masktest.o $(LIBSMB_OBJ) $(PARAM_OBJ) \
                  $(UBIQX_OBJ) $(LIB_OBJ)
@@ -454,7 +470,7 @@
 		$(GROUPDB_OBJ) $(PROFILE_OBJ) $(UNIGRP_OBJ)
 
 WBINFO_OBJ = nsswitch/wbinfo.o libsmb/smbencrypt.o libsmb/smbdes.o \
-	passdb/secrets.o
+	     passdb/secrets.o passdb/machine_sid.o
 
 WINBIND_NSS_OBJ = nsswitch/winbind_nss.o nsswitch/wb_common.o @WINBIND_NSS_EXTRA_OBJS@
 


More information about the samba-technical mailing list