--- loncom/lond 2007/09/29 04:05:29 1.380.2.1 +++ loncom/lond 2007/09/12 20:29:13 1.381 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.380.2.1 2007/09/29 04:05:29 albertel Exp $ +# $Id: lond,v 1.381 2007/09/12 20:29:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -59,7 +59,7 @@ my $DEBUG = 0; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.380.2.1 $'; #' stupid emacs +my $VERSION='$Revision: 1.381 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -2095,37 +2095,6 @@ sub rename_user_file_handler { ®ister_handler("renameuserfile", \&rename_user_file_handler, 0,1,0); # -# Checks if the specified user has an active session on the server -# return ok if so, not_found if not -# -# Parameters: -# cmd - The request keyword that dispatched to tus. -# tail - The tail of the request (colon separated parameters). -# client - Filehandle open on the client. -# Return: -# 1. -sub user_has_session_handler { - my ($cmd, $tail, $client) = @_; - - my ($udom, $uname) = map { &unescape($_) } (split(/:/, $tail)); - - &logthis("Looking for $udom $uname"); - opendir(DIR,$perlvar{'lonIDsDir'}); - my $filename; - while ($filename=readdir(DIR)) { - last if ($filename=~/^\Q$uname\E_\d+_\Q$udom\E_/); - } - if ($filename) { - &Reply($client, "ok\n", "$cmd:$tail"); - } else { - &Failure($client, "not_found\n", "$cmd:$tail"); - } - return 1; - -} -®ister_handler("userhassession", \&user_has_session_handler, 0,1,0); - -# # Authenticate access to a user file by checking that the token the user's # passed also exists in their session file # @@ -4514,6 +4483,70 @@ sub get_institutional_defaults_handler { ®ister_handler("autoinstcodedefaults", \&get_institutional_defaults_handler,0,1,0); +sub get_institutional_user_rules { + my ($cmd, $tail, $client) = @_; + my $userinput = "$cmd:$tail"; + my $dom = &unescape($tail); + my (%rules_hash,@rules_order); + my $outcome; + eval { + local($SIG{__DIE__})='DEFAULT'; + $outcome = &localenroll::username_rules($dom,\%rules_hash,\@rules_order); + }; + if (!$@) { + if ($outcome eq 'ok') { + my $result; + foreach my $key (keys(%rules_hash)) { + $result .= &escape($key).'='.&Apache::lonnet::freeze_escape($rules_hash{$key}).'&'; + } + $result =~ s/\&$//; + $result .= ':'; + if (@rules_order > 0) { + foreach my $item (@rules_order) { + $result .= &escape($item).'&'; + } + } + $result =~ s/\&$//; + &Reply($client,$result."\n",$userinput); + } else { + &Reply($client,"error\n", $userinput); + } + } else { + &Failure($client,"unknown_cmd\n",$userinput); + } +} +®ister_handler("instuserrules",\&get_institutional_user_rules,0,1,0); + + +sub institutional_username_check { + my ($cmd, $tail, $client) = @_; + my $userinput = "$cmd:$tail"; + my %rulecheck; + my $outcome; + my ($udom,$uname,@rules) = split(/:/,$tail); + $udom = &unescape($udom); + $uname = &unescape($uname); + @rules = map {&unescape($_);} (@rules); + eval { + local($SIG{__DIE__})='DEFAULT'; + $outcome = &localenroll::username_check($udom,$uname,\@rules,\%rulecheck); + }; + if (!$@) { + if ($outcome eq 'ok') { + my $result=''; + foreach my $key (keys(%rulecheck)) { + $result.=&escape($key).'='.&Apache::lonnet::freeze_escape($rulecheck{$key}).'&'; + } + &Reply($client,$result."\n",$userinput); + } else { + &Reply($client,"error\n", $userinput); + } + } else { + &Failure($client,"unknown_cmd\n",$userinput); + } +} +®ister_handler("instrulecheck",\&institutional_username_check,0,1,0); + # Get domain specific conditions for import of student photographs to a course #