--- loncom/lonnet/perl/lonnet.pm 2009/08/16 21:49:32 1.1018 +++ loncom/lonnet/perl/lonnet.pm 2009/08/24 20:08:40 1.1023 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1018 2009/08/16 21:49:32 raeburn Exp $ +# $Id: lonnet.pm,v 1.1023 2009/08/24 20:08:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -958,44 +958,21 @@ sub idput { } } -# ------------------------------------------------ dump from domain db files - +# ------------------------------dump from db file owned by domainconfig user sub dump_dom { - my ($namespace,$udom,$uhome,$regexp,$range)=@_; + my ($namespace,$udom,$regexp,$range)=@_; if (!$udom) { $udom=$env{'user.domain'}; - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } else { - undef($uhome); - } - } else { - if (!$uhome) { - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } - } } my %returnhash; - if ($udom && $uhome && ($uhome ne 'no_host')) { - if ($regexp) { - $regexp=&escape($regexp); - } else { - $regexp='.'; - } - my $rep=&reply("dumpdom:$udom:$namespace:$regexp:$range",$uhome); - my @pairs=split(/\&/,$rep); - foreach my $item (@pairs) { - my ($key,$value)=split(/=/,$item,2); - $key = &unescape($key); - next if ($key =~ /^error: 2 /); - $returnhash{$key}=&thaw_unescape($value); - } + if ($udom) { + my $uname = &get_domainconfiguser($udom); + %returnhash = &dump($namespace,$udom,$uname,$regexp,$range); } return %returnhash; } -# ------------------------------------------- get items from domain db files +# ------------------------------------------ get items from domain db files sub get_dom { my ($namespace,$storearr,$udom,$uhome)=@_; @@ -1069,70 +1046,40 @@ sub put_dom { } } -# -------------------------------------- newput for items in domain db files - +# --------------------- newput for items in db file owned by domainconfig user sub newput_dom { - my ($namespace,$storehash,$udom,$uhome) = @_; + my ($namespace,$storehash,$udom) = @_; my $result; if (!$udom) { $udom=$env{'user.domain'}; - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } else { - undef($uhome); - } - } else { - if (!$uhome) { - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } - } } - if ($udom && $uhome && ($uhome ne 'no_host')) { - my $items=''; - if (ref($storehash) eq 'HASH') { - foreach my $key (keys(%$storehash)) { - $items.=&escape($key).'='.&freeze_escape($$storehash{$key}).'&'; - } - $items=~s/\&$//; - $result = &reply("newputdom:$udom:$namespace:$items",$uhome); - } - } else { - &logthis("put_dom failed - no homeserver and/or domain"); + if ($udom) { + my $uname = &get_domainconfiguser($udom); + $result = &newput($namespace,$storehash,$udom,$uname); } return $result; } +# --------------------- delete for items in db file owned by domainconfig user sub del_dom { - my ($namespace,$storearr,$udom,$uhome)=@_; + my ($namespace,$storearr,$udom)=@_; if (ref($storearr) eq 'ARRAY') { - my $items=''; - foreach my $item (@$storearr) { - $items.=&escape($item).'&'; - } - $items=~s/\&$//; if (!$udom) { $udom=$env{'user.domain'}; - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } else { - undef($uhome); - } - } else { - if (!$uhome) { - if (defined(&domain($udom,'primary'))) { - $uhome=&domain($udom,'primary'); - } - } } - if ($udom && $uhome && ($uhome ne 'no_host')) { - return &reply("deldom:$udom:$namespace:$items",$uhome); - } else { - &logthis("del_dom failed - no homeserver and/or domain"); + if ($udom) { + my $uname = &get_domainconfiguser($udom); + return &del($namespace,$storearr,$udom,$uname); } } } +# ----------------------------------construct domainconfig user for a domain +sub get_domainconfiguser { + my ($udom) = @_; + return $udom.'-domainconfig'; +} + sub retrieve_inst_usertypes { my ($udom) = @_; my (%returnhash,@order); @@ -5774,6 +5721,13 @@ sub auto_instcode_format { push(@homeservers,$tryserver); } } + } elsif ($caller eq 'requests') { + if ($codedom =~ /^$match_domain$/) { + my $chome = &domain($codedom,'primary'); + unless ($chome eq 'no_host') { + push(@homeservers,$chome); + } + } } else { push(@homeservers,&homeserver($caller,$codedom)); } @@ -5874,13 +5828,37 @@ sub auto_possible_instcodes { sub auto_courserequest_checks { my ($dom) = @_; - my %validations; + my ($homeserver,%validations); + if ($dom =~ /^$match_domain$/) { + $homeserver = &domain($dom,'primary'); + } + unless ($homeserver eq 'no_host') { + my $response=&reply('autocrsreqchecks:'.$dom,$homeserver); + unless ($response =~ /(con_lost|error|no_such_host|refused)/) { + my @items = split(/&/,$response); + foreach my $item (@items) { + my ($key,$value) = split('=',$item); + $validations{&unescape($key)} = &thaw_unescape($value); + } + } + } return %validations; } sub auto_courserequest_validation { - my ($dom,$details,$inststatuses,$message) = @_; - return 'pending'; + my ($dom,$owner,$crstype,$inststatuslist,$instcode,$instseclist) = @_; + my ($homeserver,$response); + if ($dom =~ /^$match_domain$/) { + $homeserver = &domain($dom,'primary'); + } + unless ($homeserver eq 'no_host') { + + $response=&unescape(&reply('autocrsreqvalidation:'.$dom.':'.&escape($owner). + ':'.&escape($crstype).':'.&escape($inststatuslist). + ':'.&escape($instcode).':'.&escape($instseclist), + $homeserver)); + } + return $response; } sub auto_validate_class_sec {