jdk/test/sun/net/www/protocol/http/spnegoTest
author jjiang
Wed, 25 May 2016 03:06:24 +0100
changeset 38557 5c485e1ea6fa
parent 32427 c22b7e41adf3
permissions -rw-r--r--
8157635: Fix module dependencies for /sun/* tests Summary: Module declarations for the tests in /sun/* Reviewed-by: alanb Contributed-by: John Jiang <sha.jiang@oracle.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
#! /usr/bin/bash
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
# ATTENTION:
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
#
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
# Please read spnegoReadme first to setup the testing
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
# environment needed
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
# the following ENV should be adjusted to match your environment
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
WWW_REALM=JSL.BEIJING
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
WWW_KDC=jsl-bjlab1.jsl.beijing
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
WWW_URL=http://jsl-bjlab1.jsl.beijing/1.txt
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
PROXY_REALM=JSLDUBLIN.IRELAND.SUN.COM
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
PROXY_KDC=anchor.jsldublin.ireland.sun.com
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
PROXY_URL=http://sceri.prc.sun.com/~ww155710/1.txt
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
PROXY_PARA="-Dhttp.proxyHost=anchor.jsldublin.ireland.sun.com -Dhttp.proxyPort=8080"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
GOOD_PASS='-Duser=olala -Dpass=1q2w#E$R'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
GOOD_KPASS='-Dkuser=olala -Dkpass=1q2w#E$R'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
BAD_PASS='-Duser=olala -Dpass=false'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    21
BAD_KPASS='-Dkuser=olala -Dkpass=false'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
WWW_TAB=www.tab
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
PROXY_TAB=proxy.tab
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
TAB_PATH=/tmp/krb5cc_156710
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
FILE_CONTENT=content_of_web_file
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
# these ENV determines how much to show in terminal. don't edit
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
EXTRA_LOG="-Djava.util.logging.config.file=spnegoLog.properties -Dshowhint"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
ANY_EXCEPTION='Exception'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
IO_EXCEPTION='java.io.IOException'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
PROTO_EXCEPTION='java.net.ProtocolException'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
HEADER_200='HTTP/1.1 200'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
# a java run
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
function runonce {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
  echo Testing $AUTH_TYPE-$TEST_NAME ...
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
  java -Djava.security.krb5.realm=$USE_REALM \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
     -Djava.security.krb5.kdc=$USE_KDC \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
     -Djava.security.auth.login.config=spnegoLogin.conf \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
     -Dhttp.maxRedirects=2 \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
     $AUTH_PREF \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
     $EXTRA_PARA \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
     $EXTRA_LOG \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
     $USER_PASS \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
     $KUSER_PASS \
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
     WebGet $USE_URL 2> err.log > out.log
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
  if [ "$HAS_CACHE" = true ]; then
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
     grep -i 'PROVIDING Kerberos' out.log && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
  else
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
     grep -i 'PROVIDING Kerberos' out.log > /dev/null || echo '....has not query Kerberos user/pass'
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
  fi
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
function testsuite {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
    # normal runs
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
    USER_PASS=$GOOD_PASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
    KUSER_PASS=$GOOD_KPASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
    TEST_NAME=Authenticate
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
    AUTH_PREF=
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
    runonce
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
    grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
    grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
    grep -i "$AUTH_RESPONSE" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
    grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
    grep -i "$HEADER_200" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
    grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
    TEST_NAME="Authenticate with Negotiate"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
    AUTH_PREF=-Dhttp.auth.preference=Negotiate
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
    runonce
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
    # first 40X and ask for authen i author-neg and 200 and success
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
    grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
    grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
    grep -i "$AUTH_RESPONSE" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
    grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
    grep -i "$HEADER_200" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
    grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
    TEST_NAME="Authenticate with Kerberos"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
    AUTH_PREF=-Dhttp.auth.preference=Kerberos
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
    runonce
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
    # first 40X and ask for authen i author-neg and 200 and success
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
    grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
    grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
    grep -i "$AUTH_RESPONSE" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
    grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
    grep -i "$HEADER_200" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
    grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
    TEST_NAME="Authenticate with Basic"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
    AUTH_PREF=-Dhttp.auth.preference=Basic
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
    runonce
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
    # first 40X and ask for authen i author-basic and 200 and success
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
    grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
    grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
    grep -i "$AUTH_RESPONSE" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
    grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
    grep -i "$HEADER_200" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
    grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
    if [ "$HAS_CACHE" = true ]; then
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
        echo 'Skip bad kpass test if HAS_CACHE is true'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
    else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
        # bad kpass should fallback to basic
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
        TEST_NAME="Authenticate fallback"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
        KUSER_PASS=$BAD_KPASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
        AUTH_PREF=
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
        runonce
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
        # first 40X and ask for authen i cannot author-neg but can author-basic and 200 and success
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
        grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
        grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
        grep -i "$AUTH_RESPONSE" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
        grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null  && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
        grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
        grep -i "$HEADER_200" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
        grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
        # auth.pref given, does not fallback
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
        TEST_NAME="Authenticate no fallback"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
        KUSER_PASS=$BAD_KPASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
        AUTH_PREF=-Dhttp.auth.preference=Negotiate
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
        runonce # will fail
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
        # first 40X and ask for authen i cannot author-neg and fail with IO_EXCEPTION
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
        grep -i "$FILE_CONTENT" out.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
        grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
        grep -i "$AUTH_ANY_REQUEST" err.log > /dev/null  && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
        grep -i "$IO_EXCEPTION" err.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
        # bad kpass fallback to basic, but bad pass
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
        TEST_NAME="Authenticate fallback but still cannot go on"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
        KUSER_PASS=$BAD_KPASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
        USER_PASS=$BAD_PASS
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
        AUTH_PREF=
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
        runonce # will fail
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
        # first 40X and ask for authen i cannot author-neg and author-basic again and again and fail with PROTO_EXCEPTION
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
        grep -i "$FILE_CONTENT" out.log > /dev/null && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
        grep -i "$HEADER_40X" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
        grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null  && exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
        grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null  || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
        grep -i "$PROTO_EXCEPTION" err.log > /dev/null || exit $LINENO
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
    fi
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
function testWWW {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
    # WWW Part
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
    AUTH_TYPE=WWW
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
    USE_REALM=$WWW_REALM
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
    USE_KDC=$WWW_KDC
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
    USE_URL=$WWW_URL
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
    EXTRA_PARA=
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
    HEADER_40X='HTTP/1.1 401'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
    AUTH_RESPONSE='WWW-Authenticate:'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
    AUTH_NEG_REQUEST='{Authorization: Negotiate'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
    AUTH_BASIC_REQUEST='{Authorization: Basic'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
    AUTH_ANY_REQUEST='{Authorization:'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
    testsuite
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
    echo Pass WWW
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
function testProxy {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
    # Proxy Part
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
    AUTH_TYPE=Proxy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
    USE_REALM=$PROXY_REALM
90ce3da70b43 Initial load
duke
parents:
diff changeset
   176
    USE_KDC=$PROXY_KDC
90ce3da70b43 Initial load
duke
parents:
diff changeset
   177
    USE_URL=$PROXY_URL
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
    EXTRA_PARA=$PROXY_PARA
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
90ce3da70b43 Initial load
duke
parents:
diff changeset
   180
    HEADER_40X='HTTP/1.1 407'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   181
    AUTH_RESPONSE='Proxy-Authenticate:'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
    AUTH_NEG_REQUEST='{Proxy-Authorization: Negotiate'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
    AUTH_BASIC_REQUEST='{Proxy-Authorization: Basic'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   184
    AUTH_ANY_REQUEST='{Proxy-Authorization:'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
    testsuite
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
    echo Pass Proxy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
HAS_CACHE='false'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
kdestroy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
testWWW
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
testProxy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   195
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
HAS_CACHE='true'
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
#kinit for WWW_REALM
90ce3da70b43 Initial load
duke
parents:
diff changeset
   198
cp $WWW_TAB $TAB_PATH
90ce3da70b43 Initial load
duke
parents:
diff changeset
   199
testWWW
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
#kinit for PRXY_REALM
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
cp $PROXY_TAB $TAB_PATH
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
testProxy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
kdestroy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   205
rm err.log
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
rm out.log
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
32427
c22b7e41adf3 8134984: Text files should end in exactly one newline
martin
parents: 2
diff changeset
   208
exit 0