name mangling question

jra at dp.samba.org jra at dp.samba.org
Thu May 8 00:50:41 GMT 2003


On Tue, Apr 29, 2003 at 05:20:31PM -0700, Leo Qiu wrote:
> Jeremy,
> 
> I have a question related to name mangling.
> 
> In smbd/filename.c :135 (version 2.2.8a)
> if (VALID_STAT(st) && (strlen(orig_path) ==
> strlen(name)))
> 
> I am not sure why the lengths of the original path and
> name are compared here. If the name is mangled,
> definitely this will fail and the file will be
> regarded as nonexistent because sbuf.st_nlink is equal
> to zero. If the file is regarded as nonexistent, the
> line "if (conn->vfs_ops.fchmod_acl(fsp, fsp->fd, mode)
> == -1 && errno == ENOSYS)" in smbd/nttrans.c will be
> called and the file permission is always reset to the
> inherited permission from parent directory.
> 
> Could you please have a look at it? Thank you very
> much.

I followed the (rather tortuous :-) logic here. I think
it is ok and will never happen. If the path is mangled,
the initial stat will fail, so the one-component at a time
directory scanning code is invoked. This undoes the mangling
in the original name, and if the file exists this code
will eventually be executed :

                                /*
                                 * We just scanned for, and found the end of the path.
                                 * We must return a valid stat struct if it exists.
                                 * JRA.
                                 */

                                if (vfs_stat(conn,name, &st) == 0) {
                                        *pst = st;
                                } else {
                                        ZERO_STRUCT(st);
                                }

This will take care of returning the valid stat struct.

Can you find a fault with this analysis, or better still do
you have a test case of it failing ?

Jeremy.


More information about the samba-technical mailing list