I agree....


see attached perl script for example...
this is a cgi for adding users (I know *really big shudder*) that
someone on this list previously asket for...
it even creates the passwd salt/hash for the useradd...

"Yoink!" wrote:
> 
> On Mon, 29 Nov 1999, Arni Raghu wrote:
> > Tired of adding/deleting users manually..I am writing my own perl scripts to
> > automate the tasks for me...this I do by directly writing to the passwd and
> > shadow files...(because I do not want to use Expect in the perl code)..It
> > works great and has eased my admin tasks  to an extent..
> 
> What's wrong with adduser and userdel?
> 
> --
> \ \/ / _       |~\  _ In God We Trust. All Others Pay Cash.
>  >  < / \|\  /|+-< | |    "The world is a comedy to those that think,
> / /\ \\_/| \/ ||__)|_|     a tragedy to those who feel." - Horace Walpole
> 
> --
> To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe"
> as the Subject.
#!/usr/bin/perl
###########################################################
# This program is Copyright under the GPL (yada yada yada)
# Abuse it at your will just email me any improvements
# please! --Mike Cathey ([EMAIL PROTECTED])
# The purpose of this script is farily self explanatory.
# It calls useradd and passwd to change the name of a user.
# It also checks to see if a user by the requested username
# already exists on the system.
###########################################################
# We have to define where the system utils are first.
# because it is the easiest and quickest way that I can
# think of, I am going to parse through /etc/passwd (please
# use shadow passwds) to find out if the username requested
# is already in use.
#
# NOTE: I am not implementing any kind of username check
#       (eg. username/password limit).  You might want
#       to add that if you expect to have problems in that
#       area.

$path_to_homedir = "/"; # path to create home directories
$useradd = "/usr/sbin/useradd"; # path to useradd
$userlist = "</etc/passwd"; # open readonly

# now we parse the form input

$formdata=<STDIN>;
$formdata=~s/\s+$//;
foreach (split(/&/, $formdata)) {
  ($name, $value)=split(/=/, $_);
  $name=~s/\+/ /g;
  $name=~s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
  $value=~s/\+/ /g;
  $value=~s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
  if ($value eq "") {
    &exit($name);
  }
  push (@print, $name);
  $data{$name}=$value;
}
$username = $data{'username'};
$password = $data{'password'};

# create a 'random' salt and then use
# the crypt function to creat the hashed password

$salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
$passwordhash = crypt($password,$salt);

open(ULIST,"$userlist") || die "Error can't open: $!";
@userlist = <ULIST>;

foreach $line (@userlist) {
  if ($line =~ /.*$username.*/i) {
    $name = "user exists";
    &exit($name);
  }
}

system("$useradd $username -m -d $path_to_homedir$username -p $passwordhash");

# then we print the success page

print "Content-type: text/html\n\n";
print "<html>\n<head>\n<title>Done!</title>\n</head>\n<body bgcolor=\"ffffff\">\n";
print "The username $username was added<br>\n";
print "with the password $password.<br>\n";
print "</body>\n</html>\n";

sub exit {
  local ($name)=@_;
  print "Content-type: text/html\n\n";
  print "<html>\n<head>\n<title>Error!</title>\n</head>\n<body bgcolor=\"ffffff\">\n";
  if ($name eq "user exists") {
    print "This username is already taken.<br>\n";
    print "Please return back and enter<br>\n";
    print "another username.<br>\n";
  }
  else { 
    print "Your must fill in the $name field to process this form.<br>\n";
    print " Please return back and do it. Thank you.<br>\n";
  }
  print "</body>\n</html>\n";
}

Reply via email to