diff --git a/account/newuser.in b/account/newuser.in index 86f903aebb3814a6a18b158871fbaeecf351f1a2..bbfad8fb392da632b41782c1cfb936b67ca88b69 100644 --- a/account/newuser.in +++ b/account/newuser.in @@ -239,7 +239,7 @@ foreach my $key (keys(%{ $xmlparse->{'attribute'} })) { # if (exists($newuser_args{'uid'})) { UserError("User already exists; pick another login name!") - if (User->Lookup($newuser_args{'uid'})); + if (User->LookupByUidAll($newuser_args{'uid'})); UserError("Reserved user name; pick another login name!") if (getpwnam($newuser_args{'uid'})); diff --git a/db/User.pm.in b/db/User.pm.in index 887c135a6d9c5844c8a3a0c4a505e5b374d9286c..f3480996cff2078051956dbfee169d47d03ca40b 100644 --- a/db/User.pm.in +++ b/db/User.pm.in @@ -188,6 +188,22 @@ sub LookupByUid($$) return User->Lookup($uid); } +# Include archived users, as for checking a newuser account. +sub LookupByUidAll($$) +{ + my ($class, $uid) = @_; + + my $query_result = + DBQueryFatal("select uid_idx from users where uid='$uid'"); + + return undef + if (! $query_result || !$query_result->numrows); + + my ($uid_idx) = $query_result->fetchrow_array(); + + return User->Lookup($uid_idx); +} + # # Lookup user given the unix uid ($UID typically). #