first pass at updating head branch to be to be the same as the SAMBA_2_0 branch
[kai/samba-autobuild/.git] / source3 / groupdb / groupdb.c
index ed09560b3a8883e5ad05a6798332ecb7fe13d603..b8952358fbc1735f8ed1dc79f24fb735cc76695e 100644 (file)
 #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;
-}