--- samba-3.0.0final/source/smbd/trans2.c 2003-09-08 18:04:36.000000000 +0200 +++ samba-3.0.0final.flo/source/smbd/trans2.c 2003-12-30 19:08:13.000000000 +0100 @@ -334,6 +334,29 @@ } /**************************************************************************** + Return the UNIX mode for a file type +****************************************************************************/ + +static mode_t smb_to_unix_filetype(uint32 smbtype) { + switch(smbtype) { + case UNIX_TYPE_DIR: + return S_IFDIR; + case UNIX_TYPE_SYMLINK: + return S_IFLNK; + case UNIX_TYPE_CHARDEV: + return S_IFCHR; + case UNIX_TYPE_BLKDEV: + return S_IFBLK; + case UNIX_TYPE_FIFO: + return S_IFIFO; + case UNIX_TYPE_SOCKET: + return S_IFSOCK; + default: + return 0; + } +} + +/**************************************************************************** Return the filetype for UNIX extensions. ****************************************************************************/ @@ -2834,10 +2857,9 @@ * a new info level should be used for mknod. JRA. */ -#if !defined(HAVE_MAKEDEV_FN) - return(ERROR_DOS(ERRDOS,ERRnoaccess)); -#else /* HAVE_MAKEDEV_FN */ uint32 file_type = IVAL(pdata,0); + + /* These are uint64 */ uint32 dev_major = IVAL(pdata,4); uint32 dev_minor = IVAL(pdata,12); @@ -2867,8 +2889,10 @@ DEBUG(10,("call_trans2setfilepathinfo: SMB_SET_FILE_UNIX_BASIC doing mknod dev %.0f mode \ 0%o for file %s\n", (double)dev, unixmode, fname )); + unixmode|=smb_to_unix_filetype(file_type); + /* Ok - do the mknod. */ - if (SMB_VFS_MKNOD(conn,dos_to_unix_static(fname), unixmode, dev) != 0) + if (SMB_VFS_MKNOD(conn, fname, unixmode, dev) != 0) return(UNIXERROR(ERRDOS,ERRnoaccess)); inherit_access_acl(conn, fname, unixmode); @@ -2876,8 +2900,6 @@ SSVAL(params,0,0); send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0); return(-1); -#endif /* HAVE_MAKEDEV_FN */ - } /*