6 # add single or continuously numbered domain users
7 # to a given single group or list of groups
9 # Copyright (C) Michael Adam <obnox@samba.org> 2007
11 # This program is free software; you can redistribute it and/or modify it
12 # under the terms of the GNU General Public License as published by the Free
13 # Software Foundation; either version 2 of the License, or (at your option)
16 # This program is distributed in the hope that it will be useful, but WITHOUT
17 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 # You should have received a copy of the GNU General Public License along with
22 # this program; if not, write to the Free Software Foundation, Inc., 675
23 # Mass Ave, Cambridge, MA 02139, USA.
27 # WARNING: This script is still rather crude.
39 my $startmem; # if empty, don't add numbers to member prefix
40 my $member_prefix; # name prefix for member
42 my $startgroup; # if empty, don't add numbers to group prefix
43 my $group_prefix; # name prefix for group
44 my $path; # path to rpcclient command
45 my $net_path = $net_cmd;
49 print "USAGE: $0 [-h] -S server -U user\%pass \\\n"
50 . "\t-m member [-s startmem] [-n nummem] \\\n"
51 . "\t-g group [-G stargroup] [-N numgroups] \\\n"
58 getopts
("U:S:m:s:n:g:G:N:P:h", \
%options);
60 if (exists($options{h
})) {
65 if (exists($options{g
})) {
66 $group_prefix = $options{g
};
69 print "ERROR: mandatory argument '-g' missing\n";
74 if (exists($options{U
})) {
75 $creds = "-U $options{U}";
77 print "ERROR: you need to specify credentials in the form -U user\%pass\n";
83 print "ERROR: mandatory argument '-U' missing\n";
88 if (exists($options{S
})) {
89 $server = $options{S
};
92 print "ERROR: madatory argument '-S' missing\n";
97 if (exists($options{s
})) {
98 $startmem = $options{s
};
101 if (exists($options{n
})) {
102 $num_members = $options{n
};
105 if (exists($options{m
})) {
106 $member_prefix = $options{m
};
109 print "ERROR: mandatory argument '-m' missing\n";
114 if (exists($options{G
})) {
115 $startgroup = $options{G
};
118 if (exists($options{N
})) {
119 $num_groups = $options{N
};
122 if (exists($options{P
})) {
124 $net_path = "$path/$net_cmd";
128 print "ERROR: junk on the command line ('" . join(" ", @ARGV) . "')...\n";
136 my $member_name = shift;
137 my $group_name = shift;
138 print "adding member $member_name to group $group_name\n";
139 system("$net_path rpc -I $server ".$creds." group addmem $group_name $member_name");
143 my $member_name = shift;
145 if ("x$startgroup" eq "x") {
146 do_add
($member_name, $group_prefix);
149 for (my $groupnum = 1; $groupnum <= $num_groups; ++$groupnum) {
151 sprintf("%s%.05d", $group_prefix, $startgroup + $groupnum - 1));
159 if ("x$startmem" eq "x") {
160 add_group_loop
($member_prefix);
163 for (my $memnum = 1; $memnum <= $num_members; ++$memnum) {
164 add_group_loop
(sprintf("%s%.05d", $member_prefix, $startmem + $memnum - 1));