--- 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 {
 &register_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;
-
-}
-&register_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 {
 &register_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);
+    }
+}
+&register_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);
+    }
+}
+&register_handler("instrulecheck",\&institutional_username_check,0,1,0);
+
 
 # Get domain specific conditions for import of student photographs to a course
 #