#! /bin/sh #---------------------------------------------------------------------------- # /var/install/bin/weavemini-modify-user - modify user details # # Copyright (c) 2010-2012 The Eisfair Team, team(at)eisfair(dot)org # # Creation: 2010-11-22 jed # Last Update: $Id$ # # usage: weavemini-modify-user # or: weavemini-modify-user -a username password - add user # or: weavemini-modify-user -c username password - change password # or: weavemini-modify-user -d username - delete user # or: weavemini-modify-user -l - list users # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- # include eislib . /var/install/include/eislib . /var/install/include/check-eisfair-version # exec 2>/tmp/weavemini-modify-user-trace-$$.log # set -x #---------------------------------------------------------------------------- # create weave_db if missing #---------------------------------------------------------------------------- create_weave_db() { # check if null byte file if [ "${PHP5_EXT_SQLITE3}" = "yes" ] then if [ -f ${web_root}/weave_db -a ! -s ${web_root}/weave_db ] then rm -f ${web_root}/weave_db fi # create weave_db if [ ! -f ${web_root}/weave_db ] then # database doesn't exist, create it mecho -info "creating weave_db file ..." /usr/bin/php ${web_root}/weavemini-modify-user.php -c -u weave-dummy -s dummy 2> /dev/null /usr/bin/php ${web_root}/weavemini-modify-user.php -d -u weave-dummy 2> /dev/null # set file ownership chown -R ${apache_user} ${web_root}/weave_db chgrp -R ${apache_group} ${web_root}/weave_db fi else exit 1 fi } #---------------------------------------------------------------------------- # check user # input : $1 - username # return: 0 - exists # 1 - doesn't exist #---------------------------------------------------------------------------- check_user () { u_name=$1 ret=1 grep -E -q "^${u_name}$" ${tmpfile} if [ $? -eq 0 ] then ret=0 fi return ${ret} } #---------------------------------------------------------------------------- # create list of users # only users with UID => 2000 and < 65534 (nobody) are listed #---------------------------------------------------------------------------- create_userlist () { # sqlite3 ${web_root}/weave_db 'select username from users' | sort > ${tmpfile} sqlite3 ${web_root}/weave_db 'select realname from users' | sort > ${tmpfile} } #---------------------------------------------------------------------------- # print list of users #---------------------------------------------------------------------------- print_userlist () { # print header clrhome mecho -info "List users" mecho techo begin '2 38' techo row "" -info User tty=`tty` row=4 while read line do user="${line}" # output data techo row "" ${user} row=`expr ${row} + 1` if [ "${act_pmode}" = 'tty' ] then if [ ${row} -eq 21 ] then mecho mecho anykey <$tty # print header clrhome mecho -info "List users" <$tty mecho techo row "" -info User row=4 fi fi done < ${tmpfile} techo end mecho } #---------------------------------------------------------------------------- # print raw list of users #---------------------------------------------------------------------------- print_raw_userlist () { while read line do echo "${line}" done < ${tmpfile} } #============================================================================ # main #============================================================================ act_pmode=`get_printmode` pgmname=`basename $0` ### set directory and file names ### case ${EISFAIR_SYSTEM} in eisfair-1) # eisfair-1 apache_user='wwwrun' apache_group='nogroup' ;; *) # default to eisfair-2 apache_user='www-data' apache_group='www-data' ;; esac module_webdir='weave_minimal' apache2file=/etc/config.d/apache2 apache2php5file=/etc/config.d/apache2_php5 if [ $# -eq 0 ] then # interactive clrhome mecho -info "Modify user" mecho /var/install/bin/weavemini-environment-test interactive='true' fi . ${apache2file} . ${apache2php5file} web_root="${APACHE2_DOCUMENT_ROOT}/${module_webdir}" modify_user_cmd="/usr/bin/php ${web_root}/weavemini-modify-user.php" base=`basename $0` tmpfile="/tmp/${base}-$$" curr_path=`pwd` cd ${web_root} create_weave_db create_userlist first_start=0 if [ $# -eq 0 ] then if [ ${first_start} -eq 0 ] then first_start=1 else clrhome mecho -info "Modify user" fi mecho mecho -warn "Please keep in mind that it is NOT ALLOWED to use uppercase" mecho -warn "or special characters when entering the 'Username'!" uname='' u_exit=0 until [ ${u_exit} -eq 1 ] do if [ "${uname}" = "" -o "${uname}" = "l" ] then # read uname mecho /var/install/bin/ask "Do you want to (a)dd, (d)elete, (l)ist users, (c)hange password or (q)uit:" '' '+' > /tmp/ask.$$ rc=$? uname=`cat /tmp/ask.$$ | tr '[:upper:]' '[:lower:]'` rm -f /tmp/ask.$$ fi case ${uname} in a ) # add user mecho /var/install/bin/ask "Username or (q)uit:" '' '*' > /tmp/ask.$$ rc=$? newuser=`cat /tmp/ask.$$ | tr '[:upper:]' '[:lower:]'` rm -f /tmp/ask.$$ if [ "${newuser}" != "q" ] then if ! check_user ${newuser} then /var/install/bin/ask "Password or (q)uit:" '' '*' > /tmp/ask.$$ rc=$? newpass=`cat /tmp/ask.$$` rm -f /tmp/ask.$$ if [ "${newpass}" != "q" ] then ${modify_user_cmd} -c -u ${newuser} -s ${newpass} 2> /dev/null else u_exit=1 fi else mecho -warn "User '${newuser}' already exists!" anykey clrhome mecho -info "Modify user" mecho mecho -warn "Please keep in mind that it is NOT ALLOWED to use uppercase" mecho -warn "or special characters when entering the 'Username'!" fi uname='' else u_exit=1 fi ;; c ) # change password mecho /var/install/bin/ask "Username or (q)uit:" '' '*' > /tmp/ask.$$ rc=$? curruser=`cat /tmp/ask.$$ | tr '[:upper:]' '[:lower:]'` rm -f /tmp/ask.$$ if [ "${curruser}" != "q" ] then if check_user ${curruser} then /var/install/bin/ask "Password:" '' '*' > /tmp/ask.$$ rc=$? newpass=`cat /tmp/ask.$$` rm -f /tmp/ask.$$ mecho /var/install/bin/ask "Do you really want to change the password" 'n' > /tmp/ask.$$ rc=$? yesno=`cat /tmp/ask.$$` rm -f /tmp/ask.$$ if [ "${yesno}" = "yes" ] then ${modify_user_cmd} -p -u ${curruser} -s ${newpass} 2> /dev/null else clrhome mecho -info "Modify user" fi else mecho -warn "User '${curruser}' doesn't exist!" anykey clrhome mecho -info "Modify user" fi uname='' else u_exit=1 fi ;; d ) # delete user mecho /var/install/bin/ask "Username or (q)uit:" '' '*' > /tmp/ask.$$ rc=$? curruser=`cat /tmp/ask.$$ | tr '[:upper:]' '[:lower:]'` rm -f /tmp/ask.$$ if [ "${curruser}" != "q" ] then if check_user ${curruser} then /var/install/bin/ask "Do you really want to delete the user" 'n' > /tmp/ask.$$ rc=$? yesno=`cat /tmp/ask.$$` rm -f /tmp/ask.$$ if [ "${yesno}" = "yes" ] then ${modify_user_cmd} -d -u ${curruser} 2> /dev/null else clrhome mecho -info "Modify user" fi else mecho -warn "User '${curruser}' doesn't exist!" anykey clrhome mecho -info "Modify user" fi uname='' else u_exit=1 fi ;; l ) # list users create_userlist print_userlist ;; q ) # quit u_exit=1 ;; * ) # process user uname='' ;; esac done else interactive='false' fi case $1 in '-a' ) # add user user="$2" pass="$3" if ! check_user ${user} then ${modify_user_cmd} -c -u ${user} -s ${pass} 2> /dev/null fi ;; '-c' ) # change password user="$2" pass="$3" if check_user ${user} then ${modify_user_cmd} -p -u ${user} -s ${pass} 2> /dev/null fi ;; '-d' ) # delete user user="$2" if check_user ${user} then ${modify_user_cmd} -d -u ${user} 2> /dev/null fi ;; '-l' ) # list users create_userlist print_raw_userlist ;; '-?'|'--help' ) # show help mecho "usage: ${pgmname}" >&2 mecho " or: ${pgmname} -a username password" >&2 mecho " or: ${pgmname} -c username password" >&2 mecho " or: ${pgmname} -d username" >&2 exit 1 ;; esac cd ${curr_path} rm -f ${tmpfile} if [ "${interactive}" = "true" ] then mecho anykey fi