slitaz-dev-tools annotate tazu/tazu @ rev 267

tazu: many improvments to handle SCN/Bugs users accounts
author Christophe Lincoln <pankso@slitaz.org>
date Mon Feb 20 15:34:43 2017 +0100 (2017-02-20)
parents b8d41d8263f2
children 03310414b391
rev   line source
pankso@214 1 #!/bin/sh
pankso@214 2 #
pankso@214 3 # TazU - SliTaz Users account utility
pankso@214 4 #
pankso@259 5 # This tool is used to mange SliTaz users accounts on bugs.slitaz.org
pankso@259 6 # and scn.slitaz.org. It can also be used to admin TinyCM users DB.
pankso@259 7 #
pankso@267 8 # Copyright 2017 (C) SliTaz GNU/Linux - BSD License
pankso@214 9 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@214 10 #
pankso@214 11 . /lib/libtaz.sh
pankso@214 12 check_root
pankso@267 13 user="$1"
pankso@214 14
pankso@267 15 people="/var/lib/slitaz/people"
pankso@214 16 authfile="/var/lib/slitaz/auth/people"
pankso@267 17 admin="/var/lib/slitaz/auth/admin"
pankso@267 18
pankso@267 19 # Sanity check
pankso@267 20 for file in ${authfile} ${admin}; do
pankso@267 21 if ! [ -f "$file" ]; then
pankso@267 22 echo check $file
pankso@267 23 install -d -m 0700 -o www -g www $(dirname $file)
pankso@267 24 touch ${file} && chown www.www ${file} && chmod 0600 ${file}
pankso@267 25 fi
pankso@267 26 done
pankso@214 27
pankso@214 28 #
pankso@214 29 # Functions
pankso@214 30 #
pankso@214 31
pankso@214 32 usage() {
pankso@214 33 cat << EOT
pankso@214 34
pankso@214 35 Usage: $(basename $0) [user|command] [--option]
pankso@214 36
pankso@214 37 Commands:
pankso@267 38 stats Count all users
pankso@267 39 list List all users
pankso@267 40 check Check accounts integrity
pankso@214 41
pankso@214 42 Options:
pankso@267 43 --admin Make user admin
pankso@267 44 --edit Edit user account.conf
pankso@267 45 --del Delete a user account (or all corrupted)
pankso@267 46
pankso@267 47 Examples:
pankso@267 48 tazu username --admin
pankso@267 49 tazu "user name" --del
pankso@214 50
pankso@214 51 EOT
pankso@214 52 }
pankso@214 53
pankso@214 54 no_account() {
pankso@214 55 echo "No user account for: $user"
pankso@214 56 }
pankso@214 57
pankso@267 58 # Delete a user (we may have corrupted accounts: check twice)
pankso@267 59 # Usage: deluser "username"
pankso@262 60 deluser() {
pankso@267 61 if [ -d "${people}/${1}" ] || grep -q "^$1:" ${authfile}; then
pankso@267 62 if [ -d "${people}/${1}" ]; then
pankso@267 63 echo -n "Deleting account: $(colorize 34 "$1")"
pankso@267 64 rm -rf "${people}/${1}" && status
pankso@267 65 fi
pankso@267 66 if grep -q "^$user:" ${authfile}; then
pankso@267 67 echo -n "Removing '$1' from authfile..."
pankso@267 68 sed -i "/^${1}:/"d ${authfile} && status
pankso@267 69 fi
pankso@267 70 else
pankso@267 71 no_account
pankso@263 72 fi
pankso@262 73 }
pankso@262 74
pankso@214 75 #
pankso@214 76 # Commands
pankso@214 77 #
pankso@214 78
pankso@214 79 case "$1" in
pankso@214 80 "") usage ;;
pankso@267 81
pankso@267 82 stats)
pankso@267 83 newline
pankso@267 84 boldify "SliTaz users stats"
pankso@267 85 separator
pankso@267 86 cat << EOT
pankso@267 87 People DB : $people
pankso@267 88 Authfie path : $authfile
pankso@267 89 Admin users : $admin
pankso@267 90 User accounts : $(ls $people | wc -l)
pankso@267 91 Authfile users : $(cat $authfile | wc -l)
pankso@267 92 Admin users : $(cat $admin | wc -l)
pankso@267 93 EOT
pankso@267 94 separator && newline ;;
pankso@267 95
pankso@267 96 last)
pankso@267 97 find ${people} -name "last" | xargs ls -1t | head -n 10 | while read last;
pankso@267 98 do
pankso@267 99 dir="$(dirname $last)"
pankso@267 100 echo -n "$(basename $dir)"
pankso@267 101 indent 26 "$(cat $last)"
pankso@267 102 done ;;
pankso@267 103
pankso@214 104 list)
pankso@214 105 # List all users
pankso@214 106 newline
pankso@214 107 boldify "SliTaz users list"
pankso@214 108 separator
pankso@214 109 for user in $(ls $people)
pankso@214 110 do
pankso@259 111 if ! [ -f "$people/$user/account.conf" ]; then
pankso@259 112 echo -n "$(colorize 31 "$user")"
pankso@267 113 indent 26 "CORRUPTED" && continue
pankso@259 114 fi
pankso@214 115 . $people/$user/account.conf
pankso@214 116 echo -n "$(colorize 34 "$user")"
pankso@267 117 indent 26 "${NAME}"
pankso@214 118 done
pankso@214 119 separator && newline ;;
pankso@267 120
pankso@259 121 check)
pankso@259 122 # Check accounts and auth file
pankso@259 123 newline
pankso@259 124 boldify "SliTaz accounts integrity"
pankso@259 125 separator
pankso@267 126 echo "$(colorize 33 "Checking users: account.conf")"
pankso@259 127 for user in $(ls $people)
pankso@259 128 do
pankso@259 129 if ! [ -f "$people/$user/account.conf" ]; then
pankso@259 130 echo -n "$(colorize 30 "$user")"
pankso@267 131 indent 26 "Missing account.conf"
pankso@262 132 else # check empty VALUES
pankso@262 133 . "$people/$user/account.conf"
pankso@262 134 if [ -z "$NAME" ]; then
pankso@262 135 echo -n "$(colorize 30 "$user")"
pankso@267 136 indent 26 "Missing NAME"
pankso@259 137 fi
pankso@262 138 if [ -z "$MAIL" ]; then
pankso@267 139 echo -n $(colorize 30 "$user")
pankso@267 140 indent 26 "Missing MAIL"
pankso@262 141 fi
pankso@267 142 # account.conf but not in authfile ?
pankso@267 143 if ! grep -q "^${user}:" ${authfile}; then
pankso@267 144 echo -n $(colorize 31 "$user")
pankso@267 145 indent 26 "Missing in authfile"
pankso@262 146 fi
pankso@267 147 unset NAME MAIL
pankso@259 148 fi
pankso@260 149 done
pankso@267 150 # Check authfile
pankso@267 151 echo "$(colorize 33 "Checking users in authfile...")"
pankso@267 152 IFS=":"
pankso@267 153 cat ${authfile} | while read user passwd;
pankso@260 154 do
pankso@260 155 if ! [ -d "$people/$user" ]; then
pankso@267 156 echo -n $(colorize 30 "$user")
pankso@267 157 indent 26 "Missing in DB"
pankso@267 158 [ "$del" ] && deluser "$user"
pankso@260 159 fi
pankso@260 160 done
pankso@267 161 unset IFS
pankso@267 162 separator
pankso@267 163 echo "To remove a single corrupted account you can use: tazu 'user' --del" && newline ;;
pankso@267 164
pankso@214 165 *)
pankso@214 166 # Handle general: --options
pankso@214 167 case " $@ " in
pankso@214 168 *\ --admin\ *)
pankso@214 169 # Admin user
pankso@267 170 if fgrep -q ${user} ${admin}; then
pankso@214 171 echo -n "User is already admin: " && colorize 34 "$user"
pankso@214 172 else
pankso@214 173 echo -n "Adding $user to admin users..."
pankso@267 174 echo "$user" >> ${admin} && status
pankso@214 175 fi ;;
pankso@214 176
pankso@264 177 *\ --edit\ *)
pankso@264 178 # Edit a user account
pankso@264 179 if [ -f "${people}/${user}/account.conf" ]; then
pankso@264 180 nano ${people}/${user}/account.conf
pankso@264 181 else
pankso@264 182 no_account
pankso@264 183 fi ;;
pankso@264 184
pankso@214 185 *\ --del\ *)
pankso@267 186 deluser "$user" ;;
pankso@214 187
pankso@214 188 *)
pankso@214 189 # Show user info
pankso@267 190 if [ -d "${people}/${user}" ]; then
pankso@214 191 newline
pankso@267 192 if grep -q "^$user$" ${admin}; then
pankso@267 193 echo "$(colorize 35 "Admin user:") $(colorize 34 "$user")"
pankso@267 194 else
pankso@267 195 echo "$(boldify "User:") $(colorize 34 "$user")"
pankso@267 196 fi
pankso@214 197 separator
pankso@214 198 cat $people/$user/account.conf | grep "="
pankso@267 199 separator
pankso@267 200
pankso@267 201 newline
pankso@214 202 else
pankso@214 203 no_account
pankso@214 204 fi ;;
pankso@214 205 esac ;;
pankso@214 206 esac
pankso@214 207
pankso@214 208 exit 0