mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
s3: handle non-POSIX compliant Tru64, NetBSD and FreeBSD errno on O_NOFOLLOW symlink open calls
or should we leave the NetBSD and FreeBSD platforms just broken? Actually these two *want* to have broken platforms as they use different errno's than POSIX demands *interntionally*. The POSIX errno ELOOP for O_NOFOLLOW open calls on symlinks is clear and unambiguous. See http://gnats.netbsd.org/43154 for the interesting NetBSD discussion on that. Autobuild-User(master): Björn Jacke <bj@sernet.de> Autobuild-Date(master): Sun Jun 10 16:10:02 CEST 2012 on sn-devel-104
This commit is contained in:
parent
046daccba5
commit
f75f1d6233
@ -291,7 +291,26 @@ static NTSTATUS fd_open(struct connection_struct *conn,
|
||||
|
||||
fsp->fh->fd = SMB_VFS_OPEN(conn, smb_fname, fsp, flags, mode);
|
||||
if (fsp->fh->fd == -1) {
|
||||
status = map_nt_error_from_unix(errno);
|
||||
#ifdef O_NOFOLLOW
|
||||
int posix_errno = errno;
|
||||
#if defined(ENOTSUP) && defined(OSF1)
|
||||
/* handle special Tru64 errno */
|
||||
if (errno == ENOTSUP) {
|
||||
posix_errno = ELOOP;
|
||||
}
|
||||
#endif /* ENOTSUP */
|
||||
#ifdef EFTYPE
|
||||
/* fix broken NetBSD errno */
|
||||
if (errno == EFTYPE) {
|
||||
posix_errno = ELOOP;
|
||||
}
|
||||
#endif /* EFTYPE */
|
||||
/* fix broken FreeBSD errno */
|
||||
if (errno == EMLINK) {
|
||||
posix_errno = ELOOP;
|
||||
}
|
||||
#endif /* O_NOFOLLOW */
|
||||
status = map_nt_error_from_unix(posix_errno);
|
||||
if (errno == EMFILE) {
|
||||
static time_t last_warned = 0L;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user