Add -r parameter to smbgroupedit. With -r you can manually choose
authorVolker Lendecke <vlendec@samba.org>
Thu, 26 Sep 2002 14:01:39 +0000 (14:01 +0000)
committerVolker Lendecke <vlendec@samba.org>
Thu, 26 Sep 2002 14:01:39 +0000 (14:01 +0000)
a rid.

Volker
(This used to be commit 11ec785f3f43b277ae3f28b38865f4de972495bc)

source3/utils/smbgroupedit.c

index 4358e6f08c99acc0c8911a24f24d6fff4609649c..cf5ac1f02572635d9d28806ca8574e876832dc32 100644 (file)
@@ -86,28 +86,17 @@ static BOOL get_sid_from_input(DOM_SID *sid, char *input)
 /*********************************************************
  add a group.
 **********************************************************/
-static int addgroup(char *group, enum SID_NAME_USE sid_type, char *ntgroup, char *ntcomment, char *privilege)
+static int addgroup(gid_t gid, enum SID_NAME_USE sid_type, char *ntgroup, char *ntcomment, char *privilege, uint32 rid)
 {
        PRIVILEGE_SET se_priv;
-       gid_t gid;
        DOM_SID sid;
        fstring string_sid;
-       fstring name, comment;
-
-       gid=nametogid(group);
-       if (gid==-1) {
-               printf("unix group %s doesn't exist!\n", group);
-               return -1;
-       }
+       fstring comment;
 
-       local_gid_to_sid(&sid, gid);
-
-       sid_to_string(string_sid, &sid);
+       sid_copy(&sid, get_global_sam_sid());
+       sid_append_rid(&sid, rid);
        
-       if (ntgroup==NULL)
-               fstrcpy(name, group);
-       else
-               fstrcpy(name, ntgroup);
+       sid_to_string(string_sid, &sid);
        
        if (ntcomment==NULL)
                fstrcpy(comment, "Local Unix group");
@@ -118,8 +107,9 @@ static int addgroup(char *group, enum SID_NAME_USE sid_type, char *ntgroup, char
        if (privilege!=NULL)
                convert_priv_from_text(&se_priv, privilege);
 
-       if(!add_initial_entry(gid, string_sid, sid_type, name, comment, se_priv, PR_ACCESS_FROM_NETWORK)) {
-               printf("adding entry for group %s failed!\n", group);
+       if(!add_initial_entry(gid, string_sid, sid_type, ntgroup,
+                             comment, se_priv, PR_ACCESS_FROM_NETWORK)) {
+               printf("adding entry for group %s failed!\n", ntgroup);
                free_privilege(&se_priv);
                return -1;
        }
@@ -276,6 +266,7 @@ int main (int argc, char **argv)
        char *group_desc = NULL;
 
        enum SID_NAME_USE sid_type;
+       uint32 rid = -1;
 
        setup_logging("groupedit", True);
 
@@ -312,7 +303,7 @@ int main (int argc, char **argv)
                return 0;
        }
 
-       while ((ch = getopt(argc, argv, "a:c:d:ln:p:st:u:vx:")) != EOF) {
+       while ((ch = getopt(argc, argv, "a:c:d:ln:p:r:st:u:vx:")) != EOF) {
                switch(ch) {
                case 'a':
                        add_group = True;
@@ -336,6 +327,9 @@ int main (int argc, char **argv)
                        priv = True;
                        privilege=optarg;
                        break;
+               case 'r':
+                       rid = atoi(optarg);
+                       break;
                case 's':
                        long_list = False;
                        break;
@@ -392,8 +386,19 @@ int main (int argc, char **argv)
                }
        }
 
-       if (add_group)
-               return addgroup(group, sid_type, ntgroup, group_desc, privilege);
+       if (add_group) {
+               gid_t gid=nametogid(group);
+               if (gid==-1) {
+                       printf("unix group %s doesn't exist!\n", group);
+                       return -1;
+               }
+
+               if (rid == -1) {
+                       rid = pdb_gid_to_group_rid(gid);
+               }
+               return addgroup(gid, sid_type, ntgroup?ntgroup:group,
+                               group_desc, privilege, rid);
+       }
 
        if (view_group)
                return listgroup(sid_type, long_list);