--- loncom/lond 2004/08/04 21:11:16 1.222 +++ loncom/lond 2004/08/05 11:37:05 1.223 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.222 2004/08/04 21:11:16 foxr Exp $ +# $Id: lond,v 1.223 2004/08/05 11:37:05 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,7 +57,7 @@ my $DEBUG = 1; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.222 $'; #' stupid emacs +my $VERSION='$Revision: 1.223 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -122,8 +122,10 @@ my @passwderrors = ("ok", "lcpasswd Cannot set new passwd.", "lcpasswd Username has invalid characters", "lcpasswd Invalid characters in password", - "11", "12", - "lcpasswd Password mismatch"); + "lcpasswd User already exists", + "lcpasswd Something went wrong with user addition.", + "lcpasswd Password mismatch", + "lcpasswd Error filename is invalid"); # The array below are lcuseradd error strings.: @@ -1689,7 +1691,7 @@ sub process_request { } else { my $result=&make_passwd_file($uname, $umode,$npass, $passfilename); - print $client $result; + Reply($client, $result, $userinput); } } else { Reply($client, "refused\n", $userinput); @@ -4305,7 +4307,8 @@ sub make_passwd_file { return "no_priv_account_error\n"; } - my $execpath="$perlvar{'lonDaemons'}/"."lcuseradd"; + my $execpath ="$perlvar{'lonDaemons'}/"."lcuseradd"; + my $lc_error_file = "/tmp/lcuseradd".$$.".status"; { &Debug("Executing external: ".$execpath); &Debug("user = ".$uname.", Password =". $npass); @@ -4313,17 +4316,28 @@ sub make_passwd_file { print $se "$uname\n"; print $se "$npass\n"; print $se "$npass\n"; + print $se "$lc_error_file\n"; # Status -> unique file. } - my $useraddok = $?; + my $error = IO::File->new("< $lc_error_file"); + my $useraddok = <$error>; + $error->close; + unlink($lc_error_file); + + chomp $useraddok; + if($useraddok > 0) { - &logthis("Failed lcuseradd: ".&lcuseraddstrerror($useraddok)); + my $error_text = &lcuseraddstrerror($useraddok); + &logthis("Failed lcuseradd: $error_text"); + $result = "lcuseradd_failed:$error_text\n"; + } + else { + my $pf = IO::File->new(">$passfilename"); + print $pf "unix:\n"; } - my $pf = IO::File->new(">$passfilename"); - print $pf "unix:\n"; } } elsif ($umode eq 'none') { { - my $pf = IO::File->new(">$passfilename"); + my $pf = IO::File->new("> $passfilename"); print $pf "none:\n"; } } else {