nsswitch: Add tests to lookup user via getpwnam
authorAndreas Schneider <asn@samba.org>
Mon, 2 Jul 2018 14:18:52 +0000 (16:18 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 4 Jul 2018 19:07:10 +0000 (21:07 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13503

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
nsswitch/tests/test_wbinfo_user_info.sh
selftest/knownfail.d/upn_handling
source3/selftest/tests.py

index 2803ac1408bea42a577e7bd7e38a412f96fe4dee..da30f97be74acefba2b9c871fa1da28c6dfb4c8d 100755 (executable)
@@ -2,19 +2,20 @@
 # Blackbox test for wbinfo lookup for account name and upn
 # Copyright (c) 2018 Andreas Schneider <asn@samba.org>
 
-if [ $# -lt 5 ]; then
+if [ $# -lt 6 ]; then
 cat <<EOF
-Usage: $(basename $0) DOMAIN REALM USERNAME1 UPN_NAME1 USERNAME2 UPN_NAME2
+Usage: $(basename $0) DOMAIN REALM OWN_DOMAIN USERNAME1 UPN_NAME1 USERNAME2 UPN_NAME2
 EOF
 exit 1;
 fi
 
 DOMAIN=$1
 REALM=$2
-USERNAME1=$3
-UPN_NAME1=$4
-USERNAME2=$5
-UPN_NAME2=$6
+OWN_DOMAIN=$3
+USERNAME1=$4
+UPN_NAME1=$5
+USERNAME2=$6
+UPN_NAME2=$7
 shift 6
 
 failed=0
@@ -31,9 +32,9 @@ test_user_info()
 {
        local cmd out ret user domain upn userinfo
 
-       domain="$1"
-       user="$2"
-       upn="$3"
+       local domain="$1"
+       local user="$2"
+       local upn="$3"
 
        if [ $# -lt 3 ]; then
                userinfo="$domain/$user"
@@ -62,6 +63,39 @@ test_user_info()
        return 0
 }
 
+test_getpwnam()
+{
+       local cmd out ret
+
+       local lookup_username=$1
+       local expected_return=$2
+       local expected_output=$3
+
+       cmd='getent passwd $lookup_username'
+       eval echo "$cmd"
+       out=$(eval $cmd)
+       ret=$?
+
+       if [ $ret -ne $expected_return ]; then
+               echo "return code: $ret, expected return code is: $expected_return"
+               echo "$out"
+               return 1
+       fi
+
+       if [ -n "$expected_output" ]; then
+               echo "$out" | grep "$expected_output"
+               ret=$?
+
+               if [ $ret -ne 0 ]; then
+                       echo "Unable to find $expected_output in:"
+                       echo "$out"
+                       return 1
+               fi
+       fi
+
+       return 0
+}
+
 testit "name_to_sid.domain.$USERNAME1" $wbinfo_tool --name-to-sid $DOMAIN/$USERNAME1 || failed=$(expr $failed + 1)
 testit "name_to_sid.upn.$UPN_NAME1" $wbinfo_tool --name-to-sid $UPN1 || failed=$(expr $failed + 1)
 
@@ -80,4 +114,23 @@ UPN3="$UPN_NAME3@${REALM}.upn"
 testit "name_to_sid.upn.$UPN_NAME3" $wbinfo_tool --name-to-sid $UPN3 || failed=$(expr $failed + 1)
 testit "user_info.upn.$UPN_NAME3" test_user_info $DOMAIN $USERNAME3 $UPN3 || failed=$(expr $failed + 1)
 
+testit "getpwnam.domain.$DOMAIN.$USERNAME1" test_getpwnam "$DOMAIN/$USERNAME1" 0 "$DOMAIN/$USERNAME1" || failed=$(expr $failed + 1)
+
+testit "getpwnam.upn.$UPN_NAME1" test_getpwnam "$UPN1" 0 "$DOMAIN/$USERNAME1" || failed=$(expr $failed + 1)
+
+# We should not be able to lookup the user just by the name
+test_ret=0
+test_output="$DOMAIN/$USERNAME1"
+
+if [ "$ENVNAME" = "ad_member" ]; then
+       test_ret=2
+       test_output=""
+fi
+if [ "$ENVNAME" = "fl2008r2dc" ]; then
+       test_ret=0
+       test_output="$OWN_DOMAIN/$USERNAME1"
+fi
+
+testit "getpwnam.local.$USERNAME1" test_getpwnam "$USERNAME1" $test_ret $test_output || failed=$(expr $failed + 1)
+
 exit $failed
index bcbedb4f90311a8fabb62ed3c704df6ed1a8fa1e..7dc9b71dc5e83a3fd297121d10362bf12095e7af 100644 (file)
@@ -1,8 +1,10 @@
 ^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.ad_member
 ^samba3\.wbinfo_user_info\.user_info\.upn\.testdenied_upn.ad_member
+^samba3\.wbinfo_user_info\.getpwnam\.local\.alice.ad_member
 ^samba3\.wbinfo_user_info\.user_info\.domain\.alice.fl2008r2dc
 ^samba3\.wbinfo_user_info\.user_info\.upn\.alice.fl2008r2dc
 ^samba3\.wbinfo_user_info\.user_info\.domain\.jane.fl2008r2dc
 ^samba3\.wbinfo_user_info\.user_info\.upn\.jane\.doe.fl2008r2dc
 ^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.fl2008r2dc
 ^samba3\.wbinfo_user_info\.user_info\.upn\.testdenied_upn.fl2008r2dc
+^samba3\.wbinfo_user_info\.getpwnam\.local\.alice.fl2008r2dc
index 983f0ac1ae6bc3f4153581e76d3dbd09259288d9..c5356d8324472828d1094db3f02244d8dcb53de8 100755 (executable)
@@ -219,13 +219,13 @@ env = "ad_member:local"
 plantestsuite("samba3.wbinfo_user_info", env,
               [ os.path.join(srcdir(),
                             "nsswitch/tests/test_wbinfo_user_info.sh"),
-                '$DOMAIN', '$REALM', 'alice', 'alice', 'jane', 'jane.doe' ])
+                '$DOMAIN', '$REALM', '$DOMAIN', 'alice', 'alice', 'jane', 'jane.doe' ])
 
 env = "fl2008r2dc:local"
 plantestsuite("samba3.wbinfo_user_info", env,
               [ os.path.join(srcdir(),
                             "nsswitch/tests/test_wbinfo_user_info.sh"),
-                '$TRUST_DOMAIN', '$TRUST_REALM', 'alice', 'alice', 'jane', 'jane.doe' ])
+                '$TRUST_DOMAIN', '$TRUST_REALM', '$DOMAIN', 'alice', 'alice', 'jane', 'jane.doe' ])
 
 env = "ad_member"
 t = "WBCLIENT-MULTI-PING"