[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
www
lon-capa-cvs@mail.lon-capa.org
Sat, 22 Mar 2003 02:13:08 -0000
www Fri Mar 21 21:13:08 2003 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
Steps toward bug #1327
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.343 loncom/lonnet/perl/lonnet.pm:1.344
--- loncom/lonnet/perl/lonnet.pm:1.343 Wed Mar 19 16:23:03 2003
+++ loncom/lonnet/perl/lonnet.pm Fri Mar 21 21:13:08 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.343 2003/03/19 21:23:03 www Exp $
+# $Id: lonnet.pm,v 1.344 2003/03/22 02:13:08 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -586,6 +586,63 @@
foreach (keys %servers) {
&critical('idput:'.$udom.':'.$servers{$_},$_);
}
+}
+
+# --------------------------------------------------- Assign a key to a student
+
+sub assign_access_key {
+ my ($ckey,$cdom,$cnum,$udom,$uname)=@_;
+ $cdom=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'} unless (defined($cdom));
+ $cnum=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'} unless (defined($cnum));
+ $udom=$ENV{'user.name'} unless (defined($udom));
+ $uname=$ENV{'user.domain'} unless (defined($uname));
+}
+
+# ------------------------------------------------------ Generate a set of keys
+
+sub generate_access_keys {
+ my ($number,$cdom,$cnum)=@_;
+ $cdom=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'} unless (defined($cdom));
+ $cnum=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'} unless (defined($cnum));
+ unless (($cdom) && ($cnum)) { return 0; }
+ if ($number>10000) { return 0; }
+ sleep(2); # make sure don't get same seed twice
+ srand(time()^($$+($$<<15))); # from "Programming Perl"
+ my $total=0;
+ for (my $i=1;$i<=$number;$i++) {
+ my $newkey=sprintf("%lx",int(100000*rand)).'-'.
+ sprintf("%lx",int(100000*rand)).'-'.
+ sprintf("%lx",int(100000*rand));
+ $newkey=~s/1/g/g; # folks mix up 1 and l
+ $newkey=~s/0/h/g; # and also 0 and O
+ my %existing=&get('accesskeys',[$newkey],$cdom,$cnum);
+ if ($existing{$newkey}) {
+ $i--;
+ } else {
+ if (&put('accesskeys',{ $newkey => time() },$cdom,$cnum) eq 'ok') {
+ $total++;
+ }
+ }
+ }
+ &log($ENV{'user.domain'},$ENV{'user.name'},$ENV{'user.home'},
+ 'Generated '.$total.' keys for '.$cnum.' at '.$cdom);
+ return $total;
+}
+
+# ------------------------------------------------------- Validate an accesskey
+
+sub validate_access_key {
+ my ($ckey,$cdom,$cnum,$udom,$uname)=@_;
+ $cdom=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'} unless (defined($cdom));
+ $cnum=
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'} unless (defined($cnum));
+ $udom=$ENV{'user.name'} unless (defined($udom));
+ $uname=$ENV{'user.domain'} unless (defined($uname));
}
# ------------------------------------- Find the section of student in a course