From 3db52feb1f3b2c07ce0b06ad4a7099fa6efe3fc7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 13 Dec 1999 13:27:58 +0000 Subject: first pass at updating head branch to be to be the same as the SAMBA_2_0 branch (This used to be commit 453a822a76780063dff23526c35408866d0c0154) --- source3/groupdb/groupdb.c | 143 ++++++---------------------------------------- 1 file changed, 17 insertions(+), 126 deletions(-) (limited to 'source3/groupdb/groupdb.c') diff --git a/source3/groupdb/groupdb.c b/source3/groupdb/groupdb.c index ed09560b3a..b8952358fb 100644 --- a/source3/groupdb/groupdb.c +++ b/source3/groupdb/groupdb.c @@ -24,14 +24,13 @@ #include "nterr.h" extern int DEBUGLEVEL; -extern DOM_SID global_sam_sid; /* * NOTE. All these functions are abstracted into a structure * that points to the correct function for the selected database. JRA. */ -static struct groupdb_ops *gpdb_ops = NULL; +static struct groupdb_ops *gpdb_ops; /*************************************************************** Initialise the group db operations. @@ -48,8 +47,8 @@ BOOL initialise_group_db(void) gpdb_ops = nisplus_initialise_group_db(); #elif defined(WITH_LDAP) gpdb_ops = ldap_initialise_group_db(); -#elif defined(USE_SMBUNIX_DB) - gpdb_ops = unix_initialise_group_db(); +#else + gpdb_ops = file_initialise_group_db(); #endif return (gpdb_ops != NULL); @@ -66,28 +65,7 @@ BOOL initialise_group_db(void) *************************************************************************/ DOMAIN_GRP *iterate_getgroupgid(gid_t gid, DOMAIN_GRP_MEMBER **mem, int *num_mem) { - DOM_NAME_MAP gmep; - uint32 rid; - if (!lookupsmbgrpgid(gid, &gmep)) - { - DEBUG(0,("iterate_getgroupgid: gid %d does not map to one of our Domain's Groups\n", gid)); - return NULL; - } - - if (gmep.type != SID_NAME_DOM_GRP && gmep.type != SID_NAME_WKN_GRP) - { - DEBUG(0,("iterate_getgroupgid: gid %d does not map to one of our Domain's Groups\n", gid)); - return NULL; - } - - sid_split_rid(&gmep.sid, &rid); - if (!sid_equal(&gmep.sid, &global_sam_sid)) - { - DEBUG(0,("iterate_getgroupgid: gid %d does not map into our Domain SID\n", gid)); - return NULL; - } - - return iterate_getgrouprid(rid, mem, num_mem); + return iterate_getgrouprid(pwdb_gid_to_group_rid(gid), mem, num_mem); } /************************************************************************ @@ -127,7 +105,7 @@ DOMAIN_GRP *iterate_getgrouprid(uint32 rid, DOMAIN_GRP_MEMBER **mem, int *num_me Utility function to search group database by name. use this if your database does not have search facilities. *************************************************************************/ -DOMAIN_GRP *iterate_getgroupntnam(const char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) +DOMAIN_GRP *iterate_getgroupnam(char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) { DOMAIN_GRP *grp = NULL; void *fp = NULL; @@ -187,7 +165,7 @@ BOOL add_domain_group(DOMAIN_GRP **grps, int *num_grps, DOMAIN_GRP *grp) /************************************************************************* checks to see if a user is a member of a domain group *************************************************************************/ -static BOOL user_is_member(const char *user_name, DOMAIN_GRP_MEMBER *mem, int num_mem) +static BOOL user_is_member(char *user_name, DOMAIN_GRP_MEMBER *mem, int num_mem) { int i; for (i = 0; i < num_mem; i++) @@ -207,16 +185,16 @@ static BOOL user_is_member(const char *user_name, DOMAIN_GRP_MEMBER *mem, int nu gets an array of groups that a user is in. use this if your database does not have search facilities *************************************************************************/ -BOOL iterate_getusergroupsnam(const char *user_name, DOMAIN_GRP **grps, int *num_grps) +BOOL iterate_getusergroupsnam(char *user_name, DOMAIN_GRP **grps, int *num_grps) { - DOMAIN_GRP *grp = NULL; + DOMAIN_GRP *grp; DOMAIN_GRP_MEMBER *mem = NULL; int num_mem = 0; void *fp = NULL; DEBUG(10, ("search for usergroups by name: %s\n", user_name)); - if (user_name == NULL || grps == NULL || num_grps == NULL) + if (user_name == NULL || grp == NULL || num_grps == NULL) { return False; } @@ -272,12 +250,12 @@ BOOL iterate_getusergroupsnam(const char *user_name, DOMAIN_GRP **grps, int *num *************************************************************************/ BOOL enumdomgroups(DOMAIN_GRP **grps, int *num_grps) { - DOMAIN_GRP *grp = NULL; + DOMAIN_GRP *grp; void *fp = NULL; DEBUG(10, ("enum user groups\n")); - if (grps == NULL || num_grps == NULL) + if (grp == NULL || num_grps == NULL) { return False; } @@ -343,38 +321,15 @@ DOMAIN_GRP *getgroupent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_mem) /************************************************************************ Routine to add an entry to the group database file. - on entry, the entry is added by name. - on exit, the RID is expected to have been set. *************************************************************************/ BOOL add_group_entry(DOMAIN_GRP *newgrp) { - BOOL ret; - if (newgrp->rid != 0xffffffff) - { - DEBUG(0,("add_group_entry - RID must be 0xffffffff, \ -database instance is responsible for allocating the RID, not you.\n")); - return False; - } - ret = gpdb_ops->add_group_entry(newgrp); - if (newgrp->rid == 0xffffffff) - { - DEBUG(0,("add_group_entry - RID has not been set by database\n")); - return False; - } - return ret; + return gpdb_ops->add_group_entry(newgrp); } /************************************************************************ - Routine to delete group database entry matching by rid. -************************************************************************/ -BOOL del_group_entry(uint32 rid) -{ - return gpdb_ops->del_group_entry(rid); -} - -/************************************************************************ - Routine to search group database file for entry matching by rid or groupname. + Routine to search the group database file for an entry matching the groupname. and then replace the entry. ************************************************************************/ @@ -383,29 +338,13 @@ BOOL mod_group_entry(DOMAIN_GRP* grp) return gpdb_ops->mod_group_entry(grp); } -/************************************************************************ - Routine to add a member to an entry in the group database file. -*************************************************************************/ -BOOL add_group_member(uint32 rid, uint32 member_rid) -{ - return gpdb_ops->add_group_member(rid, member_rid); -} - -/************************************************************************ - Routine to delete a member from an entry in the group database file. -*************************************************************************/ -BOOL del_group_member(uint32 rid, uint32 member_rid) -{ - return gpdb_ops->del_group_member(rid, member_rid); -} - /************************************************************************ Routine to search group database by name. *************************************************************************/ -DOMAIN_GRP *getgroupntnam(const char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) +DOMAIN_GRP *getgroupnam(char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) { - return gpdb_ops->getgroupntnam(name, mem, num_mem); + return gpdb_ops->getgroupnam(name, mem, num_mem); } /************************************************************************ @@ -429,9 +368,9 @@ DOMAIN_GRP *getgroupgid(gid_t gid, DOMAIN_GRP_MEMBER **mem, int *num_mem) /************************************************************************* gets an array of groups that a user is in. *************************************************************************/ -BOOL getusergroupsntnam(const char *user_name, DOMAIN_GRP **grp, int *num_grps) +BOOL getusergroupsnam(char *user_name, DOMAIN_GRP **grp, int *num_grps) { - return gpdb_ops->getusergroupsntnam(user_name, grp, num_grps); + return gpdb_ops->getusergroupsnam(user_name, grp, num_grps); } /************************************************************* @@ -444,51 +383,3 @@ void gpdb_init_grp(DOMAIN_GRP *grp) ZERO_STRUCTP(grp); } -/************************************************************************* - turns a list of groups into a string. -*************************************************************************/ -BOOL make_group_line(char *p, int max_len, - DOMAIN_GRP *grp, - DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - int i; - int len; - len = slprintf(p, max_len-1, "%s:%s:%d:", grp->name, grp->comment, grp->rid); - - if (len == -1) - { - DEBUG(0,("make_group_line: cannot create entry\n")); - return False; - } - - p += len; - max_len -= len; - - if (mem == NULL || num_mem == NULL) - { - return True; - } - - for (i = 0; i < (*num_mem); i++) - { - len = strlen((*mem)[i].name); - p = safe_strcpy(p, (*mem)[i].name, max_len); - - if (p == NULL) - { - DEBUG(0, ("make_group_line: out of space for groups!\n")); - return False; - } - - max_len -= len; - - if (i != (*num_mem)-1) - { - *p = ','; - p++; - max_len--; - } - } - - return True; -} -- cgit