Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(RHEL-13193) fix(url-lib.sh): nfs_already_mounted() with trailing slash in nfs path #87

Merged
merged 1 commit into from
Jul 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion modules.d/45url-lib/url-lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ nfs_already_mounted() {
local server="$1" path="$2" s="" p=""
while read -r src mnt rest || [ -n "$src" ]; do
splitsep ":" "$src" s p
p=${p%/}
if [ "$server" = "$s" ]; then
if [ "$path" = "$p" ]; then
echo "$mnt"
Expand All @@ -153,7 +154,7 @@ nfs_fetch_url() {
local filepath="${path%/*}" filename="${path##*/}" mntdir=""

# skip mount if server:/filepath is already mounted
mntdir=$(nfs_already_mounted "$server" "$path")
mntdir=$(nfs_already_mounted "$server" "$filepath")
if [ -z "$mntdir" ]; then
local mntdir
mntdir="$(mkuniqdir /run nfs_mnt)"
Expand Down
20 changes: 20 additions & 0 deletions test/TEST-20-NFS/client-init.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/sh
: > /dev/watchdog
. /lib/dracut-lib.sh
. /lib/url-lib.sh

export PATH=/usr/sbin:/usr/bin:/sbin:/bin
command -v plymouth > /dev/null 2>&1 && plymouth --quit
Expand All @@ -23,6 +24,25 @@ while read -r dev _ fstype opts rest || [ -n "$dev" ]; do
break
done < /proc/mounts

if [ "$fstype" = "nfs" -o "$fstype" = "nfs4" ]; then

serverip=${dev%:*}
path=${dev#*:}
echo serverip="${serverip}"
echo path="${path}"
echo /proc/mounts status
cat /proc/mounts

echo test:nfs_fetch_url nfs::"${serverip}":"${path}"/root/fetchfile
if nfs_fetch_url nfs::"${serverip}":"${path}"/root/fetchfile /run/nfsfetch.out; then
echo nfsfetch-OK
echo "nfsfetch-OK" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker2
fi
else
echo nfsfetch-BYPASS fstype="${fstype}"
echo "nfsfetch-OK" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker2
fi

: > /dev/watchdog

sync
Expand Down
14 changes: 13 additions & 1 deletion test/TEST-20-NFS/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,15 @@ client_test() {

# Need this so kvm-qemu will boot (needs non-/dev/zero local disk)
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
dd if=/dev/zero of="$TESTDIR"/marker2.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker2.img marker2

if dhclient --help 2>&1 | grep -q -F -- '--timeout' 2> /dev/null; then
cmdline="$cmdline rd.net.timeout.dhcp=3"
cmdline="$cmdline rd.net.timeout.dhcp=30"
fi

"$testdir"/run-qemu \
Expand Down Expand Up @@ -126,6 +128,11 @@ client_test() {
return 1
fi

if ! grep -U --binary-files=binary -F -m 1 -q nfsfetch-OK "$TESTDIR"/marker2.img; then
echo "CLIENT TEST END: $test_name [FAILED - NFS FETCH FAILED]"
return 1
fi

echo "CLIENT TEST END: $test_name [OK]"
return 0
}
Expand Down Expand Up @@ -263,6 +270,7 @@ test_setup() {
done
type -P portmap > /dev/null && inst_multiple portmap
type -P rpcbind > /dev/null && inst_multiple rpcbind

[ -f /etc/netconfig ] && inst_multiple /etc/netconfig
type -P dhcpd > /dev/null && inst_multiple dhcpd
[ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
Expand Down Expand Up @@ -308,6 +316,7 @@ test_setup() {
(
cd "$initdir" || exit
mkdir -p dev sys proc etc run root usr var/lib/nfs/rpc_pipefs
echo "TEST FETCH FILE" > root/fetchfile
)

inst_multiple sh shutdown poweroff stty cat ps ln ip dd \
Expand All @@ -321,6 +330,9 @@ test_setup() {

inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_simple "${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh"
inst_simple "${basedir}/modules.d/45url-lib/url-lib.sh" "/lib/url-lib.sh"
inst_simple "${basedir}/modules.d/40network/net-lib.sh" "/lib/net-lib.sh"
inst_simple "${basedir}/modules.d/95nfs/nfs-lib.sh" "/lib/nfs-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"
Expand Down
Loading