librpc: Shorten dcerpc_binding_handle_call a bit
[Samba/gebeck_regimport.git] / examples / scripts / users_and_groups / adduserstogroups.pl
blob675942877436114a3852cd45dbb6f003844ba957
1 #!/usr/bin/perl
4 # adduserstogroups.pl
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 3 of the License, or (at your option)
14 # any later version.
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
19 # more details.
21 # You should have received a copy of the GNU General Public License along with
22 # this program; if not, see <http://www.gnu.org/licenses/>.
26 # WARNING: This script is still rather crude.
29 use strict;
30 use Getopt::Std;
32 my $net_cmd = "net";
34 # defaults:
36 my $server;
37 my $num_members = 1;
38 my $startmem; # if empty, don't add numbers to member prefix
39 my $member_prefix; # name prefix for member
40 my $num_groups = 1;
41 my $startgroup; # if empty, don't add numbers to group prefix
42 my $group_prefix; # name prefix for group
43 my $path; # path to rpcclient command
44 my $net_path = $net_cmd;
45 my $creds;
47 sub usage {
48 print "USAGE: $0 [-h] -S server -U user\%pass \\\n"
49 . "\t-m member [-s startmem] [-n nummem] \\\n"
50 . "\t-g group [-G startgroup] [-N numgroups] \\\n"
51 . "\t[-P path]\n";
54 # parse commandline:
56 my %options = ();
57 getopts("U:S:m:s:n:g:G:N:P:h", \%options);
59 if (exists($options{h})) {
60 usage();
61 exit 0;
64 if (exists($options{g})) {
65 $group_prefix = $options{g};
67 else {
68 print "ERROR: mandatory argument '-g' missing\n";
69 usage();
70 exit 1;
73 if (exists($options{U})) {
74 $creds = "-U $options{U}";
75 if ($creds !~ '%') {
76 print "ERROR: you need to specify credentials in the form -U user\%pass\n";
77 usage();
78 exit 1;
81 else {
82 print "ERROR: mandatory argument '-U' missing\n";
83 usage();
84 exit 1;
87 if (exists($options{S})) {
88 $server = $options{S};
90 else {
91 print "ERROR: madatory argument '-S' missing\n";
92 usage();
93 exit 1;
96 if (exists($options{s})) {
97 $startmem = $options{s};
100 if (exists($options{n})) {
101 $num_members = $options{n};
104 if (exists($options{m})) {
105 $member_prefix = $options{m};
107 else {
108 print "ERROR: mandatory argument '-m' missing\n";
109 usage();
110 exit 1;
113 if (exists($options{G})) {
114 $startgroup = $options{G};
117 if (exists($options{N})) {
118 $num_groups = $options{N};
121 if (exists($options{P})) {
122 $path = $options{p};
123 $net_path = "$path/$net_cmd";
126 if (@ARGV) {
127 print "ERROR: junk on the command line ('" . join(" ", @ARGV) . "')...\n";
128 usage();
129 exit 1;
132 # utility functions:
134 sub do_add {
135 my $member_name = shift;
136 my $group_name = shift;
137 print "adding member $member_name to group $group_name\n";
138 system("$net_path rpc -I $server ".$creds." group addmem $group_name $member_name");
141 sub add_group_loop {
142 my $member_name = shift;
144 if ("x$startgroup" eq "x") {
145 do_add($member_name, $group_prefix);
147 else {
148 for (my $groupnum = 1; $groupnum <= $num_groups; ++$groupnum) {
149 do_add($member_name,
150 sprintf("%s%.05d", $group_prefix, $startgroup + $groupnum - 1));
156 # main:
158 if ("x$startmem" eq "x") {
159 add_group_loop($member_prefix);
161 else {
162 for (my $memnum = 1; $memnum <= $num_members; ++$memnum) {
163 add_group_loop(sprintf("%s%.05d", $member_prefix, $startmem + $memnum - 1));