Whamcloud - gitweb
Forgot closing brace in expect expression.
[fs/lustre-release.git] / lustre / tests / krb5_env.sh
1 #!/bin/sh
2
3 #
4 # KDC could be on remote hosts, but we suppose lgssd/lsvcgssd only
5 # runs locally.
6 #
7
8 export KDCHOST=${KDCHOST:-"localhost"}
9 export KDCDIR=${KDCDIR:-"/usr/kerberos/sbin"}
10 export KRB5DIR=${KRB5DIR:-"/usr/kerberos"}
11 export LGSSD=${LGSSD:-"/usr/sbin/lgssd"}
12 export SVCGSSD=${SVCGSSD:-"/usr/sbin/lsvcgssd"}
13 export PDSH=${PDSH:-"ssh"}
14
15 export CHECK_KDC=${CHECKKDC:-"no"}
16
17 using_krb5_sec() {
18     if [ "x$1" != "xkrb5i" -a "x$1" != "xkrb5p" ]; then
19         echo "n"
20     else
21         echo "y"
22     fi
23 }
24
25 start_krb5_kdc() {
26     if [ `using_krb5_sec $SECURITY` == 'n' ] ; then
27         return 0
28     fi
29
30     if [ "x$CHECK_KDC" == "xno" ]; then
31         return 0
32     fi
33
34     num=`$PDSH $KDCHOST "PATH=\$PATH:$KDCDIR; ps ax | grep krb5kdc | grep -v "grep" | wc -l"`
35     if [ $num -eq 1 ]; then
36         return 0
37     fi
38
39     $PDSH $KDCHOST "PATH=\$PATH:$KDCDIR; krb5kdc"
40     num=`$PDSH $KDCHOST "PATH=\$PATH:$KDCDIR; ps ax | grep krb5kdc | grep -v "grep" | wc -l"`
41     if [ $num -ne 1 ]; then
42         echo "fail to start krb5 KDC, check env KDCHOST and KDCDIR"
43         return 1
44     fi
45     return 0
46 }
47
48 prepare_krb5_cache() {
49     if [ `using_krb5_sec $SECURITY` == 'n' ] ; then
50         return 0
51     fi
52
53     $KRB5DIR/bin/klist -5 -s
54     invalid=$?
55     if [ $invalid -eq 0 ]; then
56         return 0
57     fi
58
59     #
60     # check installed service keytab for root
61     #
62     if [ $UID -eq 0 ]; then
63         output=`$KRB5DIR/bin/klist -5 -k`
64         if [ $? == 0 ]; then
65             item=`echo $output | egrep "lustre_mds/.*@"`
66             if [ "x$item" != "x" ]; then
67                 echo "Using service keytab"
68                 return 0
69             fi
70         fi
71     fi
72
73     echo "***** refresh Kerberos V5 TGT for uid $UID *****"
74     if [ -z "$GSS_PASS" ]; then
75         $KRB5DIR/bin/kinit
76     else
77         expect <<EOF
78 set timeout 30 
79
80 log_user 1 
81
82 set spawnid [spawn /bin/bash]
83 send "export PS1=\"user@host $ \" \r"
84 expect {
85     timeout {puts "timeout" ;exit 1}
86     "user@host $ "
87 }
88
89 send "$KRB5DIR/bin/kinit\r"
90 {
91     timeout {puts "timeout" ;exit 1}
92     "Password for "
93 }
94
95 send "$GSS_PASS\r"
96 expect {
97     timeout {puts "timeout" ;exit 1}
98     "user@host $ "
99 }
100
101 exit 0
102 EOF
103     fi
104     ret=$?
105     return $ret
106 }
107
108 start_lsvcgssd() {
109     if [ `using_krb5_sec $SECURITY` == 'n' ] ; then
110         return 0
111     fi
112
113     killall -q -9 lsvcgssd || true
114
115     `$SVCGSSD`
116     num=`ps -o cmd -C "lsvcgssd" | grep lsvcgssd | wc -l`
117     if [ $num -ne 1 ]; then
118         echo "failed to start lsvcgssd"
119         return 1
120     fi
121     return 0
122 }
123
124 stop_lsvcgssd() {
125     killall -q -9 lsvcgssd || true
126     return 0
127 }
128
129 start_lgssd() {
130     if [ `using_krb5_sec $SECURITY` == 'n' ] ; then
131         return 0
132     fi
133
134     prepare_krb5_cache || exit 1
135
136     killall -q -9 lgssd || true
137
138     `$LGSSD`
139     num=`ps -o cmd -C "lgssd" | grep lgssd | wc -l`
140     if [ $num -ne 1 ]; then
141         echo "failed to start lgssd $num"
142         return 1
143     fi
144     return 0
145 }
146
147 stop_lgssd() {
148     killall -q -9 lgssd || true
149     return 0
150 }