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 |