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 |