r21950: After discussion with the Apple and Linux client maintainers,
authorJames Peach <jpeach@samba.org>
Fri, 23 Mar 2007 19:31:11 +0000 (19:31 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:51 +0000 (12:18 -0500)
changing the FindFirst response for the UNIX_INFO2 level to include
a length field before the name. The name is not required to be null
terminated. The length field does not count any null.

Also add call to chflags(2) in the default VFS module so that this
will work be default on BSD-derived platform. Add UNIX-INFO2 test
to the build farm to get some non-BSD coverage.

Jeremy and Jerry, please review for inclusion in 3.0.25.

source/configure.in
source/modules/vfs_default.c
source/script/tests/test_posix_s3.sh
source/smbd/trans2.c

index eae5fcac139e301d82a7b84190f5aaf64c29b4a1..9cbb37debbc2afde6e08fb98b5f27dbf3d4c3dc8 100644 (file)
@@ -1225,7 +1225,8 @@ fi
 
 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64)
 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
-AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync memset strlcpy strlcat setpgid)
+AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
+AC_CHECK_FUNCS(getrlimit fsync memset strlcpy strlcat setpgid)
 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
index 4febc064d9449bd225caae757728c793e6b42add..67e615ec23304b4ddee14b4850aa933c0619f19f 100644 (file)
@@ -905,8 +905,12 @@ static NTSTATUS vfswrap_notify_watch(vfs_handle_struct *vfs_handle,
 
 static int vfswrap_chflags(vfs_handle_struct *handle, const char *path, int flags)
 {
+#ifdef HAVE_CHFLAGS
+       return chflags(path, flags);
+#else
        errno = ENOSYS;
        return -1;
+#endif
 }
 
 static size_t vfswrap_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info, SEC_DESC **ppdesc)
index a56032c7f4551a65abc97feb30376c26bcf0c9ee..415d71fdee0d8dbd85ffc25dbbe7ef3b4473753d 100755 (executable)
@@ -36,11 +36,16 @@ raw="$raw RAW-SAMBA3HIDE RAW-SAMBA3BADPATH"
 rpc="RPC-AUTHCONTEXT RPC-BINDSAMBA3 RPC-SAMBA3-SRVSVC RPC-SAMBA3-SHARESEC"
 rpc="$rpc RPC-UNIXINFO RPC-SAMBA3-SPOOLSS RPC-SAMBA3-WKSSVC"
 
+# NOTE: to enable the UNIX-WHOAMI test, we need to change the default share
+# config to allow guest access. I'm not sure whether this would break other
+# tests, so leaving it alone for now -- jpeach
+unix="UNIX-INFO2"
+
 if test x$RUN_FROM_BUILD_FARM = xyes; then
        rpc="$rpc RPC-NETLOGSAMBA3 RPC-SAMBA3SESSIONKEY RPC-SAMBA3-GETUSERNAME"
 fi
 
-tests="$base $raw $rpc"
+tests="$base $raw $rpc $unix"
 
 skipped="BASE-CHARSET BASE-DEFER_OPEN BASE-DELAYWRITE BASE-OPENATTR BASE-TCONDEV"
 skipped="$skipped RAW-ACLS RAW-COMPOSITE RAW-CONTEXT RAW-EAS"
index 1c1606fd67a22747248b4f04f4c195379031e24e..14dfbe0bbfc3e035514201c34718ade7a6366e34 100644 (file)
@@ -1601,13 +1601,17 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
                                DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_UNIX\n"));
                                p = store_file_unix_basic(conn, p,
                                                        NULL, &sbuf);
+                               len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE);
                        } else {
                                DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_UNIX_INFO2\n"));
                                p = store_file_unix_basic_info2(conn, p,
                                                        NULL, &sbuf);
+                               nameptr = p;
+                               p += 4;
+                               len = srvstr_push(outbuf, p, fname, -1, 0);
+                               SIVAL(nameptr, 0, len);
                        }
 
-                       len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE);
                        p += len;
                        SIVAL(p,0,0); /* Ensure any padding is null. */