--- loncom/lonnet/perl/lonnet.pm 2000/12/02 12:41:48 1.75 +++ loncom/lonnet/perl/lonnet.pm 2000/12/06 19:58:31 1.76 @@ -45,7 +45,8 @@ # EXT(name) : value of a variable # symblist(map,hash) : Updates symbolic storage links # symbread([filename]) : returns the data handle (filename optional) -# rndseed() : returns a random seed +# rndseed() : returns a random seed +# receipt() : returns a receipt to be given out to users # getfile(filename) : returns the contents of filename, or a -1 if it can't # be found, replicates and subscribes to the file # filelocation(dir,file) : returns a farily clean absolute reference to file @@ -89,7 +90,7 @@ use Apache::File; use LWP::UserAgent(); use HTTP::Headers; use vars -qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp %fe %fd $readit %metacache); +qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp %fe %fd $readit %metacache $unique); use IO::Socket; use GDBM_File; use Apache::Constants qw(:common :http); @@ -383,7 +384,7 @@ sub idget { $idlist=~tr/A-Z/a-z/; my $reply=&reply("idget:$udom:".$idlist,$tryserver); my @answer=(); - if ($reply ne 'con_lost') { + if (($reply ne 'con_lost') && ($reply!~/^error\:/)) { @answer=split(/\&/,$reply); } ; my $i; @@ -1632,6 +1633,27 @@ sub rndseed { .$symbchck); } +sub ireceipt { + my ($funame,$fudom,$fucourseid,$fusymb)=@_; + my $cuname=unpack("%32C*",$funame); + my $cudom=unpack("%32C*",$fudom); + my $cucourseid=unpack("%32C*",$fucourseid); + my $cusymb=unpack("%32C*",$fusymb); + my $cunique=unpack("%32C*",$unique); + return unpack("%32C*",$perlvar{'lonHostID'}).'-'. + ($cunique%$cuname+ + $cunique%$cudom+ + $cusymb%$cuname+ + $cusymb%$cudom+ + $cucourseid%$cuname+ + $cucourseid%$cudom); +} + +sub receipt { + return &ireceipt($ENV{'user.name'},$ENV{'user.domain'}, + $ENV{'request.course.id'},&symbread()); +} + # ------------------------------------------------------------ Serves up a file # returns either the contents of the file or a -1 sub getfile { @@ -1778,6 +1800,24 @@ if ($readit ne 'done') { } } +# --------------------------------------------------- Get CPU data as unique ID +{ + my @contents; + { + my $fh=Apache::File->new('/proc/cpuinfo'); + @contents=<$fh>; + } + $unique=''; + map { + my ($name,$value)=split(/\s*\:\s*/,$_); + if (($name eq 'vendor_id') || ($name=~/^model/) || + ($name=~/^cpu/) || ($name eq 'stepping')) { + $unique.=$value; + } + } @contents; + $unique=~s/\W//g; +} + %metacache=(); $readit='done';