#!/bin/sh #writen by Zane C. Bowers . `which sh-include` include random include lugtools usage(){ echo "luadd: add a user to a POSIX user account to LDAP for use with NSS LDAP" echo "version 0.1.2" echo "" echo "-c the config file to use... the default is ~/.lugtools" echo "" echo "required:" echo "-u the username of the user" echo "-g the primary group of the user" echo "" echo "others:" echo "-U the UID of the user... will be auto assigned if not specified" echo "-s the shell of the user" echo "-H the homedir of the user" echo "-S (true/false) override CREATEHOME" echo "-G a camma seperated list of groups to add user to" echo "" echo "-h display this" } #create the tmp file tmpfile=/tmp/luadd.$$ touch $tmpfile chmod go-rwx $tmpfile #default config file config=~/.lugtools NONROOTOK="false" CREATEHOME="true" #get the options while getopts hc:U:u:g:s:H:RS:G: OPTION ; do case "$OPTION" in U) UID="$OPTARG" ;; u) username="$OPTARG" ;; g) group="$OPTARG" ;; s) shell="$OPTARG" ;; S) CREATEHOMEoverride="false" ;; H) home="$OPTARG" ;; R) NONROOTOK="true" ;; G) GROUPlist="$OPTARG" ;; h) usage=true ;; \?) usage=true ;; esac done #if usage is defined, print the usage info and exit if [ ! -z $usage ]; then usage; exit 1; fi #includes the config file if [ -e $config ]; then . $config else echo $config does not exist exit 1 fi #override home with CREATEHOMEoverride if [ ! -z $CREATEHOMEoverride ]; then CREATEHOME=$CREATEHOMEoverride fi #determines if it should exit if the user is not root if [ ! `whoami` = "root" ]; then if [ "$NONROOTOK" = "false" ]; then echo "It is not ok to run this from something other than root." exit 1; fi fi #exit if no username is specified if [ -z $username ]; then echo -u not used to specify a user name exit 1 fi #exits if the user already exists if [ `userExists $username` = true ]; then echo user $username already exists exit 1 fi #make sure the UID is not already in use and if one is not defined, find a free one. if [ ! -z $UID ]; then if [ `userExists $UID` = true ]; then echo UID $username already exists exit 1 fi else UID=`nextUID $UIDstart` fi #set the shell to use if [ -z $shell ]; then if [ ! -z $DEFAULTshell ]; then shell=$DEFAULTshell else echo "-s not specified and DEFAULTshell is not defined in the config file, "$config exit fi fi #sets the homedir to use if [ -z $home ]; then if [ ! -z $HOMEproto ]; then home=`echo $HOMEproto | sed s/%%USERNAME%%/$username/g` else echo "-h not specified and HOMEproto is not defined in the config file, "$config exit fi fi #sets the main group to the username, if one is not specified if [ -z $group ]; then group="$username" fi #handles adding the group if [ `groupExists $group` = "true" ]; then #figures out if it is in LDAP or else GID=`nextGID $GIDstart` groupLDAPentryGenerate $group $GID $GROUPBASE $tmpfile $username fi echo "" >> $tmpfile echo "dn: cn="$username","$USERBASE >> $tmpfile echo "objectClass: account" >> $tmpfile echo "objectClass: posixAccount" >> $tmpfile echo "objectClass: top" >> $tmpfile echo "uid: "$username >> $tmpfile echo "cn: "$username >> $tmpfile echo "uidNumber: "$UID >> $tmpfile echo "gidNumber: "$GID >> $tmpfile echo "homeDirectory: "$home >> $tmpfile echo "loginShell: "$shell >> $tmpfile echo "userPassword: " >> $tmpfile ldapadd -y $PASSWDFILE -D $BIND -f $tmpfile if [ ! $? = 0 ]; then echo "Failed to add the user and group entries to LDAP." exit 1 fi #create homedir if CREATEHOME is true if [ CREATEHOME = "true" ]; then cp -vR $SKELETONHOME $home chown -vR $username:$group $home chmod -v $CHMODHOME $home fi if [ ! -z $GROUPlist ]; then #make sure it has a , for cut to work GROUPlist="$GROUPlist," GROUPlist=`echo $GROUPlist | sed 's/,,/,/g'` GROUPlistLoop=1 GROUPlistCount=1 while [ $GROUPlistLoop = "1" ]; do GROUPlistItem=`echo $GROUPlist | cut -d, -f $GROUPlistCount` if [ -z $GROUPlistItem ]; then GROUPlistLoop="0" else if [ `groupExists $GROUPlistItem` = "true" ]; then groupAddCheck=`addUserToGroup "$username" "$GROUPlistItem" "$USERBASE" "$GROUPBASE" "$BIND" "$PASSWDFILE"` if [ $groupAddCheck = "true" ]; then echo "added $username to $GROUPlistItem" else echo "failed to add $username to $GROUPlistItem" fi else echo "$GROUPlistItem does not exist and thus not added to it" fi fi GROUPlistCount=`expr 1 + $GROUPlistCount` done fi #cat $tmpfile rm $tmpfile