On Wednesday 26 September 2001 02:11, Kurt Wall wrote:

> Here's the promised code. I build it with:
> $ gcc -Wall -ansi -pedantic crypt.c -o crypt -lcrypt


following on, here's some perl stuff I use

---------
#!/usr/bin/perl

# call: install_newuser $password $username

sub install_newuser
{    
    $pwd = crypt($password,'ab');
    sys_playback("useradd $username -p $pwd");
    #system "sh", '-c', "useradd $username -p $pwd";
}
sub sys_playback 
{  
    if (system("sh",'-c',"@_ ")) {errmsg("failed on @_");} 
} 

##################### 
#                   # 
#  PASSWORD FILE    # 
#                   # 
##################### 
# 
# &check_password $username,$password 
# 
#   returns 1 correct 
#           0 not correct 
#           -1 username not found 
# 
sub check_password 
{ 
    local ($user,$pass)= @_; 
    local ($login,$passwd,$uid,$gid,$gcos,$home,$shell); 
 
   if ($user eq "" or $pass eq "") {errmsg('user or password not supplied');} 
 
    open_file($pwd_file); 
     
    while(<OLD>) 
    { 
        chop; 
        ($login,$passwd,$uid,$gid,$gcos,$home,$shell) = split(/:/); 
        if(index($login,$user) > -1 && index($user,$login) > -1) 
        { 
            if(crypt($pass,$passwd) eq $passwd) 
            { 
                close(OLD); 
                return 1; 
            } 
            else 
            { 
                close(OLD); 
                return 0; 
            } 
            last; 
        } 
    } 
    close(OLD); 
    return -1; 
} 

# 
# CHANGE PASSWORD 
# 
# &change_password($username,$new); 
# 
# old password verification must be done elsewhere 
#             
sub change_password 
{ 
    local ($user,$new)=@_; 
    local ($login,$passwd,$uid,$gid,$gcos,$home,$shell); 
    local ($found);     
     
    if ($user eq "" or $new eq "") {errmsg("user or password not supplied 
properly");} 
 
    open_for_copy($pwd_file,'tmp');   
    while(<OLD>) 
    {   
        $maybe=$_; 
         
        if (!$found) 
        { 
            chop; 
            ($login,$passwd,$uid,$gid,$gcos,$home,$shell) = split(/:/); 
            if(index($login,$user) > -1 && index($user,$login) > -1) 
            { 
                $found=1; 
                $new=crypt($new,$passwd); 
                print NEW  ("$login:$new:$uid:$gid:$gcos:$home:$shell\n"); 
            } 
            else {print NEW ($maybe);      } 
        } 
        else 
        { 
           print NEW ($maybe); 
        } 
    } 
    close(OLD); 
    close (NEW); 
    if (!$found) 
    { 
        unlink 'tmp'; 
        errmsg("$user not found"); 
    } 
    set_new_pwd_file('tmp'); 
    return $found; 
} 

-- 
http://linux.nf -- [EMAIL PROTECTED]

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

_______________________________________________
http://linux.nf -- [EMAIL PROTECTED]
Archives, Subscribe, Unsubscribe, Digest, Etc 
->http://linux.nf/mailman/listinfo/linux-users

Reply via email to