1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-08 04:58:40 +03:00

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)
This commit is contained in:
Michael Adam 2007-07-05 00:12:24 +00:00 committed by Gerald (Jerry) Carter
parent 1d95e049bb
commit c799a1e980

View File

@ -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));
}
}