summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2007-07-05 00:12:24 +0000
committerMichael Adam <obnox@samba.org>2007-11-09 11:19:58 +0100
commit78a2344fe7ed53e9927e189fa4d465652731deab (patch)
tree9bf8e7ffef5dce72d4c164a77f35bdee3076cfce /examples
parent852570059c974bc6c06f893e4bf5e76674e4ec00 (diff)
downloadsamba-78a2344fe7ed53e9927e189fa4d465652731deab.tar.gz
r23714: This script allows for adding lists of users (or other objects)
to lists of groups (or aliases). Useful for creating large test scenarios. Michael (cherry picked from commit b3e5082e105f6eaeed51e9a42d525d811e7155ee)
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/scripts/users_and_groups/adduserstogroups.pl167
1 files changed, 167 insertions, 0 deletions
diff --git a/examples/scripts/users_and_groups/adduserstogroups.pl b/examples/scripts/users_and_groups/adduserstogroups.pl
new file mode 100755
index 00000000000..335dad00aae
--- /dev/null
+++ b/examples/scripts/users_and_groups/adduserstogroups.pl
@@ -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));
+ }
+}
+