diff options
-rwxr-xr-x | selftest/target/Samba3.pm | 21 | ||||
-rwxr-xr-x | source3/script/tests/test_dfree_quota.sh | 37 | ||||
-rwxr-xr-x | source3/selftest/tests.py | 2 |
3 files changed, 54 insertions, 6 deletions
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index e8f35e36575..27036b5ac74 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -614,6 +614,7 @@ sub setup_fileserver($$) push(@dirs, $dfree_share_dir); push(@dirs, "$dfree_share_dir/subdir1"); push(@dirs, "$dfree_share_dir/subdir2"); + push(@dirs, "$dfree_share_dir/subdir3"); my $valid_users_sharedir="$share_dir/valid_users"; push(@dirs,$valid_users_sharedir); @@ -1105,7 +1106,6 @@ sub createuser($$$$) warn("Unable to set password for $username account\n$cmd"); return undef; } - print "DONE\n"; } sub provision($$$$$$$$) @@ -1335,8 +1335,10 @@ sub provision($$$$$$$$) my ($gid_nobody, $gid_nogroup, $gid_root, $gid_domusers, $gid_domadmins); my ($gid_userdup, $gid_everyone); my ($gid_force_user); + my ($uid_user1); + my ($uid_user2); - if ($unix_uid < 0xffff - 7) { + if ($unix_uid < 0xffff - 10) { $max_uid = 0xffff; } else { $max_uid = $unix_uid; @@ -1350,6 +1352,8 @@ sub provision($$$$$$$$) $uid_pdbtest_wkn = $max_uid - 6; $uid_force_user = $max_uid - 7; $uid_smbget = $max_uid - 8; + $uid_user1 = $max_uid - 9; + $uid_user2 = $max_uid - 10; if ($unix_gids[0] < 0xffff - 8) { $max_gid = 0xffff; @@ -1771,9 +1775,14 @@ sub provision($$$$$$$$) wide links = yes [dfq] path = $shrdir/dfree - vfs objects = fake_dfq + vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq admin users = $unix_name include = $dfqconffile +[dfq_owner] + path = $shrdir/dfree + vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq + inherit owner = yes + include = $dfqconffile "; close(CONF); @@ -1799,6 +1808,8 @@ userdup:x:$uid_userdup:$gid_userdup:userdup gecos:$prefix_abs:/bin/false pdbtest_wkn:x:$uid_pdbtest_wkn:$gid_everyone:pdbtest_wkn gecos:$prefix_abs:/bin/false force_user:x:$uid_force_user:$gid_force_user:force user gecos:$prefix_abs:/bin/false smbget_user:x:$uid_smbget:$gid_domusers:smbget_user gecos:$prefix_abs:/bin/false +user1:x:$uid_user1:$gid_nogroup:user1 gecos:$prefix_abs:/bin/false +user2:x:$uid_user2:$gid_nogroup:user2 gecos:$prefix_abs:/bin/false "; if ($unix_uid != 0) { print PASSWD "root:x:$uid_root:$gid_root:root gecos:$prefix_abs:/bin/false @@ -1873,12 +1884,16 @@ force_user:x:$gid_force_user: createuser($self, $unix_name, $password, $conffile) || die("Unable to create user"); createuser($self, "force_user", $password, $conffile) || die("Unable to create force_user"); createuser($self, "smbget_user", $password, $conffile) || die("Unable to create smbget_user"); + createuser($self, "user1", $password, $conffile) || die("Unable to create user1"); + createuser($self, "user2", $password, $conffile) || die("Unable to create user2"); open(DNS_UPDATE_LIST, ">$prefix/dns_update_list") or die("Unable to open $$prefix/dns_update_list"); print DNS_UPDATE_LIST "A $server. $server_ip\n"; print DNS_UPDATE_LIST "AAAA $server. $server_ipv6\n"; close(DNS_UPDATE_LIST); + print "DONE\n"; + $ret{SERVER_IP} = $server_ip; $ret{SERVER_IPV6} = $server_ipv6; $ret{NMBD_TEST_LOG} = "$prefix/nmbd_test.log"; diff --git a/source3/script/tests/test_dfree_quota.sh b/source3/script/tests/test_dfree_quota.sh index 79b8d7c2a3a..6e227c4b5ad 100755 --- a/source3/script/tests/test_dfree_quota.sh +++ b/source3/script/tests/test_dfree_quota.sh @@ -5,7 +5,7 @@ if [ $# -lt 6 ]; then cat <<EOF -Usage: test_dfree_quota.sh SERVER DOMAIN USERNAME PASSWORD LOCAL_PATH SMBCLIENT SMBCQUOTAS +Usage: test_dfree_quota.sh SERVER DOMAIN USERNAME PASSWORD LOCAL_PATH SMBCLIENT SMBCQUOTAS SMBCACLS EOF exit 1; fi @@ -18,7 +18,8 @@ ENVDIR=`dirname $5` WORKDIR=$5/dfree smbclient=$6 smbcquotas=$7 -shift 7 +smbcacls=$8 +shift 8 failed=0 CONFFILE=$ENVDIR/lib/dfq.conf @@ -35,6 +36,8 @@ conf_lines() { local gid uid=$(id -u $USERNAME) gid=$(id -g $USERNAME) + uid1=$(id -u user1) + uid2=$(id -u user2) cat <<ABC conf1:df:block size = 512:disk free = 10:disk size = 20 conf2:df:block size = 1024:disk free = 10:disk size = 20 @@ -70,6 +73,9 @@ notenforce:udflt:block size = 4096:qflags = 0 nfs:df:block size = 4096:disk free = 10:disk size = 80 nfs:u$uid:block size = 4096:hard limit = 40:soft limit = 40:cur blocks = 37 nfs:udflt:nosys = 1 +confdfqp:df:block size = 4096:disk free = 10:disk size = 80 +confdfqp:u$uid1:block size = 4096:hard limit = 40:soft limit = 40:cur blocks = 36 +confdfqp:u$uid2:block size = 4096:hard limit = 41:soft limit = 41:cur blocks = 36 ABC } @@ -185,5 +191,32 @@ test_smbclient_dfree "Test dfree share root quota not enforced" dfq "." "notenfo #FS quota not implemented (NFS case) test_smbclient_dfree "Test dfree share root FS quota not implemented" dfq "." "nfs ." "160 1024. 12" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=`expr $failed + 1` +#test for dfree when owner is inherited +#setup two folders with different owners +rm -rf $WORKDIR/subdir3/* +for d in / subdir3 +do + $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -D "ACL:$SERVER\user1:ALLOWED/0x0/FULL" //$SERVER/dfq $d > /dev/null 2>&1 + $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -a "ACL:$SERVER\user1:ALLOWED/0x0/FULL" //$SERVER/dfq $d || failed=`expr $failed + 1` + $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -D "ACL:$SERVER\user2:ALLOWED/0x0/FULL" //$SERVER/dfq $d > /dev/null 2>&1 + $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -a "ACL:$SERVER\user2:ALLOWED/0x0/FULL" //$SERVER/dfq $d || failed=`expr $failed + 1` +done + +$VALGRIND $smbclient //$SERVER/dfq -c "cd subdir3; mkdir user1" -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 > /dev/null 2>&1 || failed=`expr $failed + 1` +$VALGRIND $smbclient //$SERVER/dfq -c "cd subdir3; mkdir user2" -Uuser2%$PASSWORD --option=clientmaxprotocol=SMB3 > /dev/null 2>&1 || failed=`expr $failed + 1` +#test quotas +test_smbclient_dfree "Test dfree without inherit owner - user1 at user1" \ + dfq "subdir3/user1" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ + -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=`expr $failed + 1` +test_smbclient_dfree "Test dfree without inherit owner - user1 at user2" \ + dfq "subdir3/user2" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ + -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=`expr $failed + 1` +test_smbclient_dfree "Test dfree with inherit owner - user1 at user1" \ + dfq_owner "subdir3/user1" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ + -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=`expr $failed + 1` +test_smbclient_dfree "Test dfree with inherit owner - user1 at user2" \ + dfq_owner "subdir3/user2" "confdfqp subdir3/user1 confdfqp subdir3/user2" "164 1024. 20" \ + -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=`expr $failed + 1` + setup_conf exit $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 4736ebc8379..d085f14cff4 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -184,7 +184,7 @@ for env in ["nt4_dc"]: for env in ["fileserver"]: plantestsuite("samba3.blackbox.preserve_case (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_preserve_case.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3]) plantestsuite("samba3.blackbox.dfree_command (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_dfree_command.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3]) - plantestsuite("samba3.blackbox.dfree_quota (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_dfree_quota.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', smbclient3, smbcquotas]) + plantestsuite("samba3.blackbox.dfree_quota (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_dfree_quota.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', smbclient3, smbcquotas, smbcacls]) plantestsuite("samba3.blackbox.valid_users (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_valid_users.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3]) plantestsuite("samba3.blackbox.offline (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_offline.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/offline', smbclient3]) plantestsuite("samba3.blackbox.shadow_copy2 (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_shadow_copy.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/shadow', smbclient3]) |