--- loncom/lond 2022/02/25 09:38:47 1.574 +++ loncom/lond 2022/02/27 01:43:13 1.575 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.574 2022/02/25 09:38:47 raeburn Exp $ +# $Id: lond,v 1.575 2022/02/27 01:43:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -65,7 +65,7 @@ my $DEBUG = 0; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.574 $'; #' stupid emacs +my $VERSION='$Revision: 1.575 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -259,6 +259,7 @@ my %trust = ( instidrules => {remote => 1, domroles => 1,}, instrulecheck => {remote => 1, enroll => 1, reqcrs => 1, domroles => 1}, instselfcreatecheck => {institutiononly => 1}, + instunamemapcheck => {remote => 1,}, instuserrules => {remote => 1, enroll => 1, reqcrs => 1, domroles => 1}, keys => {remote => 1,}, load => {anywhere => 1}, @@ -312,6 +313,7 @@ my %trust = ( tmpget => {institutiononly => 1}, tmpput => {remote => 1, othcoau => 1}, tokenauthuserfile => {anywhere => 1}, + unamemaprules => {remote => 1,}, unsub => {content => 1,}, update => {shared => 1}, updatebalcookie => {institutiononly => 1}, @@ -2655,6 +2657,36 @@ sub update_passwd_history { return; } +sub inst_unamemap_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::unamemap_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,$userinput); + } else { + &Reply($client,"error\n", $userinput); + } + } else { + &Failure($client,"unknown_cmd\n",$userinput); + } +} +®ister_handler("instunamemapcheck",\&inst_unamemap_check,0,1,0); + + # # Determines if this is the home server for a user. The home server # for a user will have his/her lon-capa passwd file. Therefore all we need @@ -6806,6 +6838,39 @@ sub get_institutional_selfcreate_rules { } ®ister_handler("instemailrules",\&get_institutional_selfcreate_rules,0,1,0); +sub get_unamemap_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::unamemap_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,$userinput); + } else { + &Reply($client,"error\n", $userinput); + } + } else { + &Failure($client,"unknown_cmd\n",$userinput); + } +} +®ister_handler("unamemaprules",\&get_unamemap_rules,0,1,0); sub institutional_username_check { my ($cmd, $tail, $client) = @_; @@ -8390,7 +8455,7 @@ sub validate_user { # # Don't attempt authentication for username and password supplied # for user without an account if uername contains @ to avoid - # call to &Authen::Krb5::parse_name() which will result in con_lost + # call to &Authen::Krb5::parse_name() which will result in con_lost # unless ($user =~ /\@/) { $howpwd = $domdefaults{'auth_def'};