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"; }