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