Import of revision 19971210+ master
authorceo <ceo>
Wed, 10 Dec 1997 05:00:00 +0000 (00:00 -0500)
committerceo <ceo>
Wed, 10 Dec 1997 05:00:00 +0000 (00:00 -0500)
[This is presumably the last version used -- Michael Spang]

admin.pl
ceo
database.pl
delterm.pl
isbn.pl
lib_sys.pl
libfmt.pl
main.pl
member.pl
misc.pl
offstaff-reset-ceo-passwd [new file with mode: 0755]

index 396470e..012dd96 100644 (file)
--- a/admin.pl
+++ b/admin.pl
@@ -251,7 +251,7 @@ sub dopwchange
 
 sub doliblog
 {
-    &DisplayLibraryLog;
+    &DisplayLibLog;
 }
 
 sub dosyncgopher
diff --git a/ceo b/ceo
index 3100a63..ac68b88 100755 (executable)
--- a/ceo
+++ b/ceo
@@ -43,7 +43,7 @@ sub Configure
     $EDITOR = "/u/ceo/bin/rvi";
     $HOME = "/u/ceo";
     $PAGER = "rless -MCqe";
-    $PAGER = "more -cw" if $ENV{'CALUM'} == 1;
+    $PAGER = "less -cw" if $ENV{'CALUM'} == 1;
 
     ## Programs we use
     $HOSTNAME = "/usr/ucb/hostname";
@@ -74,7 +74,7 @@ sub Configure
 
     chdir $CEODIR;
     $CSCDISKHOME = "/u/csc_disk";
-    $GOPHERDIR = "$CSCDISKHOME/Gopher/office_info";
+    $GOPHERDIR = "/opt/gopher/data/office_info";
     $CEOBACKUPDIR = "$CEODIR/backup";
     $QUOTATODO = "$CSCDISKHOME/records/to/do";
     $QUOTATODOOLD = "$CSCDISKHOME/records/to/do.old";
@@ -116,6 +116,8 @@ sub Configure
                                                 "inside_telnet,news_post,option_save,outside_ftp,".
                                                 "outside_news,outside_rlogin,outside_telnet,".
                                                 "print,shell,suspend";
+    ## The initial page for the public lynx to start with
+       $LYNX_STARTPAGE = "http://www.csclub.uwaterloo.ca/u/offman/";
 
     ## Costs
     $MEMBERFEE = '2.00';
index 4758a78..0b7e17e 100644 (file)
@@ -23,4 +23,41 @@ sub dbmuntie
        untie(%$href) || die;
 }
 
+sub open_memdb
+{
+       local($filename,$mode) = @_;
+
+       if ($member_db_tied) {
+               untie(%MEMBER_DB);
+       }
+       tie(%MEMBER_DB, DB_File, $filename, $mode, 0640, $DB_HASH) || return 0;
+       $member_db_tied = 1;
+}
+
+sub close_memdb
+{
+       untie(%MEMBER_DB);
+       $member_db_tied = 0;
+}
+
+sub get_member
+{      
+       my($memnum) = $_[0];
+
+       return $MEMBER_DB{$memnum} unless defined $MEMBER_DB{$memnum};
+
+       my(@fields) = split(/;/, $MEMBER_DB{$memnum});
+       my %memrec = (
+               name => $fields[0],
+               sid => $fields[1],
+               program => $fields[2],
+               phone => $fields[3],
+               userid => $fields[4],
+               password => $fields[5],
+               date => $fields[6],
+               terms => [ split(/,/, $fields[7]) ]
+       );
+       return %memrec;
+}
+
 1;
index e077bb2..231d5e7 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 
-# $Id$
-# $Log$
+# $Id: delterm.pl,v 1.1 1996/11/21 19:01:32 nborisov Exp $
+# $Log: delterm.pl,v $
 # Revision 1.1  1996/11/21 19:01:32  nborisov
 # Initial revision
 #
diff --git a/isbn.pl b/isbn.pl
index 4f2d200..ddca87f 100644 (file)
--- a/isbn.pl
+++ b/isbn.pl
@@ -1,5 +1,5 @@
 #
-# $Id$
+# $Id: isbn.pl,v 1.1 1996/05/17 22:07:42 nborisov Exp $
 # isbn.pl - a small function to calculate an ISBN checksum
 #
 # Author: Nikita Borisov
index 67adcfd..2b4bbfc 100644 (file)
@@ -9,7 +9,7 @@
 #                                                                      replace them with 'tie' sometime
 #                                                                      soon.
 # 96/10/24             Nikita Borisov          'soon' came sooner than expected
-# 
+# 97/07/04             Dax Hutcheon            Fixed the Edit book list menu
 
 require "/u/ceo/ceo/isbn.pl";
 use NDBM_File;
@@ -527,11 +527,14 @@ sub doeditdb
                }
        }
 
-       my( $choice ) = 0;
+       $edit_choice = "not done";
 
-       @opts = ('eeasy','sscary','ldone');
-       while( $choice ne "done" ){
-               $choice = &domenu(<<EOM,@opts);
+       while( $edit_choice ne "done" ){
+               ## This is necessary because domenu eats the first character
+               ## of the option selected. Who did that, and when are they
+               ## available for a severe beating?
+           @edit_opts = ('eeasy','sscary','ldone');
+               $edit_choice = &domenu(<<EOM,@edit_opts);
 Choose an option:
   (E)asy book list edit
   (S)cary edit (things office minions were not meant to know)
@@ -540,9 +543,9 @@ Choose an option:
 (E,S,L): 
 EOM
                
-               if( $choice eq "scary" ){
+               if( $edit_choice eq "scary" ){
                        &scary_edit;
-               } elsif( $choice eq "easy" ){
+               } elsif( $edit_choice eq "easy" ){
                        &easy_edit;
                }
        }
index 38b47cf..2ad73ed 100644 (file)
--- a/libfmt.pl
+++ b/libfmt.pl
@@ -7,22 +7,22 @@
 
 format SCRLIBLOG_TOP =
 
- #           Name          Dir     Date                    Title
---- ---------------------- --- ------------ ------------------------------------
 #           Name          Dir     Date                    Title
+---- ---------------------- --- ------------ -----------------------------------
 .
 
 format SCRLIBLOG =
-@>> @<<<<<<<<<<<<<<<<<<<<< @<< @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+@>>> @<<<<<<<<<<<<<<<<<<<<< @<< @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 $lnum, $lname,            $ldir, $ldate,            $lbtitle
 .
 
 format OUTSTAND_TOP =
 
- #           Name                Date                     Title
---- ---------------------- ----------------- --------------------------------
 #           Name                Date                     Title
+---- ---------------------- ----------------- --------------------------------
 .
 format OUTSTAND =
-@>> @<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+@>>> @<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 $onum, $oname,             $odate,              $obtitle
 .
 
diff --git a/main.pl b/main.pl
index 07a4d37..6e69392 100644 (file)
--- a/main.pl
+++ b/main.pl
@@ -65,11 +65,12 @@ EOM
 
 sub dowww
 {
-       ##$lterm = $ENV{'TERM'};
-       ##$lterm = "vt100" if $lterm eq "vt240";
-       ##$lterm = "wy75" if $lterm eq "wy75d";
-       print "Option disabled\n";
-       ## system("lynx -restrictions=$LYNX_RESTRICTIONS");
+       $lterm = $ENV{'TERM'};
+       $lterm = "vt100" if $lterm eq "vt240";
+       $lterm = "wy75" if $lterm eq "wy75d";
+       ## print "Option disabled\n";
+       ## But why? - ddhutche
+       system("lynx -restrictions=$LYNX_RESTRICTIONS $LYNX_STARTPAGE");
 }
 
 sub dobd
index aaa06d1..c102e03 100644 (file)
--- a/member.pl
+++ b/member.pl
 #                                   a password
 # 95/06/01             Nikita Borisov          Added a "print who I am" for above routine
 # 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
+# 97/12/10     Michael Farebrother     Added links to common routines
+#                                      used when creating new members
+#                                      (Buy Quota, Create Account, PwChange)
+
 #
 # 
 
@@ -34,13 +38,16 @@ Choose an option:
   Buy membership for old member (W)ithout password
   (T)his term's members
   (A)ll members on file
+  (B)uy quota for $useCAPTERM term (also on Quota menu)
+  (C)reate csclub account (also on Admin menu)
+  Csclub (P)assword change (also on Admin menu)
   (M)ain menu
 
-(N,O,W,T,A,M): 
+(N,O,W,T,A,B,C,P,M): 
 EOM
 
     @opts = ('ndonewmember','odooldmember','wdowopasswd','tdotermmem',
-       'adoallmem', 'mmainmenu');
+       'adoallmem','bdobuyquota','cdoaccount','pdopwchange','mmainmenu');
     $choice = &domenu($menu, @opts);
     return $choice;
 }
diff --git a/misc.pl b/misc.pl
index 61ff3ce..c899b19 100644 (file)
--- a/misc.pl
+++ b/misc.pl
@@ -93,7 +93,6 @@ sub domenu
     while(1)
     {
         print $domenu_menu;
-        print "#" if $ENV{'CALUM'} == 1;
 #        alarm($sleeptime);
         $domenu_choice = <STDIN>;
         $domenu_choice = substr($domenu_choice,0,1);
diff --git a/offstaff-reset-ceo-passwd b/offstaff-reset-ceo-passwd
new file mode 100755 (executable)
index 0000000..4534a83
--- /dev/null
@@ -0,0 +1,164 @@
+#!/usr/bin/perl
+
+# hacked up by cdrovers, Sept, 1996
+# hacked further by nborisov, Oct. 1996
+# (mainly to adjust for new dbm)
+
+require '/u/ceo/ceo/database.pl';
+require 'ctime.pl';
+
+$HOME = "/u/ceo";
+$CEODIR = "$HOME/ceo";
+$MEMBERDB = "$CEODIR/memdb.new";
+$OFFFILE = "$HOME/OSlist";
+$LOGFILE = "$CEODIR/offstaff_log";
+
+chdir $CEODIR || die $!;
+
+$sockaddr = 'S n a4 x8';
+$AF_INET = 2;
+$SOCK_STREAM = 2;
+$| = 1;
+
+## Find out who's connected to us
+$remotesock = getpeername(STDIN);
+die $! unless defined $remotesock;
+($remotefamily, $remoteport, $remoteaddr) = unpack($sockaddr, $remotesock);
+
+## And who are we?
+$thissock = getsockname(STDIN);
+die $! unless defined $thissock;
+$thisport = (unpack($sockaddr, $thissock))[1];
+
+## Are they allowed to connect to us?
+@ipaddr = unpack('CCCC', $remoteaddr);
+exit unless ($ipaddr[0] == 129 && $ipaddr[1] == 97);
+
+## They're OK.  Show the header.
+print <<EOM;
+
+*** CEO Office Staff password reset ***
+This port is used to reset a user's CEO password.
+EOM
+print "Are you sure you want to continue? ";
+$reply = <STDIN>;
+exit unless $reply =~ /^[yY]/;
+
+$proto = (getprotobyname('tcp'))[2];
+$port = (getservbyname('ident', 'tcp'))[2];
+$addr = (gethostbyname($hostname))[4];
+
+$ident = pack($sockaddr, $AF_INET, $port, $remoteaddr);
+
+## Make the ident socket
+socket(IS, $AF_INET, $SOCK_STREAM, $proto) || die $!;
+connect(IS, $ident) || do
+{
+       print <<EOM;
+
+I am unable to connect to the ident server on your host, and so I cannot
+determine your userid.  Please try again from a host running ident
+(almost all MFCF machines included).  If you cannot, please email ceo\@csclub.
+EOM
+       exit;
+};
+select(IS); $| = 1; select(STDOUT);
+
+## Ask who that is
+print IS "$remoteport,$thisport\n";
+$reply = <IS>;
+close(IS);
+
+if ($reply =~ /:\s*UNIX\s*:\s*(\S{1,8})/)
+{
+       $username = $1;
+}
+else
+{
+       print <<EOM;
+
+I am unable to determine your userid.  Your ident server may not be
+functioning properly.  Please contact your sysadmin for help.  To reset
+your password, email ceo\@csclub.
+EOM
+       exit;
+}
+
+## Ask for the member number
+print "\nPlease enter the member number to reset: ";
+$reply = <STDIN>;
+($memnum) = $reply =~ /^(\d+)/;
+if ($memnum == 0)
+{
+       print <<EOM;
+
+No member number entered - aborting.
+EOM
+       exit;
+}
+
+## Verify the user
+#dbmopen(MEM, $MEMBERDB, 0600) || do
+#eval { %MEM=&fakedbmopen($MEMBERDB) } || do
+eval { dbmtie($MEMBERDB,\%MEM) } || do
+{
+       print <<EOM;
+
+AAAHHHHH!!!!!  I can't open the member database!!!
+EOM
+       exit;
+};
+
+# check to see if this person is allowed to do this
+open(OFF,"<$OFFFILE") || die "Could not open $filename, $!";
+$offlist=<OFF>;
+close(OFF);
+@os = split(/[ \t\n]+/,$offlist);
+$ok = 0;
+foreach $num(@os) { 
+       ($osnum) = $num =~ /^(\d+)/;    
+       @fields = split(/;/,$MEM{$osnum});
+       $fields[4] =~ s/^(.{8}).*/\1/;
+       if ($fields[4] eq $username) {
+               $ok = 1;
+       }
+}
+
+open(LOG,">>$LOGFILE") || die "Could not open $filename, $!";
+
+$date = ctime(time);
+$date =~ s/\n//;
+
+if ($ok != 1) {
+       print "Sorry. You're not office staff.\n";
+       print LOG "$date:$username failed to reset CEO password for $memnum\n";
+       close (LOG);
+       exit;
+}
+
+@fields = split(/;/,$MEM{$memnum});
+$memuser = $fields[4];
+$memuser =~ s/@.*//;
+$memuser =~ y/A-Z/a-z/;
+$memuser =~ s/(.{8}).*/\1/;
+
+print "Changing the CEO password for $memuser. Continue?";
+$reply = <STDIN>;
+exit unless $reply =~ /^[yY]/;
+
+print LOG "$date:$username reset the CEO password for $memnum ($memuser)\n"; 
+
+## Reset the password
+$fields[5] = '';
+
+$MEM{$memnum} = join(';', @fields);
+
+dbmuntie(\%MEM);
+
+print <<EOM;
+
+The password has been reset.  
+
+Please get the user to go to the CSC and choose another.
+
+EOM