From 9b52656cc2c15dababfc24992c3e5a00263580b2 Mon Sep 17 00:00:00 2001 From: pjd Date: Wed, 18 Jul 2007 18:07:15 +0000 Subject: Make fstest work out-of-the-box on Solaris: - Solaris' setgroups(2) doesn't change process' effective gid, so set it explicitly. - POSIX doesn't define O_NOFOLLOW. FreeBSD returns EMLINK when target is a symbolic link, but Solaris returns ELOOP then. - Solaris doesn't define O_SHLOCK and O_EXLOCK flags. Approved by: re (rwatson) --- tools/regression/fstest/fstest.c | 4 ++++ tools/regression/fstest/tests/open/16.t | 20 +++++++++++++++----- tools/regression/fstest/tests/open/18.t | 23 +++++++++++++++-------- 3 files changed, 34 insertions(+), 13 deletions(-) (limited to 'tools/regression/fstest') diff --git a/tools/regression/fstest/fstest.c b/tools/regression/fstest/fstest.c index 98211d0..886b90f 100644 --- a/tools/regression/fstest/fstest.c +++ b/tools/regression/fstest/fstest.c @@ -530,6 +530,10 @@ set_gids(char *gids) fprintf(stderr, "cannot change groups: %s\n", strerror(errno)); exit(1); } + if (setegid(gidset[0]) < 0) { + fprintf(stderr, "cannot change effective gid: %s\n", strerror(errno)); + exit(1); + } free(gidset); } diff --git a/tools/regression/fstest/tests/open/16.t b/tools/regression/fstest/tests/open/16.t index 7b4194e..ec31768 100644 --- a/tools/regression/fstest/tests/open/16.t +++ b/tools/regression/fstest/tests/open/16.t @@ -1,7 +1,7 @@ #!/bin/sh # $FreeBSD$ -desc="open returns EMLINK when O_NOFOLLOW was specified and the target is a symbolic link" +desc="open returns EMLINK/ELOOP when O_NOFOLLOW was specified and the target is a symbolic link" dir=`dirname $0` . ${dir}/../misc.sh @@ -12,8 +12,18 @@ n0=`namegen` n1=`namegen` expect 0 symlink ${n0} ${n1} -expect EMLINK open ${n1} O_RDONLY,O_CREAT,O_NOFOLLOW 0644 -expect EMLINK open ${n1} O_RDONLY,O_NOFOLLOW -expect EMLINK open ${n1} O_WRONLY,O_NOFOLLOW -expect EMLINK open ${n1} O_RDWR,O_NOFOLLOW +case "${os}" in +SunOS) + expect ELOOP open ${n1} O_RDONLY,O_CREAT,O_NOFOLLOW 0644 + expect ELOOP open ${n1} O_RDONLY,O_NOFOLLOW + expect ELOOP open ${n1} O_WRONLY,O_NOFOLLOW + expect ELOOP open ${n1} O_RDWR,O_NOFOLLOW + ;; +*) + expect EMLINK open ${n1} O_RDONLY,O_CREAT,O_NOFOLLOW 0644 + expect EMLINK open ${n1} O_RDONLY,O_NOFOLLOW + expect EMLINK open ${n1} O_WRONLY,O_NOFOLLOW + expect EMLINK open ${n1} O_RDWR,O_NOFOLLOW + ;; +esac expect 0 unlink ${n1} diff --git a/tools/regression/fstest/tests/open/18.t b/tools/regression/fstest/tests/open/18.t index e14fc4b..978ba16 100644 --- a/tools/regression/fstest/tests/open/18.t +++ b/tools/regression/fstest/tests/open/18.t @@ -6,13 +6,20 @@ desc="open returns EWOULDBLOCK when O_NONBLOCK and one of O_SHLOCK or O_EXLOCK i dir=`dirname $0` . ${dir}/../misc.sh -echo "1..6" +case "${os}" in +FreeBSD) + echo "1..6" -n0=`namegen` + n0=`namegen` -expect 0 create ${n0} 0644 -expect 0 open ${n0} O_RDONLY,O_SHLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK -expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O_EXLOCK,O_NONBLOCK -expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_SHLOCK : open ${n0} O_RDONLY,O_EXLOCK,O_NONBLOCK -expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK -expect 0 unlink ${n0} + expect 0 create ${n0} 0644 + expect 0 open ${n0} O_RDONLY,O_SHLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK + expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O_EXLOCK,O_NONBLOCK + expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_SHLOCK : open ${n0} O_RDONLY,O_EXLOCK,O_NONBLOCK + expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK + expect 0 unlink ${n0} + ;; +*) + quick_exit + ;; +esac -- cgit v1.1