--- loncom/lonnet/perl/lonnet.pm 2000/12/13 22:45:22 1.80 +++ loncom/lonnet/perl/lonnet.pm 2000/12/14 21:44:06 1.81 @@ -81,7 +81,7 @@ # 10/06,10/09,10/10,10/11,10/14,10/20,10/23,10/25,10/26,10/27,10/28,10/29, # 10/30,10/31, # 11/2,11/14,11/15,11/16,11/20,11/21,11/22,11/25,11/27, -# 12/02,12/12,12/13 Gerd Kortemeyer +# 12/02,12/12,12/13,12/14 Gerd Kortemeyer package Apache::lonnet; @@ -901,6 +901,7 @@ sub allowed { # Course: uri itself is a course my $courseuri=$uri; $courseuri=~s/\_(\d)/\/$1/; + if ($ENV{'user.priv.'.$ENV{'request.role'}.'./'.$courseuri} =~/$priv\&([^\:]*)/) { $thisallowed.=$1; @@ -1166,47 +1167,43 @@ sub assignrole { my $mrole; $url=declutter($url); if ($role =~ /^cr\//) { - unless ($url=~/\.course$/) { return 'invalid'; } - unless (allowed('ccr',$url)) { return 'refused'; } + unless (&allowed('ccr',$url)) { return 'refused'; } $mrole='cr'; } else { - unless (($url=~/\.course$/) || ($url=~/\/$/)) { return 'invalid'; } - unless (allowed('c'+$role)) { return 'refused'; } + unless (&allowed('c'.$role,$url)) { return 'refused'; } $mrole=$role; } my $command="encrypt:rolesput:$ENV{'user.domain'}:$ENV{'user.name'}:". "$udom:$uname:$url".'_'."$mrole=$role"; - if ($end) { $command.='_$end'; } + if ($end) { $command.='_'.$end; } if ($start) { if ($end) { - $command.='_$start'; + $command.='_'.$start; } else { - $command.='_0_$start'; + $command.='_0_'.$start; } } return &reply($command,&homeserver($uname,$udom)); } -# ----------------------------------------------------------------- Make a user +# --------------------------------------------------------------- Modify a user -sub makeuser { +sub modifyuser { my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene)=@_; - &logthis('Call to make user '.$udom.', '.$uname.', '.$uid.', '. + &logthis('Call to modify user '.$udom.', '.$uname.', '.$uid.', '. $umode.', '.$first.', '.$middle.', '. $last.', '.$gene.' by '. $ENV{'user.name'}.' at '.$ENV{'user.domain'}); my $uhome=&homeserver($uname,$udom); # ----------------------------------------------------------------- Create User - if ($uhome eq 'no_host') { + if (($uhome eq 'no_host') && ($umode) && ($upass)) { my $unhome=''; if ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'} eq $udom) { $unhome=$ENV{'course.'.$ENV{'request.course.id'}.'.home'}; - } elsif ($ENV{'user.domain'} eq $udom) { - $unhome=$ENV{'user.home'}; } else { my $tryserver; - my $loadm=999999; + my $loadm=10000000; foreach $tryserver (keys %libserv) { if ($hostdom{$tryserver} eq $udom) { my $answer=reply('load',$tryserver); @@ -1247,10 +1244,10 @@ sub makeuser { ':environment:firstname&middlename&lastname&generation', $uhome); my ($efirst,$emiddle,$elast,$egene)=split(/\&/,$names); - unless ($efirst) { $efirst = &escape($first); } - unless ($emiddle) { $emiddle = &escape($middle); } - unless ($elast) { $elast = &escape($last); } - unless ($egene) { $egene = &escape($gene); } + if ($first) { $efirst = &escape($first); } + if ($middle) { $emiddle = &escape($middle); } + if ($last) { $elast = &escape($last); } + if ($gene) { $egene = &escape($gene); } my $reply=&reply('put:'.$udom.':'.$uname. ':environment:firstname='.$efirst. '&middlename='.$emiddle. @@ -1259,28 +1256,46 @@ sub makeuser { if ($reply ne 'ok') { return 'error: '.$reply; } - &logthis('Success making user '.$udom.', '.$uname.', '.$uid.', '. + &logthis('Success modifying user '.$udom.', '.$uname.', '.$uid.', '. $umode.', '.$first.', '.$middle.', '. $last.', '.$gene.' by '. $ENV{'user.name'}.' at '.$ENV{'user.domain'}); return 'ok'; } -# -------------------------------------------------------------- Make a student +# -------------------------------------------------------------- Modify student -sub makestudent { - my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec)=@_; - unless ($ENV{'request.course.id'}) { +sub modifystudent { + my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec, + $end,$start)=@_; + my $cid=''; + unless ($cid=$ENV{'request.course.id'}) { return 'not_in_class'; } # --------------------------------------------------------------- Make the user - my $reply=&makeuser + my $reply=&modifyuser ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene); unless ($reply eq 'ok') { return $reply; } + my $uhome=&homeserver($uname,$udom); + if (($uhome eq '') || ($uhome eq 'no_host')) { + return 'error: no such user'; + } # -------------------------------------------------- Add student to course list - + my $reply=critical('put:'.$ENV{'course.'.$cid.'.domain'}.':'. + $ENV{'course.'.$cid.'.num'}.':classlist:'. + &escape($uname.':'.$udom).'='. + &escape($end.':'.$start), + $ENV{'course.'.$cid.'.home'}); + unless (($reply eq 'ok') || ($reply eq 'delayed')) { + return 'error: '.$reply; + } # ---------------------------------------------------- Add student role to user - + my $uurl=$cid; + $uurl=~s/\_/\//g; + if ($usec) { + $uurl.='/'.$usec; + } + return &assignrole($udom,$uname,$uurl,'st',$end,$start); } # ---------------------------------------------------------- Assign Custom Role