1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-31 17:18:04 +03:00

Add -r parameter to smbgroupedit. With -r you can manually choose

a rid.

Volker
(This used to be commit 11ec785f3f)
This commit is contained in:
Volker Lendecke 2002-09-26 14:01:39 +00:00
parent a5c8985215
commit 1de972299f

View 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;
fstring comment;
gid=nametogid(group);
if (gid==-1) {
printf("unix group %s doesn't exist!\n", group);
return -1;
}
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);