#!/usr/bin/perl -w # # Allow users to add themselves to the system # # original script by Mike Holling (myke@telerama.com) # # very heavly modified for HBX by Michael Wally (hairball@gmail.com) # # Last update: June 9, 2003 # # Version 0.1.0 # # $LOGFILE="/var/log/signup.log"; $MAX_TRIES=5; $MAX_TIME=300; #$LOCK_SH=1; $LOCK_EX=2; $LOCK_NB=4; $LOCK_UN=8; # # Intro Splash # BEGIN { system("/usr/bin/clear"); print <ornaments("me,me,md,me") or die("Couldn't set ornamentation"); $got_username=0; $tries=0; until($got_username) { $tries++; $tries > $MAX_TRIES and bail("You couldn't get it right after five tries."); $line=$term->readline(" By what name shall you be known, adventurer: "); $line or bail("Got a blank username. Im guessing you wanted to quit?"); unless($line =~ /^([a-z0-9]{1,16})$/) { system("/usr/bin/clear"); # # malformed username error message # print < Locking passwd and group files... "; open(P,">>/etc/master.passwd") or bail("$!"); flock(P,$LOCK_EX | $LOCK_NB) or bail("Couldn't lock password file"); seek(P,0,2); # generate uid print "DONE\n\n --> Generating UID... "; # this code was hard :) $n=1000; {getpwuid++$n&&redo}; $uid=$n; print "UID=$uid "; # add user to passwd and group files print "DONE\n\n --> Adding user to passwd and group files... "; print P join(":",$username,"*",$uid,100,"student",0,0,$username, "/home/$username","/usr/local/bin/bash")."\n"; flock(P,$LOCK_UN); close P; # create directories print "DONE\n\n --> Preparing to create directories... "; print "DONE\n\n --> Creating /home/$username/... "; mkdir("/usr/home/$username",0755) or bail("Couldn't create home dir: $!"); print "DONE\n\n --> Creating /home/$username/public_html/... "; mkdir("/usr/home/$username/public_html",0755) or bail("Couldn't create public_html: $!"); print "DONE\n\n --> Setting ownership of /home/$username/... "; chown($uid,100,"/usr/home/$username") or bail("Couldn't change ownership of home dir: $!"); print "DONE\n\n --> Setting ownership of /home/$username/public_html/... "; chown($uid,100,"/usr/home/$username/public_html") or bail("Couldn't change ownership of public_html dir: $!"); # copy skel files print "DONE\n\n --> Preparing to copy skel files... "; print "DONE\n\n --> Copying file to /home/$username/.cshrc... "; copy("/usr/share/skel/dot.cshrc","/home/$username/.cshrc") or bail("Couldn't copy file .cshrc: $!"); print "DONE\n\n --> Copying file to /home/$username/.hughlogin... "; copy("/usr/share/skel/dot.hushlogin","/home/$username/.hushlogin") or bail("Couldn't copy file .hushlogin: $!"); print "DONE\n\n --> Copying file to /home/$username/.login... "; copy("/usr/share/skel/dot.login","/home/$username/.login") or bail("Couldn't copy file .login: $!"); print "DONE\n\n --> Copying file to /home/$username/.login_conf... "; copy("/usr/share/skel/dot.login_conf","/home/$username/.login_conf") or bail("Couldn't copy file .login_conf: $!"); print "DONE\n\n --> Copying file to /home/$username/.mail_aliases... "; copy("/usr/share/skel/dot.mail_aliases","/home/$username/.mail_aliases") or bail("Couldn't copy file .mail_aliases: $!"); print "DONE\n\n --> Copying file to /home/$username/.mailrc... "; copy("/usr/share/skel/dot.mailrc","/home/$username/.mailrc") or bail("Couldn't copy file .mailrc: $!"); print "DONE\n\n --> Copying file to /home/$username/.plan... "; copy("/usr/share/skel/dot.plan","/home/$username/.plan") or bail("Couldn't copy file .plan: $!"); print "DONE\n\n --> Copying file to /home/$username/.profile... "; copy("/usr/share/skel/dot.profile","/home/$username/.profile") or bail("Couldn't copy file .profile: $!"); print "DONE\n\n --> Copying file to /home/$username/.rhosts... "; copy("/usr/share/skel/dot.rhosts","/home/$username/.rhosts") or bail("Couldn't copy file .rhosts: $!"); print "DONE\n\n --> Copying file to /home/$username/.shrc... "; copy("/usr/share/skel/dot.shrc","/home/$username/.shrc") or bail("Couldn't copy file .shrc: $!"); # chown skel files print "DONE\n\n --> Preparing to chown skel files... "; print "DONE\n\n --> Setting ownership for /home/$username/.cshrc... "; chown($uid,100,"/home/$username/.cshrc") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.hushlogin... "; chown($uid,100,"/home/$username/.hushlogin") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.login... "; chown($uid,100,"/home/$username/.login") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.login_conf... "; chown($uid,100,"/home/$username/.login_conf") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.mail_aliases... "; chown($uid,100,"/home/$username/.mail_aliases") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.mailrc... "; chown($uid,100,"/home/$username/.mailrc") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.plan... "; chown($uid,100,"/home/$username/.plan") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.profile... "; chown($uid,100,"/home/$username/.profile") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.rhosts... "; chown($uid,100,"/home/$username/.rhosts") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting ownership for /home/$username/.shrc... "; chown($uid,100,"/home/$username/.shrc") or bail("Couldn't set file ownerships: $!"); # chmod skel files print "DONE\n\n --> Preparing to set permissions for skel files... "; print "DONE\n\n --> Setting permissions for /home/$username/.cshrc... "; chmod(0600,"/home/$username/.cshrc") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.hushlogin... "; chmod(0600,"/home/$username/.hushlogin") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.login... "; chmod(0600,"/home/$username/.login") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.login_conf... "; chmod(0600,"/home/$username/.login_conf") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.mail_aliases... "; chmod(0600,"/home/$username/.mail_aliases") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.mailrc... "; chmod(0600,"/home/$username/.mailrc") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.plan... "; chmod(0644,"/home/$username/.plan") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.profile... "; chmod(0600,"/home/$username/.profile") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.rhosts... "; chmod(0600,"/home/$username/.rhosts") or bail("Couldn't set file ownerships: $!"); print "DONE\n\n --> Setting permissions for /home/$username/.shrc... "; chmod(0600,"/home/$username/.shrc") or bail("Couldn't set file ownerships: $!"); # create NULL history files print "DONE\n\n --> Preparing to setup NULL logfiles... "; print "DONE\n\n --> Linking /home/$username/.history to /dev/null... "; symlink("/dev/null","/home/$username/.history") or bail("Couldn't link .history to null: $!"); print "DONE\n\n --> Linking /home/$username/.bash_history to /dev/null... "; symlink("/dev/null","/home/$username/.bash_history") or bail("Couldn't link .bash_history to null: $!"); # create webspace print "DONE\n\n --> Preparing to create webspace... "; print "DONE\n\n --> Copying index.html... "; copy("/usr/share/skel/public_html/index.html","/home/$username/public_html/index.html") or bail("Couldn't copy file index.html: $!"); print "DONE\n\n --> Setting ownership for index.html... "; chown($uid,100,"/home/$username/public_html/index.html") or bail("Couldn't chown index.html: $!"); print "DONE\n\n --> Setting permissions for indesx.html... "; chmod(0644,"/home/$username/public_html/index.html") or bail("Couldn't chmod index.html: $!"); # Recreate passwd databases print "DONE\n\n --> Recreating passwd databases... "; system("/usr/sbin/pwd_mkdb","-u",$username,"/etc/master.passwd") == 0 or bail("Couldn't recreate passwd db files: $!"); print "DONE\n\n --> Setting up quotas (/tmp)... "; system("/usr/local/sbin/setquota","-u","-f","/tmp","-bh50M","-bs2M","-bg7d","-ih1000","-is100","-ig7d",$username) == 0 or bail("Couldn't set quota on /tmp: $!"); print "DONE\n\n --> Setting up quotas (/var)... "; system("/usr/local/sbin/setquota","-u","-f","/var","-bh50M","-bs2M","-bg7d","-ih1000","-is100","-ig7d",$username) == 0 or bail("Couldn't set quota on /var: $!"); print "DONE\n\n --> Setting up quotas (/usr)... "; system("/usr/local/sbin/setquota","-u","-f","/usr","-bh100M","-bs50M","-bg7d","-ih20000","-is15000","-ig7d",$username) == 0 or bail("Couldn't set quota on /usr: $!"); print "DONE\n\nAccount Creation Success.\n\n\n"; system("/usr/bin/clear"); print <>$LOGFILE") or die("Can't open logfile: $!"); print L timestamp()." Added user $username\n"; close(L); system("/usr/bin/clear"); print <>$LOGFILE") or die("Can't open logfile: $!"); print L timestamp()." $error\n"; close(L); system("/usr/bin/clear"); print <>>DISCONNECTED!<<<\n\n"; exit; } # Called if program runs too long sub timeout() { bail("You're taking too long!"); }