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:
Pawel Jakub Dawidek
2007-07-18 18:07:15 +00:00
parent bd675f58eb
commit 2125ff0886
3 changed files with 34 additions and 13 deletions
+4
View File
@@ -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);
} }
+15 -5
View File
@@ -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}
expect EMLINK open ${n1} O_RDONLY,O_CREAT,O_NOFOLLOW 0644 case "${os}" in
expect EMLINK open ${n1} O_RDONLY,O_NOFOLLOW SunOS)
expect EMLINK open ${n1} O_WRONLY,O_NOFOLLOW expect ELOOP open ${n1} O_RDONLY,O_CREAT,O_NOFOLLOW 0644
expect EMLINK open ${n1} O_RDWR,O_NOFOLLOW 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} expect 0 unlink ${n1}
+15 -8
View File
@@ -6,13 +6,20 @@ 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
echo "1..6" case "${os}" in
FreeBSD)
echo "1..6"
n0=`namegen` n0=`namegen`
expect 0 create ${n0} 0644 expect 0 create ${n0} 0644
expect 0 open ${n0} O_RDONLY,O_SHLOCK : open ${n0} O_RDONLY,O_SHLOCK,O_NONBLOCK 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_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_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