Annotation of loncom/build/weblayer_test/test_login.pl, revision 1.2
1.1 harris41 1: #!/usr/bin/perl
2:
3: =pod
4:
5: =head1 NAME
6:
1.2 ! harris41 7: B<test_login.pl> - Attempt to login given a user name and password and assuming that /bin/hostname is the appropriate url.
1.1 harris41 8:
9: =cut
10:
11: # The LearningOnline Network
12: # test_login.pl - LON TCP-MySQL-Server Daemon for handling database requests.
13: #
1.2 ! harris41 14: # $Id: test_login.pl,v 1.1 2002/03/04 06:46:17 harris41 Exp $
1.1 harris41 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: # This is a standalone script from other parts of the LON-CAPA code.
42: # (It is important that test scripts be reasonably independent from
43: # the rest of the system so that we KNOW what dependencies they are
44: # testing.)
45:
46: =pod
47:
48: =head1 SYNOPSIS
49:
50: B<perl test_login.pl>
51:
52: The first value in standard input is the user name to login with.
53: The second value in standard input is the password.
54:
55: =head1 DESCRIPTION
56:
57: A number of things are tested for.
58:
59: =over 4
60:
61: =item *
62:
63: Is there an opening web page?
64:
65: =item *
66:
67: Is there a login page? If so, grab relevant data to calculate
68: DES crypted password. Then, simulate a form submit to authentication
69: handler.
70:
71: =item *
72:
73: Is there an authentication handler?
74: Is the form submission successful to the authentication handler?
75:
76: =back
77:
78: The answer to all the above questions on a working system
79: (assuming that the user name and password are correct)
80: should be "yes".
81:
82: =cut
83:
84: require LWP;
85:
86: use URI;
87: use HTTP::Request::Common;
88: use Crypt::DES;
89:
90: my $uname=<>; chomp $uname;
91: my $passwd=<>; chomp $passwd;
92: my $hostname=`hostname`; chomp $hostname;
93:
94: my $ua = LWP::UserAgent->new();
95: my $method='GET';
96: my $request = HTTP::Request->new($method);
97: my $url = URI->new('http://'.$hostname);
98:
99: $request->url($url);
100: my $response=$ua->request($request);
101:
102: unless ($response->is_success) {
103: print "**** ERROR **** Cannot reach opening web page http://$hostname\n";
104: exit 1;
105: }
106:
107: $method='GET';
108: $url = URI->new('http://'.$hostname.'/adm/login');
109: $request->url($url);
110: $response=$ua->request($request);
111: unless ($response->is_success) {
112: print "**** ERROR **** Cannot reach login web page http://$hostname".
113: "/adm/login\n";
114: exit 1;
115: }
116:
117: my $content=$response->content;
118: my $logtoken;
119: if ($content=~/logtoken value=\"([^\"]*)\"/) {
120: $logtoken=$1;
121: }
122: my $udom;
1.2 ! harris41 123: if ($content=~/input type=\"text\" name=\"udom\".*value\=(\S+)/) {
1.1 harris41 124: $udom=$1;
125: }
126: my $serverid;
127: if ($content=~/name\=serverid value\=\"([^\"]+)\"/) {
128: $serverid=$1;
129: }
130: my $lextkey;
1.2 ! harris41 131: if ($content=~/name\=\"lextkey\" value\=\"([^\"]+)\"/) {
1.1 harris41 132: $lextkey=$1;
133: }
134: my $uextkey;
1.2 ! harris41 135: if ($content=~/name\=\"uextkey\" value\=\"([^\"]+)\"/) {
1.1 harris41 136: $uextkey=$1;
137: }
138:
139: print "Trying to log in with test user...\n";
140: print "Logtoken: $logtoken\n";
141: print "Udom: $udom\n";
142: print "Serverid: $serverid\n";
143: my $upass;
144: my $cipher;
145: #print "Lextkey: $lextkey\n";
146: #print "Uextkey: $uextkey\n";
147: my $ukey=sprintf("%lx",$uextkey);
148: my $lkey=sprintf("%lx",$lextkey);
149: my $key=$ukey.$lkey;
150: print "KEY: $key\n";
151: my $keybin=pack("H16",$key,0,16);
152: if ($Crypt::DES::VERSION>=2.03) {
153: $cipher=new Crypt::DES $keybin;
154: }
155: else {
156: $cipher=new DES $keybin;
157: }
158: my $len=length($passwd);
159: $passwd.=' 'x(16-$len);
160: my $p1=substr($passwd,0,7);
161: my $p2=substr($passwd,7,8);
162: my $ciphertext=$cipher->encrypt(chr($len).$p1);
163: my $ciphertext2=$cipher->encrypt($p2);
164: my $upciphertext=unpack("H16",$ciphertext);
165: $upciphertext.=unpack("H16",$ciphertext2);
166: $upass=$upciphertext;
167: print "Upass: $upass\n";
168: # TEST CODE FOR DECRYPTION
169: #my $upass2=$cipher->decrypt(unpack("a8",pack("H16",$upciphertext,0,16)));
170: #$upass2.=$cipher->decrypt(unpack("a8",pack("H16",substr($upciphertext,16,16))));
171: #my $Ord=ord(substr($upass2,0,1));
172: #print "Ord: $Ord\n";
173: #$upass2=substr($upass2,1,ord(substr($upass2,0,1)));
174: #print "Upass2: [$upass2]\n";
175:
176: $response=$ua->request(POST 'http://'.$hostname.'/adm/authenticate',
177: [
178: logtoken => $logtoken,
179: serverid => $serverid,
180: uname => $uname,
181: upass => $upass,
182: udom => $udom,
183: ]
184: );
185: unless ($response->is_success) {
186: print "**** ERROR **** Cannot reach authenticating page http://$hostname".
187: "/adm/authenticate\n";
188: exit 1;
189: }
190: my $rstring=$response->content;
191: unless ($rstring=~/Successful Login/) {
192: print "**** ERROR **** Logging in is not working (SOMETHING IS WRONG!)\n";
193: print "* HINT * Are your perl modules up to date?\n";
194: print "* HINT * Are lonc and lond running on the system?\n";
195: print "* HINT * Did you look at /home/httpd/perl/logs/lonc.log?\n";
196: print "* HINT * Did you look at /home/httpd/perl/logs/lond.log?\n";
197: exit 1;
198: }
199: else {
200: print "Success! Can login with test user.\n";
201: }
202:
203: =pod
204:
205: =head1 PREREQUISITES
206:
207: LWP
208: URI
209: HTTP::Request::Common
210: Crypt::DES
211:
212: =head1 AUTHOR
213:
214: Scott Harrison, harris41@msu.edu
215:
216: =cut
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>