--- loncom/lond 2007/07/25 22:52:07 1.376 +++ loncom/lond 2007/09/29 04:05:29 1.380.2.1 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.376 2007/07/25 22:52:07 raeburn Exp $ +# $Id: lond,v 1.380.2.1 2007/09/29 04:05:29 albertel 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.376 $'; #' stupid emacs +my $VERSION='$Revision: 1.380.2.1 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -135,7 +135,7 @@ my @adderrors = ("ok", "lcuseradd Unable to make www member of users's group", "lcuseradd Unable to su to root", "lcuseradd Unable to set password", - "lcuseradd Usrname has invalid characters", + "lcuseradd Username has invalid characters", "lcuseradd Password has an invalid character", "lcuseradd User already exists", "lcuseradd Could not add user.", @@ -2095,6 +2095,37 @@ 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 # @@ -2187,13 +2218,13 @@ sub subscribe_handler { ®ister_handler("sub", \&subscribe_handler, 0, 1, 0); # -# Determine the version of a resource (?) Or is it return -# the top version of the resource? Not yet clear from the -# code in currentversion. +# Determine the latest version of a resource (it looks for the highest +# past version and then returns that +1) # # Parameters: # $cmd - The command that got us here. # $tail - Tail of the command (remaining parameters). +# (Should consist of an absolute path to a file) # $client - File descriptor connected to client. # Returns # 0 - Requested to exit, caller should shut down. @@ -4640,30 +4671,6 @@ sub inst_usertypes_handler { } ®ister_handler("inst_usertypes", \&inst_usertypes_handler, 0, 1, 0); -sub inst_dirsrch_handler { - my ($cmd, $tail, $client) = @_; - my ($domain,$srchby,$srchterm,$srchtype) = split(/:/, $tail); - $srchby = &unescape($srchby); - $srchterm = &unescape($srchterm); - my $userinput = $cmd.":".$tail; # For logging purposes. - my (%instusers,%instids,$result,$res); - eval { - local($SIG{__DIE__})='DEFAULT'; - $result=&localenroll::get_userinfo($domain,undef,undef,\%instusers,\%instids,undef,$srchby,$srchterm,$srchtype); - }; - if ($result eq 'ok') { - if (keys(%instusers) > 0) { - foreach my $key (keys(%instusers)) { - my $usrstr = &Apache::lonnet::hash2str(%{$instusers{$key}}); - $res.=&escape($key).'='.&escape($usrstr).'&'; - } - } - $res=~s/\&$//; - } - &Reply($client, "$res\n", $userinput); -} -®ister_handler("instdirsrch", \&inst_dirsrch_handler, 0, 1, 0); - # mkpath makes all directories for a file, expects an absolute path with a # file or a trailing / if just a dir is passed # returns 1 on success 0 on failure @@ -5794,6 +5801,10 @@ sub validate_user { $password, $credentials); $validated = ($krbreturn == 1); + if (!$validated) { + &logthis('krb5: '.$user.', '.$contentpwd.', '. + &Authen::Krb5::error()); + } } else { $validated = 0; }