setperms (1365B)
1 #!/bin/sh 2 3 . ./lib/env.sh 4 . ./lib/fun.sh 5 6 permdb=./lib/perms.tsv 7 8 startuid=$(id -u) 9 10 if [ "${startuid}" -ne 0 ]; then 11 msg err "You must run this script as root" 12 exit 1 13 fi 14 15 recno=0 16 ( 17 IFS=$(printf '\n') 18 while read -r record 19 do 20 recno=$((recno+1)) 21 22 if [ "${recno}" -eq 1 ]; then 23 continue 24 fi 25 26 path=$(printf "${record}" | cut -d "$(printf '\t')" -f1) 27 mode=$(printf "${record}" | cut -sd "$(printf '\t')" -f2) 28 owner=$(printf "${record}" | cut -sd "$(printf '\t')" -f3) 29 group=$(printf "${record}" | cut -sd "$(printf '\t')" -f4) 30 31 ownerid='' 32 if [ -n "${owner}" ]; then 33 ownerid=$(grep "^${owner}:" ${GR}/etc/passwd | cut -d: -f3) 34 fi 35 36 groupid='' 37 if [ -n "${group}" ]; then 38 groupid=$(grep "^${group}:" ${GR}/etc/group | cut -d: -f3) 39 fi 40 41 if [ -z "${path}" ]; then 42 msg warn "Empty path at record #%d; skipping" "${recno}" 43 continue 44 fi 45 #printf "Record #%d: path=[%s] mode=[%s] [%s:%s]\n" \ 46 # "${recno}" "${path}" "${mode}" "${owner}" "${group}" 47 48 if [ "${startuid}" -eq 0 ] && [ -n "${owner}" ] \ 49 && [ -n "${groupid}" ] && [ -e "${GR}${path}" ]; then 50 msg info "chown -h %s:%s %s" "${ownerid}" "${groupid}" \ 51 "${GR}${path}" 52 chown -h ${ownerid}:${groupid} "${GR}${path}" || exit 1 53 fi 54 55 if [ -n "${mode}" ] && [ -e "${GR}${path}" ]; then 56 msg info "chmod %s %s" "${mode}" "${GR}${path}" 57 chmod "${mode}" "${GR}${path}" 58 fi 59 done <${permdb} 60 )