summaryrefslogtreecommitdiff
path: root/source3/groupdb/groupdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/groupdb/groupdb.c')
-rw-r--r--source3/groupdb/groupdb.c143
1 files changed, 17 insertions, 126 deletions
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.
************************************************************************/
@@ -384,28 +339,12 @@ BOOL mod_group_entry(DOMAIN_GRP* 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;
-}