xinetd_tests.sh revision a4f5e23bb7dbbe71a52bc89b43edea35e2567382
1c864960ed4bfa8d119afbc1a7f92be5ca590ec89subrata_modak#!/bin/sh
2fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj################################################################################
3fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj##                                                                            ##
4fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## Copyright (c) International Business Machines  Corp., 2001                 ##
5fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj##                                                                            ##
6fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## This program is free software;  you can redistribute it and#or modify      ##
7fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## it under the terms of the GNU General Public License as published by       ##
8fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## the Free Software Foundation; either version 2 of the License, or          ##
9fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## (at your option) any later version.                                        ##
10fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj##                                                                            ##
11fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## This program is distributed in the hope that it will be useful, but        ##
12fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
13fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
14fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## for more details.                                                          ##
15fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj##                                                                            ##
16fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## You should have received a copy of the GNU General Public License          ##
17fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj## along with this program;  if not, write to the Free Software               ##
184548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
19fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj##                                                                            ##
20fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj################################################################################
21fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
22fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# File :         xinetd_tests.sh
23fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
24fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Description:   Test Basic functionality of xinetd command.
25fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#                Test #1: xinetd starts programs that provide Internet services.
26fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
27fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Author:        Manoj Iyer, manjo@mail.utexas.edu
28fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
29fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# History:       Mar 04 2003 - Created - Manoj Iyer.
30fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
31fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Function:     chk_ifexists
32fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
33fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Description:  - Check if command required for this test exits.
34fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
35fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Input:        - $1 - calling test case.
36fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - $2 - command that needs to be checked.
3737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman#
38fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Return:       - zero on success.
39fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - non-zero on failure.
40fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojchk_ifexists()
41fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj{
42a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    which $2 > $LTPTMP/tst_xinetd.err 2>&1
43a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
44fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
45fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
46fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brkm TBROK NULL "$1: command $2 not found."
47fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
48fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    return $RC
49fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj}
50fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
51fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
52fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Function: init
53fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
54fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Description:  - Check if command required for this test exits.
5537550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman#               - Create temporary directories required for this test.
56fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - Initialize global variables.
5737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman#
58fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Return:       - zero on success.
59fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - non-zero on failure.
60fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojinit()
61fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj{
62fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # Initialize global variables.
63fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    export TST_TOTAL=2
64fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    export TCID="xinetd"
65fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    export TST_COUNT=0
66fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
67fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # Inititalize cleanup function.
68fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    trap "cleanup" 0
69fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
70fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # create the temporary directory used by this testcase
71fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ -z $TMP ]
72fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
73fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        LTPTMP=/tmp/tst_xinetd.$$
74fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    else
75fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        LTPTMP=$TMP/tst_xinetd.$$
76fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
77fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
78a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    mkdir -p $LTPTMP > /dev/null 2>&1
79a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
80fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
81fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
82fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj         tst_brkm TBROK NULL "INIT: Unable to create temporary directory"
83fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj         return $RC
84fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
85fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
86d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    # sometimes the default telnet may be /usr/kerberos/bin/telnet
87d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    TELNET_COMM='/usr/bin/telnet'
88d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
89fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # check if commands tst_*, xinetd, awk exists.
90fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    chk_ifexists INIT tst_resm   || return $RC
91fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    chk_ifexists INIT xinetd     || return $RC
92fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    chk_ifexists INIT diff       || return $RC
93d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    chk_ifexists INIT ip         || return $RC
94d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    chk_ifexists INIT $TELNET_COMM || return $RC
95d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
96d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    IPV6_ENABLED=0
97d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    ip a | grep inet6 > /dev/null 2>&1
98d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    if [ $? -eq 0 ]
99d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    then
100d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        IPV6_ENABLED=1
101d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    fi
102fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
1033db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # Create custom xinetd.conf file.
1043db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # tst_xinetd.conf.1 config file has telnet service disabled.
105a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    cat > $LTPTMP/tst_xinetd.conf.1 <<-EOF
1063db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyundefaults
1073db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun{
1083db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    instances      = 25
1093db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    log_type       = FILE /var/log/servicelog
1103db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    log_on_success = HOST PID
111a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    log_on_failure = HOST
1123db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    disabled       = telnet
1133db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun}
1143db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunEOF
115a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
1163db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
1173db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # tst_xinetd.conf.2 config file has telnet enabled.
118a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    cat > $LTPTMP/tst_xinetd.conf.2 <<-EOF
1193db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyundefaults
1203db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun{
1213db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    instances      = 25
1223db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    log_type       = FILE /var/log/servicelog
1233db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    log_on_success = HOST PID
1243db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    log_on_failure = HOST
1253db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # disabled       = telnet
1263db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun}
1273db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
1283db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyunservice telnet
1293db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun{
1303db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    socket_type     = stream
1313db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    protocol        = tcp
1323db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    wait            = no
1333db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    user            = root
1343db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    server          = /usr/sbin/in.telnetd
1353db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    server_args     = -n
1363db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    no_access       =
1373db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun}
1383db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunEOF
139a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
140fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
141fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # Create expected file with telnet disabled.
142a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    cat > $LTPTMP/tst_xinetd.exp.1 <<-EOF
143d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyuntelnet: connect to address 127.0.0.1: Connection refused
1443db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunEOF
145a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
146fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
147fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
148fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
149fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brkm TBROK  NULL \
150fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "INIT: unable to create expected file $LTPTMP/tst_xinetd.exp.1"
151fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
152fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
153fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
154d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    if [ $IPV6_ENABLED -eq 1 ]
155d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    then
156a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        cat > $LTPTMP/tst_xinetd.exp.1.ipv6 <<-EOF
157d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyuntelnet: connect to address ::1: Connection refused
158d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunEOF
159a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
160d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
161d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        if [ $RC -ne 0 ]
162d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        then
163d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            tst_brkm TBROK NULL \
164d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun                "INIT: unable to create expected file $LTPTMP/tst_xinetd.exp.1"
165d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        fi
166d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    fi
167d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
168fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # Create expected file with telnet enabled.
169a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    cat > $LTPTMP/tst_xinetd.exp.2 <<-EOF
1703db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunTrying 127.0.0.1...
171d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunConnected to 127.0.0.1.
1723db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunEscape character is '^]'.
1733db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunConnection closed by foreign host.
1743db8657b93cd11e428067e89cddd0bfb36b2b440Xie LingyunEOF
175a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
176fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
177fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
178fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
179fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brkm TBROK  NULL \
180d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            "INIT: unable to create expected file $LTPTMP/tst_xinetd.exp.2"
181fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
182fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
183fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
184d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    if [ $IPV6_ENABLED -eq 1 ]
185d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    then
186a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        cat > $LTPTMP/tst_xinetd.exp.2.ipv6 <<-EOF
187d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunTrying ::1...
188d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunConnected to ::1.
189d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunEscape character is '^]'.
190d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunConnection closed by foreign host.
191d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie LingyunEOF
192a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon XuRC=$?
193d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
194d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        if [ $RC -ne 0 ]
195d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        then
196d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            tst_brkm TBROK NULL \
197d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun                "INIT: unable to create expected file $LTPTMP/tst_xinetd.exp.2.ipv6"
198d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        fi
199d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    fi
200d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
201fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    return $RC
202fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj}
203fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
204fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
205fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Function:     cleanup
206fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
20737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# Description:  - remove temporaty files and directories.
208fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
209fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Return:       - zero on success.
210fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - non-zero on failure.
211fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojcleanup()
212fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj{
2133db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # restore the original xinetd.conf if a back up exits.
2143db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    if [ -f /etc/xinetd.conf.orig ]
2153db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    then
2163db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        mv /etc/xinetd.conf.orig /etc/xinetd.conf \
217a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu            > $LTPTMP/tst_xinetd.err 2>&1
218a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
2193db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        if [ $RC -ne 0 ]
2203db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        then
2213db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_res TINFO $LTPTMP/tst_xinetd.err \
2223db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            "CLEANUP: failed restoring original xinetd.conf RC=$RC. Details:"
2233db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        fi
2243db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
2253db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        sleep 1s
2263db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
2273db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        # restoring original services
228a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        /etc/init.d/xinetd restart > $LTPTMP/tst_xinetd.err 2>&1
229a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
2303db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        if [ $RC -ne 0 ]
2313db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        then
2323db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_res TINFO $LTPTMP/tst_xinetd.err \
2333db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            "CLEANUP: failed restoring original services RC=$RC. Details:"
2343db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        fi
2353db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    fi
236fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
237fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    # remove all the temporary files created by this test.
238fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    tst_resm TINFO "CLEAN: removing $LTPTMP"
239fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    rm -fr $LTPTMP
240fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj}
241fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
242fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
243fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Function:     test01
244fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
245fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Description:  - Test that xinetd reads the configuration file and starts or
246fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#                 stops services.
247fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - restart xinetd with configuration file with telnet disabled.
248fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - telnet to locahost should fail.
249fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - restart xinetd with configuration file with telnet enabled.
250fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - telnet to locahost should work.
25137550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman#
252fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Return:       - zero on success.
253fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - non-zero on failure.
254fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojtest01()
255fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj{
256fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    TCID=xinetd01
257fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    TST_COUNT=1
258fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    nhops=0             # Number of hops required to get to host.
259fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
260fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    tst_resm TINFO "Test #1: restart xinetd with telnet disabled."
26137550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman
2623db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # create a backup of the original xinetd.conf file.
263a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    mv /etc/xinetd.conf /etc/xinetd.conf.orig > $LTPTMP/tst_xinetd.err 2>&1
264a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
265fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
266fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
267fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brk TBROK $LTPTMP/tst_xinetd.err NULL \
268fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: Failed while backing up original xinetd.conf. Details"
269fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
270fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
271fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
2723db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # install the new config file with telnet disabled.
273a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    mv $LTPTMP/tst_xinetd.conf.1 /etc/xinetd.conf > $LTPTMP/tst_xinetd.err 2>&1
274a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
275fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
276fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
277fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brk TBROK $LTPTMP/tst_xinetd.err NULL \
278fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: Failed installing new xinetd.conf in /etc. Details:"
279fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
280fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
281fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
282fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    tst_resm TINFO "Test #1: new xinetd.conf installed with telnet disabled."
283fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
2843db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    sleep 1s
285fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
2863db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # restart xinetd to re-start the services
287a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    /etc/init.d/xinetd restart > $LTPTMP/tst_xinetd.out 2>&1
288a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
289fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
290fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
291fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_res TFAIL $LTPTMP/tst_xinetd.out \
292fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj       "Test #1: unable to restart service with telnet disabled. Details:"
293fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
2943db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    else
2953db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        # even if xinetd restart has zero exit value,
2963db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        # make certain there was no failure.
297a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        grep -i "fail" $LTPTMP/tst_xinetd.out > $LTPTMP/tst_xinetd.err 2>&1
298a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
2993db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        if [ $RC -eq 0 ]
3003db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        then
3013db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_res TFAIL $LTPTMP/tst_xinetd.err \
3023db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun                "Test #1: xinetd failed to restart. Details"
3033db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            return $RC
3043db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        else
3053db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            RC=0
3063db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_resm TINFO \
3073db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun                "Test #1: xinetd re-started successfully with telnet disabled."
3083db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        fi
3093db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    fi
3103db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
3113db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # Not checking for exit code from telnet command because telnet is
3123db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # not terminated by the test gracefully.
313d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    if [ $IPV6_ENABLED -eq 1 ]
314d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    then
315d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        echo "" | $TELNET_COMM ::1 2>$LTPTMP/tst_xinetd.out.ipv6 1>/dev/null
316d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        diff -iwB $LTPTMP/tst_xinetd.out.ipv6  $LTPTMP/tst_xinetd.exp.1.ipv6 \
317a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu            > $LTPTMP/tst_xinetd.err.ipv6 2>&1
318a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
319d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        if [ $RC -ne 0 ]
320d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        then
321d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            tst_res TFAIL $LTPTMP/tst_xinetd.err.ipv6 \
322d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun                "Test #1: with telnet diabled expected out differs RC=$RC. Details:"
323d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            return $RC
324d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        fi
325d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    fi
326d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
327d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    echo "" | $TELNET_COMM 127.0.0.1 2>$LTPTMP/tst_xinetd.out 1>/dev/null
3283db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    diff -iwB $LTPTMP/tst_xinetd.out  $LTPTMP/tst_xinetd.exp.1 \
329a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        > $LTPTMP/tst_xinetd.err 2>&1
330a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
331fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
332fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
333fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_res TFAIL $LTPTMP/tst_xinetd.err \
334fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: with telnet diabled expected out differs RC=$RC. Details:"
335fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
336fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
337fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
338fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    tst_resm TINFO "Test #1: restart xinetd with telnet enabled."
3393db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # install the xinetd config file with telnet enabled.
340a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    mv $LTPTMP/tst_xinetd.conf.2 /etc/xinetd.conf > $LTPTMP/tst_xinetd.err 2>&1
341a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
342fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
343fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
344fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_brk TBROK $LTPTMP/tst_xinetd.err NULL \
345fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: Failed installing new xinetd.conf in /etc. Details:"
346fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
347fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
348fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
349fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    tst_resm TINFO "Test #1: new xinetd.conf installed with telnet enabled."
35037550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman
3513db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    sleep 1s
352fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
3533db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # restart services.
354a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    /etc/init.d/xinetd restart > $LTPTMP/tst_xinetd.out 2>&1
355a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
356fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
357fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
358fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_res TFAIL $LTPTMP/tst_xinetd.out \
359fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: unable to restart services with telnet enabled. Details:"
360fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
3613db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    else
3623db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        # even if restart has a zero exit value double check for failure.
363a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        grep -i "fail" $LTPTMP/tst_xinetd.out > $LTPTMP/tst_xinetd.err 2>&1
364a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
3653db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        if [ $RC -eq 0 ]
3663db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        then
3673db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_res TFAIL $LTPTMP/tst_xinetd.err \
3683db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun                "Test #1: xinetd failed to restart. Details"
3693db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            return $RC
3703db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        else
3713db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            RC=0
3723db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun            tst_resm TINFO \
3733db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun                "Test #1: xinetd re-started successfully with telnet enabled."
3743db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        fi
3753db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    fi
3763db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
3773db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # Not checking for exit code from telnet command because telnet is
3783db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    # not terminated by the test gracefully.
379d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    if [ $IPV6_ENABLED -eq 1 ]
380d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    then
381d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        echo "" | $TELNET_COMM ::1 >$LTPTMP/tst_xinetd.out.ipv6 2>&1
382d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        diff -iwB $LTPTMP/tst_xinetd.out.ipv6  $LTPTMP/tst_xinetd.exp.2.ipv6 \
383a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu            > $LTPTMP/tst_xinetd.err.ipv6 2>&1
384a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        RC=$?
385d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        if [ $RC -ne 0 ]
386d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        then
387d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            tst_res TFAIL $LTPTMP/tst_xinetd.err.ipv6 \
388d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun                "Test #1: with telnet diabled expected out differs RC=$RC. Details:"
389d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            return $RC
390d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        else
391d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            tst_resm TPASS \
392d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun            "Test #1: xinetd reads the config file and starts or stops IPv6 services."
393d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun        fi
394d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    fi
395d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun
396d0a43a07e4e0fdfe06c5aad6b3266379c112aefdXie Lingyun    echo "" | $TELNET_COMM 127.0.0.1 > $LTPTMP/tst_xinetd.out 2>&1
3973db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun
3983db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    diff -iwB $LTPTMP/tst_xinetd.out  $LTPTMP/tst_xinetd.exp.2 \
399a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu        > $LTPTMP/tst_xinetd.err 2>&1
400a4f5e23bb7dbbe71a52bc89b43edea35e2567382Simon Xu    RC=$?
401fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    if [ $RC -ne 0 ]
402fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    then
403fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        tst_res TFAIL $LTPTMP/tst_xinetd.err \
404fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj            "Test #1: expected output differes from actual. Details:"
405fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj        return $RC
4063db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun    else
4073db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        tst_resm TPASS \
4083db8657b93cd11e428067e89cddd0bfb36b2b440Xie Lingyun        "Test #1: xinetd reads the config file and starts or stops services."
409fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj    fi
410fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
41137550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman    return $RC
412fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj}
413fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
414fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
415fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Function:    main
416fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
417fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj# Description:    - Execute all tests and report results.
418fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#
41937550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# Exit:            - zero on success
420fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj#               - non-zero on failure.
421fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
422fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojinit || exit $?
423fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
424fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojtest01 || RC=$?
425fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanoj
426fb8c7b331732cfc0eb37a480c07e7d06bcb68763iyermanojexit $RC
427