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