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

tazu: small cosmetic fixes
author Christophe Lincoln <pankso@slitaz.org>
date Mon Feb 20 15:52:09 2017 +0100 (2017-02-20)
parents edb58659d191
children 12bce7d6f274
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@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@267 41 check Check accounts integrity
pankso@214 42
pankso@214 43 Options:
pankso@267 44 --admin Make user admin
pankso@267 45 --edit Edit user account.conf
pankso@268 46 --del Delete a user account (or all corrupted)
pankso@267 47
pankso@267 48 Examples:
pankso@267 49 tazu username --admin
pankso@267 50 tazu "user name" --del
pankso@214 51
pankso@214 52 EOT
pankso@214 53 }
pankso@214 54
pankso@214 55 no_account() {
pankso@214 56 echo "No user account for: $user"
pankso@214 57 }
pankso@214 58
pankso@267 59 # Delete a user (we may have corrupted accounts: check twice)
pankso@267 60 # Usage: deluser "username"
pankso@262 61 deluser() {
pankso@267 62 if [ -d "${people}/${1}" ] || grep -q "^$1:" ${authfile}; then
pankso@267 63 if [ -d "${people}/${1}" ]; then
pankso@267 64 echo -n "Deleting account: $(colorize 34 "$1")"
pankso@267 65 rm -rf "${people}/${1}" && status
pankso@267 66 fi
pankso@267 67 if grep -q "^$user:" ${authfile}; then
pankso@267 68 echo -n "Removing '$1' from authfile..."
pankso@267 69 sed -i "/^${1}:/"d ${authfile} && status
pankso@267 70 fi
pankso@267 71 else
pankso@267 72 no_account
pankso@263 73 fi
pankso@262 74 }
pankso@262 75
pankso@214 76 #
pankso@214 77 # Commands
pankso@214 78 #
pankso@214 79
pankso@214 80 case "$1" in
pankso@214 81 "") usage ;;
pankso@267 82
pankso@267 83 stats)
pankso@267 84 newline
pankso@267 85 boldify "SliTaz users stats"
pankso@267 86 separator
pankso@267 87 cat << EOT
pankso@267 88 People DB : $people
pankso@267 89 Authfie path : $authfile
pankso@267 90 Admin users : $admin
pankso@267 91 User accounts : $(ls $people | wc -l)
pankso@267 92 Authfile users : $(cat $authfile | wc -l)
pankso@267 93 Admin users : $(cat $admin | wc -l)
pankso@267 94 EOT
pankso@267 95 separator && newline ;;
pankso@267 96
pankso@267 97 last)
pankso@268 98 [ ! "$count" ] && count=15
pankso@268 99 newline
pankso@268 100 boldify "Last active users"
pankso@268 101 separator
pankso@268 102 find ${people} -name "last" | xargs ls -1t | head -n ${count} | while read last;
pankso@267 103 do
pankso@267 104 dir="$(dirname $last)"
pankso@267 105 echo -n "$(basename $dir)"
pankso@267 106 indent 26 "$(cat $last)"
pankso@268 107 done
pankso@268 108 separator && newline ;;
pankso@267 109
pankso@214 110 list)
pankso@214 111 # List all users
pankso@214 112 newline
pankso@214 113 boldify "SliTaz users list"
pankso@214 114 separator
pankso@214 115 for user in $(ls $people)
pankso@214 116 do
pankso@259 117 if ! [ -f "$people/$user/account.conf" ]; then
pankso@259 118 echo -n "$(colorize 31 "$user")"
pankso@267 119 indent 26 "CORRUPTED" && continue
pankso@259 120 fi
pankso@214 121 . $people/$user/account.conf
pankso@214 122 echo -n "$(colorize 34 "$user")"
pankso@267 123 indent 26 "${NAME}"
pankso@214 124 done
pankso@214 125 separator && newline ;;
pankso@267 126
pankso@259 127 check)
pankso@259 128 # Check accounts and auth file
pankso@259 129 newline
pankso@259 130 boldify "SliTaz accounts integrity"
pankso@259 131 separator
pankso@267 132 echo "$(colorize 33 "Checking users: account.conf")"
pankso@259 133 for user in $(ls $people)
pankso@259 134 do
pankso@259 135 if ! [ -f "$people/$user/account.conf" ]; then
pankso@259 136 echo -n "$(colorize 30 "$user")"
pankso@267 137 indent 26 "Missing account.conf"
pankso@262 138 else # check empty VALUES
pankso@262 139 . "$people/$user/account.conf"
pankso@262 140 if [ -z "$NAME" ]; then
pankso@262 141 echo -n "$(colorize 30 "$user")"
pankso@267 142 indent 26 "Missing NAME"
pankso@259 143 fi
pankso@262 144 if [ -z "$MAIL" ]; then
pankso@267 145 echo -n $(colorize 30 "$user")
pankso@267 146 indent 26 "Missing MAIL"
pankso@262 147 fi
pankso@267 148 # account.conf but not in authfile ?
pankso@267 149 if ! grep -q "^${user}:" ${authfile}; then
pankso@267 150 echo -n $(colorize 31 "$user")
pankso@267 151 indent 26 "Missing in authfile"
pankso@262 152 fi
pankso@267 153 unset NAME MAIL
pankso@259 154 fi
pankso@260 155 done
pankso@267 156 # Check authfile
pankso@267 157 echo "$(colorize 33 "Checking users in authfile...")"
pankso@267 158 IFS=":"
pankso@267 159 cat ${authfile} | while read user passwd;
pankso@260 160 do
pankso@260 161 if ! [ -d "$people/$user" ]; then
pankso@267 162 echo -n $(colorize 30 "$user")
pankso@267 163 indent 26 "Missing in DB"
pankso@267 164 [ "$del" ] && deluser "$user"
pankso@260 165 fi
pankso@260 166 done
pankso@267 167 unset IFS
pankso@267 168 separator
pankso@267 169 echo "To remove a single corrupted account you can use: tazu 'user' --del" && newline ;;
pankso@267 170
pankso@214 171 *)
pankso@214 172 # Handle general: --options
pankso@214 173 case " $@ " in
pankso@214 174 *\ --admin\ *)
pankso@214 175 # Admin user
pankso@267 176 if fgrep -q ${user} ${admin}; then
pankso@214 177 echo -n "User is already admin: " && colorize 34 "$user"
pankso@214 178 else
pankso@214 179 echo -n "Adding $user to admin users..."
pankso@267 180 echo "$user" >> ${admin} && status
pankso@214 181 fi ;;
pankso@214 182
pankso@264 183 *\ --edit\ *)
pankso@264 184 # Edit a user account
pankso@264 185 if [ -f "${people}/${user}/account.conf" ]; then
pankso@264 186 nano ${people}/${user}/account.conf
pankso@264 187 else
pankso@264 188 no_account
pankso@264 189 fi ;;
pankso@264 190
pankso@214 191 *\ --del\ *)
pankso@267 192 deluser "$user" ;;
pankso@214 193
pankso@214 194 *)
pankso@214 195 # Show user info
pankso@267 196 if [ -d "${people}/${user}" ]; then
pankso@214 197 newline
pankso@267 198 if grep -q "^$user$" ${admin}; then
pankso@267 199 echo "$(colorize 35 "Admin user:") $(colorize 34 "$user")"
pankso@267 200 else
pankso@267 201 echo "$(boldify "User:") $(colorize 34 "$user")"
pankso@267 202 fi
pankso@214 203 separator
pankso@214 204 cat $people/$user/account.conf | grep "="
pankso@267 205 separator
pankso@267 206
pankso@267 207 newline
pankso@214 208 else
pankso@214 209 no_account
pankso@214 210 fi ;;
pankso@214 211 esac ;;
pankso@214 212 esac
pankso@214 213
pankso@214 214 exit 0