First, you need to generate an appropriate salt. The code provided by tadman in this node should work.
Then, either install Crypt::PasswdMD5 and use:
Or, since you're apparently using RedHat (since adduser is a RedHat-specific command AFAIK) and your libc's crypt should do MD5-crypt automatically given a proper MD5 salt, use: my $crypted = crypt $passwd, $salt; To make sure this works, print the value of $crypt; it should be something like $1$b1yv9grF$mpwoS2r11VtENFrAmF2WW/ (instead of the shorter string returned by traditional DES-crypt). Once you've confirmed that you have what looks like an MD5-crypted password, use the value of $crypted in your command line:use Crypt::PasswdMD5; my $crypted = unix_md5_crypt $passwd, $salt;
The secret to getting crypt to work correctly is in providing a salt starting with '$1$' and having 8 characters (instead of the normal 2 used for DES-crypt). There are similar conventions for using other crypt variants (e.g. '$2$' for SHA-crypt).system("adduser", "bob", "-p", $crypted) == 0 or die "Error adding user 'bob': $!$/";