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)
This commit is contained in:
@@ -530,6 +530,10 @@ set_gids(char *gids)
|
|||||||
fprintf(stderr, "cannot change groups: %s\n", strerror(errno));
|
fprintf(stderr, "cannot change groups: %s\n", strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
if (setegid(gidset[0]) < 0) {
|
||||||
|
fprintf(stderr, "cannot change effective gid: %s\n", strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
free(gidset);
|
free(gidset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# $FreeBSD$
|
# $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=`dirname $0`
|
||||||
. ${dir}/../misc.sh
|
. ${dir}/../misc.sh
|
||||||
@@ -12,8 +12,18 @@ n0=`namegen`
|
|||||||
n1=`namegen`
|
n1=`namegen`
|
||||||
|
|
||||||
expect 0 symlink ${n0} ${n1}
|
expect 0 symlink ${n0} ${n1}
|
||||||
|
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_CREAT,O_NOFOLLOW 0644
|
||||||
expect EMLINK open ${n1} O_RDONLY,O_NOFOLLOW
|
expect EMLINK open ${n1} O_RDONLY,O_NOFOLLOW
|
||||||
expect EMLINK open ${n1} O_WRONLY,O_NOFOLLOW
|
expect EMLINK open ${n1} O_WRONLY,O_NOFOLLOW
|
||||||
expect EMLINK open ${n1} O_RDWR,O_NOFOLLOW
|
expect EMLINK open ${n1} O_RDWR,O_NOFOLLOW
|
||||||
|
;;
|
||||||
|
esac
|
||||||
expect 0 unlink ${n1}
|
expect 0 unlink ${n1}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ desc="open returns EWOULDBLOCK when O_NONBLOCK and one of O_SHLOCK or O_EXLOCK i
|
|||||||
dir=`dirname $0`
|
dir=`dirname $0`
|
||||||
. ${dir}/../misc.sh
|
. ${dir}/../misc.sh
|
||||||
|
|
||||||
|
case "${os}" in
|
||||||
|
FreeBSD)
|
||||||
echo "1..6"
|
echo "1..6"
|
||||||
|
|
||||||
n0=`namegen`
|
n0=`namegen`
|
||||||
@@ -16,3 +18,8 @@ expect "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O
|
|||||||
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_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 "EWOULDBLOCK|EAGAIN" open ${n0} O_RDONLY,O_EXLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK
|
||||||
expect 0 unlink ${n0}
|
expect 0 unlink ${n0}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
quick_exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user