Import of revision 19971210+
[mspang/plceo1.git] / offstaff-reset-ceo-passwd
1 #!/usr/bin/perl
2
3 # hacked up by cdrovers, Sept, 1996
4 # hacked further by nborisov, Oct. 1996
5 # (mainly to adjust for new dbm)
6
7 require '/u/ceo/ceo/database.pl';
8 require 'ctime.pl';
9
10 $HOME = "/u/ceo";
11 $CEODIR = "$HOME/ceo";
12 $MEMBERDB = "$CEODIR/memdb.new";
13 $OFFFILE = "$HOME/OSlist";
14 $LOGFILE = "$CEODIR/offstaff_log";
15
16 chdir $CEODIR || die $!;
17
18 $sockaddr = 'S n a4 x8';
19 $AF_INET = 2;
20 $SOCK_STREAM = 2;
21 $| = 1;
22
23 ## Find out who's connected to us
24 $remotesock = getpeername(STDIN);
25 die $! unless defined $remotesock;
26 ($remotefamily, $remoteport, $remoteaddr) = unpack($sockaddr, $remotesock);
27
28 ## And who are we?
29 $thissock = getsockname(STDIN);
30 die $! unless defined $thissock;
31 $thisport = (unpack($sockaddr, $thissock))[1];
32
33 ## Are they allowed to connect to us?
34 @ipaddr = unpack('CCCC', $remoteaddr);
35 exit unless ($ipaddr[0] == 129 && $ipaddr[1] == 97);
36
37 ## They're OK.  Show the header.
38 print <<EOM;
39
40 *** CEO Office Staff password reset ***
41 This port is used to reset a user's CEO password.
42 EOM
43 print "Are you sure you want to continue? ";
44 $reply = <STDIN>;
45 exit unless $reply =~ /^[yY]/;
46
47 $proto = (getprotobyname('tcp'))[2];
48 $port = (getservbyname('ident', 'tcp'))[2];
49 $addr = (gethostbyname($hostname))[4];
50
51 $ident = pack($sockaddr, $AF_INET, $port, $remoteaddr);
52
53 ## Make the ident socket
54 socket(IS, $AF_INET, $SOCK_STREAM, $proto) || die $!;
55 connect(IS, $ident) || do
56 {
57         print <<EOM;
58
59 I am unable to connect to the ident server on your host, and so I cannot
60 determine your userid.  Please try again from a host running ident
61 (almost all MFCF machines included).  If you cannot, please email ceo\@csclub.
62 EOM
63         exit;
64 };
65 select(IS); $| = 1; select(STDOUT);
66
67 ## Ask who that is
68 print IS "$remoteport,$thisport\n";
69 $reply = <IS>;
70 close(IS);
71
72 if ($reply =~ /:\s*UNIX\s*:\s*(\S{1,8})/)
73 {
74         $username = $1;
75 }
76 else
77 {
78         print <<EOM;
79
80 I am unable to determine your userid.  Your ident server may not be
81 functioning properly.  Please contact your sysadmin for help.  To reset
82 your password, email ceo\@csclub.
83 EOM
84         exit;
85 }
86
87 ## Ask for the member number
88 print "\nPlease enter the member number to reset: ";
89 $reply = <STDIN>;
90 ($memnum) = $reply =~ /^(\d+)/;
91 if ($memnum == 0)
92 {
93         print <<EOM;
94
95 No member number entered - aborting.
96 EOM
97         exit;
98 }
99
100 ## Verify the user
101 #dbmopen(MEM, $MEMBERDB, 0600) || do
102 #eval { %MEM=&fakedbmopen($MEMBERDB) } || do
103 eval { dbmtie($MEMBERDB,\%MEM) } || do
104 {
105         print <<EOM;
106
107 AAAHHHHH!!!!!  I can't open the member database!!!
108 EOM
109         exit;
110 };
111
112 # check to see if this person is allowed to do this
113 open(OFF,"<$OFFFILE") || die "Could not open $filename, $!";
114 $offlist=<OFF>;
115 close(OFF);
116 @os = split(/[ \t\n]+/,$offlist);
117 $ok = 0;
118 foreach $num(@os) { 
119         ($osnum) = $num =~ /^(\d+)/;    
120         @fields = split(/;/,$MEM{$osnum});
121         $fields[4] =~ s/^(.{8}).*/\1/;
122         if ($fields[4] eq $username) {
123                 $ok = 1;
124         }
125 }
126
127 open(LOG,">>$LOGFILE") || die "Could not open $filename, $!";
128
129 $date = ctime(time);
130 $date =~ s/\n//;
131
132 if ($ok != 1) {
133         print "Sorry. You're not office staff.\n";
134         print LOG "$date:$username failed to reset CEO password for $memnum\n";
135         close (LOG);
136         exit;
137 }
138
139 @fields = split(/;/,$MEM{$memnum});
140 $memuser = $fields[4];
141 $memuser =~ s/@.*//;
142 $memuser =~ y/A-Z/a-z/;
143 $memuser =~ s/(.{8}).*/\1/;
144
145 print "Changing the CEO password for $memuser. Continue?";
146 $reply = <STDIN>;
147 exit unless $reply =~ /^[yY]/;
148
149 print LOG "$date:$username reset the CEO password for $memnum ($memuser)\n"; 
150
151 ## Reset the password
152 $fields[5] = '';
153
154 $MEM{$memnum} = join(';', @fields);
155
156 dbmuntie(\%MEM);
157
158 print <<EOM;
159
160 The password has been reset.  
161
162 Please get the user to go to the CSC and choose another.
163
164 EOM