push(@dirs, "$delete_unwrite_sharedir/delete_veto_yes");
push(@dirs, "$delete_unwrite_sharedir/delete_veto_no");
+ my $volume_serial_number_sharedir="$share_dir/volume_serial_number";
+ push(@dirs, $volume_serial_number_sharedir);
+
my $ip4 = Samba::get_ipv4_addr("FILESERVER");
my $fileserver_options = "
kernel change notify = yes
virusfilter:infected file action = rename
virusfilter:scan on close = yes
+[volumeserialnumber]
+ path = $volume_serial_number_sharedir
+ volume serial number = 0xdeadbeef
+
[homes]
comment = Home directories
browseable = No
--- /dev/null
+#!/bin/sh
+#
+# This verifies setting the volume serial number parameter for a share works.
+#
+
+if [ $# -lt 5 ]; then
+ echo "Usage: $0 SERVER_IP USERNAME PASSWORD SHARENAME SMBCLIENT"
+ exit 1
+fi
+
+SERVER_IP="$1"
+USERNAME="$2"
+PASSWORD="$3"
+SHARENAME="$4"
+SMBCLIENT="$5"
+
+SMBCLIENT="$VALGRIND ${SMBCLIENT}"
+failed=0
+
+incdir=$(dirname "$0")/../../../testprogs/blackbox
+. "$incdir/subunit.sh"
+
+test_serial_number() {
+
+ output=$($SMBCLIENT "//$SERVER_IP/$SHARENAME" -U "$USERNAME%$PASSWORD" -c "volume") || return 1
+ echo "smbclient volume on $SHARENAME returned: \"$output\""
+
+ expected="0xdeadbeef"
+ echo "$output" | grep $expected || {
+ echo "Expected output containing \"$expected\", got: \"$output\""
+ return 1
+ }
+}
+
+testit "volume serial number for share $SHARENAME" test_serial_number || failed=$((failed+1))
+
+exit "$failed"
plantestsuite("samba3.blackbox.timestamps", env,
[os.path.join(samba3srcdir, "script/tests/test_timestamps.sh"),
'$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', smbclient3])
+ plantestsuite("samba3.blackbox.volumeserialnumber", env,
+ [os.path.join(samba3srcdir, "script/tests/test_volume_serial_number.sh"),
+ '$SERVER_IP', '$USERNAME', '$PASSWORD', 'volumeserialnumber', smbclient3])
plantestsuite("samba3.blackbox.smb1_system_security", env + "_smb1_done",
[os.path.join(samba3srcdir, "script/tests/test_smb1_system_security.sh"),
'$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', smbtorture3, net, 'tmp'])
const struct loadparm_substitution *lp_sub,
int snum)
{
- return str_checksum(lp_servicename(talloc_tos(), lp_sub, snum)) ^
+ int serial = lp_volume_serial_number(snum);
+ return serial != -1 ? serial:
+ str_checksum(lp_servicename(talloc_tos(), lp_sub, snum)) ^
(str_checksum(get_local_machine_name())<<16);
}