1 | #!/bin/bash |
---|
2 | set -e |
---|
3 | |
---|
4 | err() { |
---|
5 | echo "$@" |
---|
6 | } |
---|
7 | |
---|
8 | if [ -z "$1" ]; then |
---|
9 | filter="objectClass=posixAccount" |
---|
10 | else |
---|
11 | filter= |
---|
12 | for user; do |
---|
13 | filter="$filter(uid=$user)" |
---|
14 | done |
---|
15 | filter="(&(objectClass=posixAccount)(|$filter))" |
---|
16 | fi |
---|
17 | |
---|
18 | unset "${!l_@}" |
---|
19 | while read attr value; do |
---|
20 | if [ -n "$attr" ]; then |
---|
21 | declare "l_${attr%:}=$value" |
---|
22 | continue |
---|
23 | fi |
---|
24 | |
---|
25 | read f_type f_data < <(hesinfo "$l_uid" filsys) || : |
---|
26 | if [ -z "$f_type" ]; then |
---|
27 | err "$l_uid" "no_hesiod" |
---|
28 | elif [ "$f_type" = "ERR" ]; then |
---|
29 | err "$l_uid" "hesiod_err ERR $f_data" |
---|
30 | elif [ "$f_type" = "AFS" ]; then |
---|
31 | read f_path f_perm f_link z \ |
---|
32 | < <(echo "$f_data") |
---|
33 | [ "$l_homeDirectory" = "$f_path" ] || \ |
---|
34 | err "$l_uid" "hesiod_path $f_path" |
---|
35 | else |
---|
36 | err "$l_uid" "wrong_hesiod $f_type" |
---|
37 | fi |
---|
38 | |
---|
39 | IFS=/ read p_empty p_top p_cell p \ |
---|
40 | < <(echo "$l_homeDirectory") |
---|
41 | [ -z "${p_empty}" ] || \ |
---|
42 | err "$l_uid" "relative_home $l_homeDirectory" |
---|
43 | [ "${p_top}" = "afs" ] || \ |
---|
44 | err "$l_uid" "not_afs $l_homeDirectory" |
---|
45 | |
---|
46 | read v_vname v_vol v \ |
---|
47 | < <(vos exa -noauth "$l_uidNumber" -cell "$p_cell" 2>/dev/null) || : |
---|
48 | [ "$v_vol" = "$l_uidNumber" ] || |
---|
49 | err "$l_uid" "no_vol $l_uidNumber" |
---|
50 | |
---|
51 | if ! [ -d "$l_homeDirectory" ]; then |
---|
52 | if ! [ -e "$l_homeDirectory" ]; then |
---|
53 | err "$l_uid" "deleted $l_homeDirectory" |
---|
54 | else |
---|
55 | err "$l_uid" "not_dir $l_homeDirectory" |
---|
56 | fi |
---|
57 | else |
---|
58 | read c c_path c c c c_cell \ |
---|
59 | < <(fs whichcell "$l_homeDirectory" 2>/dev/null) || : |
---|
60 | [ "$c_path" = "$l_homeDirectory" ] || \ |
---|
61 | err "$l_uid" "no_cell $l_homeDirectory" |
---|
62 | [ "$c_cell" = "'$p_cell'" ] || \ |
---|
63 | err "$l_uid" "wrong_cell $l_homeDirectory" |
---|
64 | |
---|
65 | read m_path m m m m m m m_vname \ |
---|
66 | < <(fs lsmount "$l_homeDirectory" 2>/dev/null) || : |
---|
67 | [ "$m_path" = "'$l_homeDirectory'" ] || \ |
---|
68 | err "$l_uid" "no_mount $l_homeDirectory" |
---|
69 | [ "$m_vname" = "'#$v_vname'" ] || [ "$m_vname" = "'%$v_vname'" ] || \ |
---|
70 | err "$l_uid" "wrong_mount $m_vname ($l_uidNumber = $v_vname)" |
---|
71 | fi |
---|
72 | |
---|
73 | unset "${!l_@}" |
---|
74 | done < <( |
---|
75 | ldapsearch -LLL -x -D 'cn=Directory Manager' -y /etc/signup-ldap-pw \ |
---|
76 | -b ou=People,dc=scripts,dc=mit,dc=edu "$filter" \ |
---|
77 | uid uidNumber homeDirectory loginShell | \ |
---|
78 | perl -0pe 's/\n //g;' |
---|
79 | ) |
---|