r23714: This script allows for adding lists of users (or other objects)
authorMichael Adam <obnox@samba.org>
Thu, 5 Jul 2007 00:12:24 +0000 (00:12 +0000)
committerMichael Adam <obnox@samba.org>
Fri, 9 Nov 2007 10:19:58 +0000 (11:19 +0100)
to lists of groups (or aliases). Useful for creating large test
scenarios.

Michael
(cherry picked from commit b3e5082e105f6eaeed51e9a42d525d811e7155ee)
(This used to be commit 78a2344fe7ed53e9927e189fa4d465652731deab)

examples/scripts/users_and_groups/adduserstogroups.pl [new file with mode: 0755]

diff --git a/examples/scripts/users_and_groups/adduserstogroups.pl b/examples/scripts/users_and_groups/adduserstogroups.pl
new file mode 100755 (executable)
index 0000000..335dad0
--- /dev/null
@@ -0,0 +1,167 @@
+#!/usr/bin/perl
+
+#
+# adduserstogroups.pl
+#
+#    add single or continuously numbered domain users
+#    to a given single group or list of groups
+#
+# Copyright (C) Michael Adam <obnox@samba.org> 2007
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 675
+# Mass Ave, Cambridge, MA 02139, USA.
+#
+
+#
+# WARNING: This script is still rather crude.
+#
+
+use strict;
+use Getopt::Std;
+
+my $net_cmd    = "net";
+
+# defaults:
+
+my $server;
+my $num_members        = 1;
+my $startmem;                  # if empty, don't add numbers to member prefix
+my $member_prefix;             # name prefix for member
+my $num_groups = 1;
+my $startgroup;                        # if empty, don't add numbers to group prefix
+my $group_prefix;              # name prefix for group
+my $path;                      # path to rpcclient command
+my $net_path   = $net_cmd;
+my $creds;
+
+sub usage {
+       print "USAGE: $0 [-h] -S server -U user\%pass \\\n"
+               . "\t-m member [-s startmem] [-n nummem] \\\n"
+               . "\t-g group [-G stargroup] [-N numgroups] \\\n"
+               . "\t[-P path]\n";
+}
+
+# parse commandline:
+
+my %options = ();
+getopts("U:S:m:s:n:g:G:N:P:h", \%options);
+
+if (exists($options{h})) {
+       usage();
+       exit 0;
+}
+
+if (exists($options{g})) {
+       $group_prefix = $options{g};
+}
+else {
+       print "ERROR: mandatory argument '-g' missing\n";
+       usage();
+       exit 1;
+}
+
+if (exists($options{U})) {
+       $creds = "-U $options{U}";
+       if ($creds !~ '%') {
+               print "ERROR: you need to specify credentials in the form -U user\%pass\n";
+               usage();
+               exit 1;
+       }
+}
+else {
+       print "ERROR: mandatory argument '-U' missing\n";
+       usage();
+       exit 1;
+}
+
+if (exists($options{S})) {
+       $server = $options{S};
+}
+else {
+       print "ERROR: madatory argument '-S' missing\n";
+       usage();
+       exit 1;
+}
+
+if (exists($options{s})) {
+       $startmem = $options{s};
+}
+
+if (exists($options{n})) {
+       $num_members = $options{n};
+}
+
+if (exists($options{m})) {
+       $member_prefix = $options{m};
+}
+else {
+       print "ERROR: mandatory argument '-m' missing\n";
+       usage();
+       exit 1;
+}
+
+if (exists($options{G})) {
+       $startgroup = $options{G};
+}
+
+if (exists($options{N})) {
+       $num_groups = $options{N};
+}
+
+if (exists($options{P})) {
+       $path = $options{p};
+       $net_path = "$path/$net_cmd";
+}
+
+if (@ARGV) {
+       print "ERROR: junk on the command line ('" . join(" ", @ARGV) . "')...\n";
+       usage();
+       exit 1;
+}
+
+# utility functions:
+
+sub do_add {
+       my $member_name = shift;
+       my $group_name = shift;
+       print "adding member $member_name to group $group_name\n";
+       system("$net_path rpc -I $server ".$creds." group addmem $group_name $member_name");
+}
+
+sub add_group_loop {
+       my $member_name = shift;
+
+       if ("x$startgroup" eq "x") {
+               do_add($member_name, $group_prefix);
+       }
+       else {
+               for (my $groupnum = 1; $groupnum <= $num_groups; ++$groupnum) {
+                       do_add($member_name, 
+                              sprintf("%s%.05d", $group_prefix, $startgroup + $groupnum - 1));
+               }
+       }
+}
+
+
+# main:
+
+if ("x$startmem" eq "x") {
+       add_group_loop($member_prefix);
+}
+else {
+       for (my $memnum = 1; $memnum <= $num_members; ++$memnum) {
+               add_group_loop(sprintf("%s%.05d", $member_prefix, $startmem + $memnum - 1));
+       }
+}
+