File:
[LON-CAPA] /
loncom /
build /
weblayer_test /
make_test_user.pl
Revision
1.1:
download - view:
text,
annotated -
select for diffs
Mon Mar 4 06:47:01 2002 UTC (22 years, 5 months ago) by
harris41
Branches:
MAIN
CVS tags:
version_0_6_2,
version_0_6,
version_0_5_1,
version_0_5,
version_0_4,
stable_2002_july,
stable_2002_april,
STABLE,
HEAD
creates a test user with a username beginning with ZXQTEST
(followed by host and process specific strings)...
user is an author
1: #!/usr/bin/perl
2:
3: =pod
4:
5: =head1 NAME
6:
7: make_test_user.pl - Make a test user on a LON-CAPA system to help with automated testing of the web interface
8:
9: =cut
10:
11: # The LearningOnline Network
12: # make_test_user.pl - Make a test user on the LON-CAPA system
13: #
14: # $Id: make_test_user.pl,v 1.1 2002/03/04 06:47:01 harris41 Exp $
15: #
16: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
17: #
18: # LON-CAPA is free software; you can redistribute it and/or modify
19: # it under the terms of the GNU General Public License as published by
20: # the Free Software Foundation; either version 2 of the License, or
21: # (at your option) any later version.
22: #
23: # LON-CAPA is distributed in the hope that it will be useful,
24: # but WITHOUT ANY WARRANTY; without even the implied warranty of
25: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26: # GNU General Public License for more details.
27: #
28: # You should have received a copy of the GNU General Public License
29: # along with LON-CAPA; if not, write to the Free Software
30: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31: #
32: # /home/httpd/html/adm/gpl.txt
33: #
34: # http://www.lon-capa.org/
35: #
36: # YEAR=2002
37: # 3/3 Scott Harrison
38: #
39: ###
40:
41: =pod
42:
43: =head1 DESCRIPTION
44:
45: Automates the steps for creating a test user. This
46: program also describes a manual procedure (see below).
47:
48: These are the steps that are executed on the linux operating system:
49:
50: =over 4
51:
52: =item *
53:
54: Tests to see if user already exists for LON-CAPA, if so,
55: then erase user (to start cleanly).
56:
57: =item *
58:
59: Creates a linux system user
60:
61: =item *
62:
63: Sets password
64:
65: =item *
66:
67: Creates a LON-CAPA lonUsers directory for user
68:
69: =item *
70:
71: Sets LON-CAPA password mechanism to be "crypt"
72:
73: =item *
74:
75: Set roles.hist and roles.db
76:
77: =back
78:
79: =cut
80:
81: print "Making test user ZXQTEST...\n";
82:
83: # ------------------------------------------------------------------ Am I root?
84: unless ($< == 0) {
85: print "**** ERROR **** You need to run this test as 'root'.\n";
86: exit 1;
87: }
88:
89: # ---------------------------------------------------- Configure general values
90:
91: my %perlvar;
92: $perlvar{'lonUsersDir'}='/home/httpd/lonUsers';
93:
94: =pod
95:
96: =head1 OPTIONS
97:
98: There are no flags to this script.
99:
100: usage: make_test_user.pl [NAME_EXT] [DOMAIN]
101:
102: The password is accepted through standard input.
103:
104: The first argument specifies
105: what string to append to "ZXQTEST".
106: It should consist of only alphanumeric characters.
107:
108: The second argument specifies the password for the test user
109: coordinator and should only consist of printable ASCII
110: characters and be a string of length greater than 5 characters.
111:
112: =cut
113:
114: # ----------------------------------------------- So, are we invoked correctly?
115: # Two arguments or abort
116: if (@ARGV!=2) {
117: die 'usage: make_test_user.pl [USERNAME] [DOMAIN] '."\n".
118: '(and password through standard input)'."\n";
119: }
120: my ($username,$domain)=(@ARGV); shift @ARGV; shift @ARGV;
121: $username='ZXQTEST'.$username;
122: unless ($username=~/^\w+$/ and $username!~/\_/) {
123: die 'Username '.$username.' must consist only of alphanumeric characters'.
124: "\n";
125: }
126: unless ($domain=~/^\w+$/ and $domain!~/\_/) {
127: die 'Domain '.$domain.' must consist only of alphanumeric characters'.
128: "\n";
129: }
130:
131: my $passwd=<>; # read in password from standard input
132: chomp($passwd);
133:
134: if (length($passwd)<6 or length($passwd)>30) {
135: die 'Password is an unreasonable length.'."\n";
136: }
137: my $pbad=0;
138: foreach (split(//,$passwd)) {if ((ord($_)<32)||(ord($_)>126)){$pbad=1;}}
139: if ($pbad) {
140: die 'Password must consist of standard ASCII characters'."\n";
141: }
142:
143: # And does user already exist
144:
145: my $udpath=propath($domain,$username);
146: if (-d $udpath) {
147: print $username.' is already defined as a LON-CAPA user.'."\n";
148: print 'Cleaning up ...'."\n";
149: `rm -Rf $udpath`
150: if $udpath=~/^\/home\/httpd\/lonUsers\/$domain\/Z\/X\/Q\/ZXQTEST/;
151: # SAFETY: must check $udpath above because we are using rm -Rf!!!
152: }
153:
154: =pod
155:
156: =head1 MANUAL PROCEDURE
157:
158: There are 10 steps to a manual procedure.
159:
160: You need to decide on three pieces of information
161: to create a domain coordinator.
162:
163: * USERNAME (ZXQTESTkermit, ZXQTESTalbert, ZXQTESTjoe, etc)
164: * DOMAIN (should be the same as lonDefDomain in /etc/httpd/conf/access.conf)
165: * PASSWORD (don't tell me)
166:
167: The examples in these instructions will be based
168: on three example pieces of information:
169:
170: * USERNAME=ZXQTEST
171: * DOMAIN=103
172: * PASSWORD=sesame
173:
174: You will also need to know your "root" password
175: and your "www" password.
176:
177: =over 4
178:
179: =item 1.
180:
181: login as root on your Linux system
182: [prompt %] su
183:
184: =cut
185:
186: =item 3 (as root). enter in a password
187:
188: Command: [prompt %] passwd USERNAME
189: New UNIX password: PASSWORD
190: Retype new UNIX passwd: PASSWORD
191: Example: [prompt %] passwd dc103
192: New UNIX password: sesame
193: Retype new UNIX passwd: sesame
194:
195: =cut
196:
197: =pod
198:
199: =cut
200:
201: =pod
202:
203: =item 4. login as user=www
204:
205: Command: [prompt %] su www
206: Password: WWWPASSWORD
207:
208: =item 5. (as www). cd /home/httpd/lonUsers
209:
210: =item 6. (as www) Create user directory for your new user.
211:
212: Let U equal first letter of USERNAME
213: Let S equal second letter of USERNAME
214: Let E equal third letter of USERNAME
215: Command: [prompt %] install -d DOMAIN/U/S/E/USERNAME
216: Example: [prompt %] install -d 103/Z/X/Q/ZXQTEST
217:
218: =cut
219:
220: `install -o www -g www -d $udpath`;
221:
222: =pod
223:
224: =item 7. (as www) Enter the newly created user directory.
225:
226: Command: [prompt %] cd DOMAIN/U/S/E/USERNAME
227: Example: [prompt %] cd 103/Z/X/Q/ZXQTEST
228:
229: =item 8. (as www). Set your password mechanism to 'internal'
230:
231: Command: [prompt %] echo "internal:$epasswd" > passwd
232:
233: To determine the value of $epasswd, you should look at the
234: internals of this perl script, make_test_user.pl.
235:
236: =cut
237:
238: my $salt=time;
239: $salt=substr($salt,6,2);
240: my $epasswd=crypt($passwd,$salt);
241: open OUT, ">$udpath/passwd";
242: print OUT 'internal:'."$epasswd\n";
243: close OUT;
244: `chown www:www $udpath/passwd`;
245:
246: =pod
247:
248: =item 9. (as www). Make user to be an author:
249:
250: This will involve manual modification of roles.hist and roles.db.
251: Please refer to the internals of the make_test_user.pl perl
252: script.
253:
254: =cut
255:
256: use GDBM_File;
257: my %hash;
258: tie(%hash,'GDBM_File',"$udpath/roles.db",
259: &GDBM_WRCREAT,0640);
260:
261: $hash{'/'.$domain.'/_au'}='au_0_'.time;
262: open OUT, ">$udpath/roles.hist";
263: map {
264: print OUT $_.' : '.$hash{$_}."\n";
265: } keys %hash;
266: close OUT;
267:
268: untie %hash;
269: `chown www:www $udpath/roles.hist`;
270: `chown www:www $udpath/roles.db`;
271:
272: print "$username is now a test user (author)\n";
273: my $hostname=`hostname`; chomp $hostname;
274:
275: # ----------------------------------------------------------------- SUBROUTINES
276: sub propath {
277: my ($udom,$uname)=@_;
278: $udom=~s/\W//g;
279: $uname=~s/\W//g;
280: my $subdir=$uname.'__';
281: $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/;
282: my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname";
283: return $proname;
284: }
285:
286: =pod
287:
288: =head1 PREREQUISITES
289:
290: GDBM_File
291:
292: =head1 AUTHOR
293:
294: Scott Harrison, harris41@msu.edu
295:
296: =cut
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>