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 |