1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

CVE-2017-2619: s3: smbd: Move special handling of symlink errno's into a utility function.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12496

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
This commit is contained in:
Jeremy Allison 2016-12-15 12:56:08 -08:00 committed by Karolin Seeger
parent 6ff5f0a75a
commit 592e7fa67b

View File

@ -363,6 +363,31 @@ static NTSTATUS check_base_file_access(struct connection_struct *conn,
access_mask);
}
/****************************************************************************
Handle differing symlink errno's
****************************************************************************/
static int link_errno_convert(int err)
{
#if defined(ENOTSUP) && defined(OSF1)
/* handle special Tru64 errno */
if (err == ENOTSUP) {
err = ELOOP;
}
#endif /* ENOTSUP */
#ifdef EFTYPE
/* fix broken NetBSD errno */
if (err == EFTYPE) {
err = ELOOP;
}
#endif /* EFTYPE */
/* fix broken FreeBSD errno */
if (err == EMLINK) {
err = ELOOP;
}
return err;
}
/****************************************************************************
fd support routines - attempt to do a dos_open.
****************************************************************************/
@ -386,23 +411,7 @@ NTSTATUS fd_open(struct connection_struct *conn,
fsp->fh->fd = SMB_VFS_OPEN(conn, smb_fname, fsp, flags, mode);
if (fsp->fh->fd == -1) {
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;
}
int posix_errno = link_errno_convert(errno);
status = map_nt_error_from_unix(posix_errno);
if (errno == EMFILE) {
static time_t last_warned = 0L;