slitaz-dev-tools rev 269

Delete all corrupted account at once, search for user and fixes
author Christophe Lincoln <pankso@slitaz.org>
date Mon Feb 20 17:50:15 2017 +0100 (2017-02-20)
parents 03310414b391
children 93e083231066
files tazu/tazu
line diff
     1.1 --- a/tazu/tazu	Mon Feb 20 15:52:09 2017 +0100
     1.2 +++ b/tazu/tazu	Mon Feb 20 17:50:15 2017 +0100
     1.3 @@ -12,9 +12,13 @@
     1.4  check_root
     1.5  user="$1"
     1.6  
     1.7 -people="/var/lib/slitaz/people"
     1.8 -authfile="/var/lib/slitaz/auth/people"
     1.9 -admin="/var/lib/slitaz/auth/admin"
    1.10 +people="/home/pankso/tazu/db/people"
    1.11 +authfile="/home/pankso/tazu/db/auth/people"
    1.12 +admin="/home/pankso/tazu/db/auth/admin"
    1.13 +
    1.14 +#people="/var/lib/slitaz/people"
    1.15 +#authfile="/var/lib/slitaz/auth/people"
    1.16 +#admin="/var/lib/slitaz/auth/admin"
    1.17  
    1.18  # Sanity check
    1.19  for file in ${authfile} ${admin}; do
    1.20 @@ -38,16 +42,17 @@
    1.21    stats      SliTaz users DB stats
    1.22    list       List all users accounts
    1.23    last       List last active users
    1.24 -  check      Check accounts integrity
    1.25 +  check      Check for corrupted accounts
    1.26  
    1.27  Options:
    1.28    --admin    Make user admin
    1.29    --edit     Edit user account.conf
    1.30 +  --search   Search for users using patterns
    1.31    --del      Delete a user account (or all corrupted) 
    1.32    
    1.33  Examples:
    1.34    tazu username --admin
    1.35 -  tazu "user name" --del
    1.36 +  tazu "user name" --search
    1.37  
    1.38  EOT
    1.39  }
    1.40 @@ -56,6 +61,10 @@
    1.41  	echo "No user account for: $user"
    1.42  }
    1.43  
    1.44 +md5crypt() {
    1.45 +	echo -n "$1" | md5sum | awk '{print $1}'
    1.46 +}
    1.47 +
    1.48  # Delete a user (we may have corrupted accounts: check twice)
    1.49  # Usage: deluser "username"
    1.50  deluser() {
    1.51 @@ -116,16 +125,22 @@
    1.52  		do
    1.53  			if ! [ -f "$people/$user/account.conf" ]; then
    1.54  				echo -n "$(colorize 31 "$user")"
    1.55 -				indent 26 "CORRUPTED" && continue
    1.56 +				indent 20 "CORRUPTED" && continue
    1.57  			fi
    1.58 -			. $people/$user/account.conf
    1.59  			echo -n "$(colorize 34 "$user")"
    1.60 -			indent 26 "${NAME}"
    1.61 +			indent 20 "${NAME}"
    1.62  		done 
    1.63 +		separator
    1.64 +		echo "$(boldify "Users:") $(ls $people | wc -l)"
    1.65 +		echo -n "$(boldify "Admin users:") "
    1.66 +		for u in $(cat $admin); do
    1.67 +			echo -n "$u "
    1.68 +		done && newline 
    1.69  		separator && newline ;;
    1.70  	
    1.71  	check)
    1.72  		# Check accounts and auth file
    1.73 +		tmp=/tmp/tazu_corrupted
    1.74  		newline
    1.75  		boldify "SliTaz accounts integrity"
    1.76  		separator
    1.77 @@ -133,22 +148,29 @@
    1.78  		for user in $(ls $people)
    1.79  		do
    1.80  			if ! [ -f "$people/$user/account.conf" ]; then
    1.81 -				echo -n "$(colorize 30 "$user")"
    1.82 +				echo -n "$(colorize 31 "$user")"
    1.83  				indent 26 "Missing account.conf"
    1.84 -			else # check empty VALUES
    1.85 +			else # Check empty VALUES
    1.86  				. "$people/$user/account.conf"
    1.87  				if [ -z "$NAME" ]; then
    1.88 -					echo -n "$(colorize 30 "$user")"
    1.89 +					echo -n "$(colorize 31 "$user")"
    1.90  					indent 26 "Missing NAME"
    1.91  				fi
    1.92  				if [ -z "$MAIL" ]; then
    1.93 -					echo -n $(colorize 30 "$user")
    1.94 +					echo -n $(colorize 31 "$user")
    1.95  					indent 26 "Missing MAIL"
    1.96  				fi
    1.97 +				# Invalide mail
    1.98 +				if ! echo "$MAIL" | grep -q "@"; then
    1.99 +					echo -n $(colorize 31 "$user")
   1.100 +					indent 26 "Invalid MAIL: $MAIL"
   1.101 +					echo "$user" >> ${tmp}
   1.102 +				fi
   1.103  				# account.conf but not in authfile ?
   1.104  				if ! grep -q "^${user}:" ${authfile}; then
   1.105  					echo -n $(colorize 31 "$user")
   1.106  					indent 26 "Missing in authfile"
   1.107 +					echo "$user" >> ${tmp}
   1.108  				fi
   1.109  				unset NAME MAIL
   1.110  			fi
   1.111 @@ -159,14 +181,24 @@
   1.112  		cat ${authfile} | while read user passwd;
   1.113  		do
   1.114  			if ! [ -d "$people/$user" ]; then
   1.115 -				echo -n $(colorize 30 "$user")
   1.116 +				echo -n $(colorize 31 "$user")
   1.117  				indent 26 "Missing in DB"
   1.118 -				[ "$del" ] && deluser "$user"
   1.119 +				echo "$user" >> ${tmp}
   1.120  			fi
   1.121  		done
   1.122  		unset IFS
   1.123  		separator
   1.124 -		echo "To remove a single corrupted account you can use: tazu 'user' --del" && newline ;;
   1.125 +		# Handle --del option
   1.126 +		if [ "$del" ] && [ -f "$tmp" ]; then
   1.127 +			boldify "Deleting accounts..."
   1.128 +			cat $tmp | uniq | while read u;
   1.129 +			do
   1.130 +				deluser "$u"
   1.131 +			done && separator
   1.132 +		else
   1.133 +			echo "To remove a single corrupted account you can use: tazu 'user' --del"
   1.134 +		fi
   1.135 +		newline && rm -f ${tmp} ;;
   1.136  
   1.137  	*)
   1.138  		# Handle general: --options
   1.139 @@ -188,6 +220,26 @@
   1.140  					no_account
   1.141  				fi ;;
   1.142  			
   1.143 +			*\ --search\ *)
   1.144 +				# Search for a user
   1.145 +				newline
   1.146 +				echo -n "Searching for: "; colorize 34 "$1"
   1.147 +				separator
   1.148 +				IFS=":"
   1.149 +				grep -i "$1" ${people}/*/account.conf | while read path patterm;
   1.150 +				do
   1.151 +					. ${path}
   1.152 +					if ! echo "$found" | grep -w -q "$USER"; then
   1.153 +						found="$found $USER"
   1.154 +						echo "$(colorize 34 $USER) $(indent 20 $NAME) $(indent 46 $MAIL)"
   1.155 +					fi
   1.156 +				done
   1.157 +				unset IFS && separator && newline ;;
   1.158 +			
   1.159 +			*\ --passwd\ *)
   1.160 +				echo -n "New password for $1: "; read pass
   1.161 +				echo "TODO" ;;
   1.162 +			
   1.163  			*\ --del\ *)
   1.164  				deluser "$user" ;;
   1.165  			
   1.166 @@ -195,7 +247,7 @@
   1.167  				# Show user info
   1.168  				if [ -d "${people}/${user}" ]; then
   1.169  					newline
   1.170 -					if grep -q "^$user$" ${admin}; then
   1.171 +					if fgrep -w -q "$user" ${admin}; then
   1.172  						echo "$(colorize 35 "Admin user:") $(colorize 34 "$user")"
   1.173  					else
   1.174  						echo "$(boldify "User:") $(colorize 34 "$user")"