summaryrefslogtreecommitdiff
path: root/examples/scripts/users_and_groups
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2007-07-05 00:12:24 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:23:48 -0500
commitc799a1e9803b5b2f88d6872d8850bbebdc854fc1 (patch)
treee8a0562f7f5076d5469dab1f98ea19927641cebd /examples/scripts/users_and_groups
parent1d95e049bbc23cc56c573c0c249d075da0ac219d (diff)
downloadsamba-c799a1e9803b5b2f88d6872d8850bbebdc854fc1.tar.gz
samba-c799a1e9803b5b2f88d6872d8850bbebdc854fc1.tar.bz2
samba-c799a1e9803b5b2f88d6872d8850bbebdc854fc1.zip
r23714: but now:
This script allows for adding lists of users (or other objects) to lists of groups (or aliases). Useful for creating large test scenarios. Michael (This used to be commit b3e5082e105f6eaeed51e9a42d525d811e7155ee)
Diffstat (limited to 'examples/scripts/users_and_groups')
-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 0000000000..335dad00aa
--- /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));
+ }
+}
+