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

Fix devel path
author Christophe Lincoln <pankso@slitaz.org>
date Mon Feb 20 17:52:26 2017 +0100 (2017-02-20)
parents 12bce7d6f274
children 1b592113f1b7
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@270 15 people="/var/lib/slitaz/people"
pankso@270 16 authfile="/var/lib/slitaz/auth/people"
pankso@270 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@268 35 $(boldify "Usage:") $(basename $0) [user|command] [--option]
pankso@214 36
pankso@214 37 Commands:
pankso@268 38 stats SliTaz users DB stats
pankso@268 39 list List all users accounts
pankso@268 40 last List last active users
pankso@269 41 check Check for corrupted accounts
pankso@214 42
pankso@214 43 Options:
pankso@267 44 --admin Make user admin
pankso@267 45 --edit Edit user account.conf
pankso@269 46 --search Search for users using patterns
pankso@268 47 --del Delete a user account (or all corrupted)
pankso@267 48
pankso@267 49 Examples:
pankso@267 50 tazu username --admin
pankso@269 51 tazu "user name" --search
pankso@214 52
pankso@214 53 EOT
pankso@214 54 }
pankso@214 55
pankso@214 56 no_account() {
pankso@214 57 echo "No user account for: $user"
pankso@214 58 }
pankso@214 59
pankso@269 60 md5crypt() {
pankso@269 61 echo -n "$1" | md5sum | awk '{print $1}'
pankso@269 62 }
pankso@269 63
pankso@267 64 # Delete a user (we may have corrupted accounts: check twice)
pankso@267 65 # Usage: deluser "username"
pankso@262 66 deluser() {
pankso@267 67 if [ -d "${people}/${1}" ] || grep -q "^$1:" ${authfile}; then
pankso@267 68 if [ -d "${people}/${1}" ]; then
pankso@267 69 echo -n "Deleting account: $(colorize 34 "$1")"
pankso@267 70 rm -rf "${people}/${1}" && status
pankso@267 71 fi
pankso@267 72 if grep -q "^$user:" ${authfile}; then
pankso@267 73 echo -n "Removing '$1' from authfile..."
pankso@267 74 sed -i "/^${1}:/"d ${authfile} && status
pankso@267 75 fi
pankso@267 76 else
pankso@267 77 no_account
pankso@263 78 fi
pankso@262 79 }
pankso@262 80
pankso@214 81 #
pankso@214 82 # Commands
pankso@214 83 #
pankso@214 84
pankso@214 85 case "$1" in
pankso@214 86 "") usage ;;
pankso@267 87
pankso@267 88 stats)
pankso@267 89 newline
pankso@267 90 boldify "SliTaz users stats"
pankso@267 91 separator
pankso@267 92 cat << EOT
pankso@267 93 People DB : $people
pankso@267 94 Authfie path : $authfile
pankso@267 95 Admin users : $admin
pankso@267 96 User accounts : $(ls $people | wc -l)
pankso@267 97 Authfile users : $(cat $authfile | wc -l)
pankso@267 98 Admin users : $(cat $admin | wc -l)
pankso@267 99 EOT
pankso@267 100 separator && newline ;;
pankso@267 101
pankso@267 102 last)
pankso@268 103 [ ! "$count" ] && count=15
pankso@268 104 newline
pankso@268 105 boldify "Last active users"
pankso@268 106 separator
pankso@268 107 find ${people} -name "last" | xargs ls -1t | head -n ${count} | while read last;
pankso@267 108 do
pankso@267 109 dir="$(dirname $last)"
pankso@267 110 echo -n "$(basename $dir)"
pankso@267 111 indent 26 "$(cat $last)"
pankso@268 112 done
pankso@268 113 separator && newline ;;
pankso@267 114
pankso@214 115 list)
pankso@214 116 # List all users
pankso@214 117 newline
pankso@214 118 boldify "SliTaz users list"
pankso@214 119 separator
pankso@214 120 for user in $(ls $people)
pankso@214 121 do
pankso@259 122 if ! [ -f "$people/$user/account.conf" ]; then
pankso@259 123 echo -n "$(colorize 31 "$user")"
pankso@269 124 indent 20 "CORRUPTED" && continue
pankso@259 125 fi
pankso@214 126 echo -n "$(colorize 34 "$user")"
pankso@269 127 indent 20 "${NAME}"
pankso@214 128 done
pankso@269 129 separator
pankso@269 130 echo "$(boldify "Users:") $(ls $people | wc -l)"
pankso@269 131 echo -n "$(boldify "Admin users:") "
pankso@269 132 for u in $(cat $admin); do
pankso@269 133 echo -n "$u "
pankso@269 134 done && newline
pankso@214 135 separator && newline ;;
pankso@267 136
pankso@259 137 check)
pankso@259 138 # Check accounts and auth file
pankso@269 139 tmp=/tmp/tazu_corrupted
pankso@259 140 newline
pankso@259 141 boldify "SliTaz accounts integrity"
pankso@259 142 separator
pankso@267 143 echo "$(colorize 33 "Checking users: account.conf")"
pankso@259 144 for user in $(ls $people)
pankso@259 145 do
pankso@259 146 if ! [ -f "$people/$user/account.conf" ]; then
pankso@269 147 echo -n "$(colorize 31 "$user")"
pankso@267 148 indent 26 "Missing account.conf"
pankso@269 149 else # Check empty VALUES
pankso@262 150 . "$people/$user/account.conf"
pankso@262 151 if [ -z "$NAME" ]; then
pankso@269 152 echo -n "$(colorize 31 "$user")"
pankso@267 153 indent 26 "Missing NAME"
pankso@259 154 fi
pankso@262 155 if [ -z "$MAIL" ]; then
pankso@269 156 echo -n $(colorize 31 "$user")
pankso@267 157 indent 26 "Missing MAIL"
pankso@262 158 fi
pankso@269 159 # Invalide mail
pankso@269 160 if ! echo "$MAIL" | grep -q "@"; then
pankso@269 161 echo -n $(colorize 31 "$user")
pankso@269 162 indent 26 "Invalid MAIL: $MAIL"
pankso@269 163 echo "$user" >> ${tmp}
pankso@269 164 fi
pankso@267 165 # account.conf but not in authfile ?
pankso@267 166 if ! grep -q "^${user}:" ${authfile}; then
pankso@267 167 echo -n $(colorize 31 "$user")
pankso@267 168 indent 26 "Missing in authfile"
pankso@269 169 echo "$user" >> ${tmp}
pankso@262 170 fi
pankso@267 171 unset NAME MAIL
pankso@259 172 fi
pankso@260 173 done
pankso@267 174 # Check authfile
pankso@267 175 echo "$(colorize 33 "Checking users in authfile...")"
pankso@267 176 IFS=":"
pankso@267 177 cat ${authfile} | while read user passwd;
pankso@260 178 do
pankso@260 179 if ! [ -d "$people/$user" ]; then
pankso@269 180 echo -n $(colorize 31 "$user")
pankso@267 181 indent 26 "Missing in DB"
pankso@269 182 echo "$user" >> ${tmp}
pankso@260 183 fi
pankso@260 184 done
pankso@267 185 unset IFS
pankso@267 186 separator
pankso@269 187 # Handle --del option
pankso@269 188 if [ "$del" ] && [ -f "$tmp" ]; then
pankso@269 189 boldify "Deleting accounts..."
pankso@269 190 cat $tmp | uniq | while read u;
pankso@269 191 do
pankso@269 192 deluser "$u"
pankso@269 193 done && separator
pankso@269 194 else
pankso@269 195 echo "To remove a single corrupted account you can use: tazu 'user' --del"
pankso@269 196 fi
pankso@269 197 newline && rm -f ${tmp} ;;
pankso@267 198
pankso@214 199 *)
pankso@214 200 # Handle general: --options
pankso@214 201 case " $@ " in
pankso@214 202 *\ --admin\ *)
pankso@214 203 # Admin user
pankso@267 204 if fgrep -q ${user} ${admin}; then
pankso@214 205 echo -n "User is already admin: " && colorize 34 "$user"
pankso@214 206 else
pankso@214 207 echo -n "Adding $user to admin users..."
pankso@267 208 echo "$user" >> ${admin} && status
pankso@214 209 fi ;;
pankso@214 210
pankso@264 211 *\ --edit\ *)
pankso@264 212 # Edit a user account
pankso@264 213 if [ -f "${people}/${user}/account.conf" ]; then
pankso@264 214 nano ${people}/${user}/account.conf
pankso@264 215 else
pankso@264 216 no_account
pankso@264 217 fi ;;
pankso@264 218
pankso@269 219 *\ --search\ *)
pankso@269 220 # Search for a user
pankso@269 221 newline
pankso@269 222 echo -n "Searching for: "; colorize 34 "$1"
pankso@269 223 separator
pankso@269 224 IFS=":"
pankso@269 225 grep -i "$1" ${people}/*/account.conf | while read path patterm;
pankso@269 226 do
pankso@269 227 . ${path}
pankso@269 228 if ! echo "$found" | grep -w -q "$USER"; then
pankso@269 229 found="$found $USER"
pankso@269 230 echo "$(colorize 34 $USER) $(indent 20 $NAME) $(indent 46 $MAIL)"
pankso@269 231 fi
pankso@269 232 done
pankso@269 233 unset IFS && separator && newline ;;
pankso@269 234
pankso@269 235 *\ --passwd\ *)
pankso@269 236 echo -n "New password for $1: "; read pass
pankso@269 237 echo "TODO" ;;
pankso@269 238
pankso@214 239 *\ --del\ *)
pankso@267 240 deluser "$user" ;;
pankso@214 241
pankso@214 242 *)
pankso@214 243 # Show user info
pankso@267 244 if [ -d "${people}/${user}" ]; then
pankso@214 245 newline
pankso@269 246 if fgrep -w -q "$user" ${admin}; then
pankso@267 247 echo "$(colorize 35 "Admin user:") $(colorize 34 "$user")"
pankso@267 248 else
pankso@267 249 echo "$(boldify "User:") $(colorize 34 "$user")"
pankso@267 250 fi
pankso@214 251 separator
pankso@214 252 cat $people/$user/account.conf | grep "="
pankso@267 253 separator
pankso@267 254
pankso@267 255 newline
pankso@214 256 else
pankso@214 257 no_account
pankso@214 258 fi ;;
pankso@214 259 esac ;;
pankso@214 260 esac
pankso@214 261
pankso@214 262 exit 0