• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/examples/scripts/users_and_groups/
1#!/usr/bin/perl
2
3#
4# adduserstogroups.pl
5#
6#    add single or continuously numbered domain users
7#    to a given single group or list of groups
8#
9# Copyright (C) Michael Adam <obnox@samba.org> 2007
10#
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.
15#
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.
20#
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/>.
23#
24
25#
26# WARNING: This script is still rather crude.
27#
28
29use strict;
30use Getopt::Std;
31
32my $net_cmd	= "net";
33
34# defaults:
35
36my $server;
37my $num_members	= 1;
38my $startmem;			# if empty, don't add numbers to member prefix
39my $member_prefix;		# name prefix for member
40my $num_groups = 1;
41my $startgroup;			# if empty, don't add numbers to group prefix
42my $group_prefix;		# name prefix for group
43my $path;			# path to rpcclient command
44my $net_path	= $net_cmd;
45my $creds;
46
47sub 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";
52}
53
54# parse commandline:
55
56my %options = ();
57getopts("U:S:m:s:n:g:G:N:P:h", \%options);
58
59if (exists($options{h})) {
60	usage();
61	exit 0;
62}
63
64if (exists($options{g})) {
65	$group_prefix = $options{g};
66}
67else {
68	print "ERROR: mandatory argument '-g' missing\n";
69	usage();
70	exit 1;
71}
72
73if (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;
79	}
80}
81else {
82	print "ERROR: mandatory argument '-U' missing\n";
83	usage();
84	exit 1;
85}
86
87if (exists($options{S})) {
88	$server = $options{S};
89}
90else {
91	print "ERROR: madatory argument '-S' missing\n";
92	usage();
93	exit 1;
94}
95
96if (exists($options{s})) {
97	$startmem = $options{s};
98}
99
100if (exists($options{n})) {
101	$num_members = $options{n};
102}
103
104if (exists($options{m})) {
105	$member_prefix = $options{m};
106}
107else {
108	print "ERROR: mandatory argument '-m' missing\n";
109	usage();
110	exit 1;
111}
112
113if (exists($options{G})) {
114	$startgroup = $options{G};
115}
116
117if (exists($options{N})) {
118	$num_groups = $options{N};
119}
120
121if (exists($options{P})) {
122	$path = $options{p};
123	$net_path = "$path/$net_cmd";
124}
125
126if (@ARGV) {
127	print "ERROR: junk on the command line ('" . join(" ", @ARGV) . "')...\n";
128	usage();
129	exit 1;
130}
131
132# utility functions:
133
134sub 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");
139}
140
141sub add_group_loop {
142	my $member_name = shift;
143
144	if ("x$startgroup" eq "x") {
145		do_add($member_name, $group_prefix);
146	}
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));
151		}
152	}
153}
154
155
156# main:
157
158if ("x$startmem" eq "x") {
159	add_group_loop($member_prefix);
160}
161else {
162	for (my $memnum = 1; $memnum <= $num_members; ++$memnum) {
163		add_group_loop(sprintf("%s%.05d", $member_prefix, $startmem + $memnum - 1));
164	}
165}
166
167