The branch, v3-2-test has been updated
       via  977dc3accb3d440e5fd19591c425da7dc3718d94 (commit)
       via  a90ef69350c5efcf8dcf95d4853cbe3c662d1ba3 (commit)
       via  f3bd5e828af04f33178a66f9f332199f7d395b7b (commit)
       via  01e85f146b32d3ec91f2affb070bfd3516a28333 (commit)
       via  629406cbe77a5d56a258ac414ab47f3e89183e52 (commit)
      from  118fd6213d5f6419f654e9226a41d527c04346f7 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 977dc3accb3d440e5fd19591c425da7dc3718d94
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Fri Nov 16 17:07:11 2007 -0800

    Remove pstring from modules directory.
    Jeremy.

commit a90ef69350c5efcf8dcf95d4853cbe3c662d1ba3
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Fri Nov 16 17:06:57 2007 -0800

    Ensure we use PATH_MAX for symlinks.
    Jeremy.

commit f3bd5e828af04f33178a66f9f332199f7d395b7b
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Fri Nov 16 17:06:36 2007 -0800

    Fix bug #4393 smbclient does not store files with zero filesize in 
tar-archives
    from [EMAIL PROTECTED]
    Jeremy.

commit 01e85f146b32d3ec91f2affb070bfd3516a28333
Merge: 629406cbe77a5d56a258ac414ab47f3e89183e52 
118fd6213d5f6419f654e9226a41d527c04346f7
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Fri Nov 16 13:29:42 2007 -0800

    Merge branch 'v3-2-test' of ssh://[EMAIL PROTECTED]/data/git/samba into 
v3-2-test

commit 629406cbe77a5d56a258ac414ab47f3e89183e52
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Fri Nov 16 13:14:24 2007 -0800

    Match the 3.0.27a version of this function.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/client/clitar.c            |    7 +-
 source/modules/vfs_afsacl.c       |   14 +-
 source/modules/vfs_cap.c          |  489 +++++++++++++++++++++++++------------
 source/modules/vfs_catia.c        |  269 ++++++++++++--------
 source/modules/vfs_expand_msdfs.c |   89 ++++---
 source/modules/vfs_full_audit.c   |   38 ++-
 source/smbd/srvstr.c              |   18 +-
 source/smbd/trans2.c              |    4 +-
 8 files changed, 598 insertions(+), 330 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/client/clitar.c b/source/client/clitar.c
index 4ce92c6..cb7a5de 100644
--- a/source/client/clitar.c
+++ b/source/client/clitar.c
@@ -608,7 +608,6 @@ static void do_atar(char *rname,char *lname,file_info 
*finfo1)
        SMB_BIG_UINT nread=0;
        char ftype;
        file_info2 finfo;
-       bool close_done = False;
        bool shallitime=True;
        char data[65520];
        int read_size = 65520;
@@ -694,7 +693,7 @@ static void do_atar(char *rname,char *lname,file_info 
*finfo1)
                DEBUG(3,("getting file %s of size %.0f bytes as a tar file %s",
                        finfo.name, (double)finfo.size, lname));
       
-               while (nread < finfo.size && !close_done) {
+               do {
              
                        DEBUG(3,("nread=%.0f\n",(double)nread));
              
@@ -733,13 +732,13 @@ static void do_atar(char *rname,char *lname,file_info 
*finfo1)
                                break;
                        }
              
-                       if (datalen == 0) {
+                       if ( (datalen == 0) && (finfo.size != 0) ) {
                                DEBUG(0,("Error reading file %s. Got 0 
bytes\n", rname));
                                break;
                        }
 
                        datalen=0;
-               }
+               } while ( nread < finfo.size );
 
                if (wrote_tar_header) {
                        /* pad tar file with zero's if we couldn't get entire 
file */
diff --git a/source/modules/vfs_afsacl.c b/source/modules/vfs_afsacl.c
index eac70f4..3e57a88 100644
--- a/source/modules/vfs_afsacl.c
+++ b/source/modules/vfs_afsacl.c
@@ -891,7 +891,7 @@ static NTSTATUS afs_set_nt_acl(vfs_handle_struct *handle, 
files_struct *fsp,
        char acl_string[2049];
        struct afs_iob iob;
        int ret = -1;
-       pstring name;
+       char *name = NULL;
        const char *fileacls;
 
        fileacls = lp_parm_const_string(SNUM(handle->conn), "afsacl", 
"fileacls",
@@ -904,7 +904,10 @@ static NTSTATUS afs_set_nt_acl(vfs_handle_struct *handle, 
files_struct *fsp,
        ZERO_STRUCT(dir_acl);
        ZERO_STRUCT(file_acl);
 
-       pstrcpy(name, fsp->fsp_name);
+       name = talloc_strdup(talloc_tos(), fsp->fsp_name);
+       if (!name) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
        if (!fsp->is_directory) {
                /* We need to get the name of the directory containing the
@@ -913,7 +916,10 @@ static NTSTATUS afs_set_nt_acl(vfs_handle_struct *handle, 
files_struct *fsp,
                if (p != NULL) {
                        *p = '\0';
                } else {
-                       pstrcpy(name, ".");
+                       name = talloc_strdup(talloc_tos(), ".");
+                       if (!name) {
+                               return NT_STATUS_NO_MEMORY;
+                       }
                }
        }
 
@@ -1017,7 +1023,7 @@ static int afsacl_connect(vfs_handle_struct *handle,
                          const char *service, 
                          const char *user)
 {
-       const char *spc;
+                       const char *spc;
 
        spc = lp_parm_const_string(SNUM(handle->conn), "afsacl", "space", "%");
 
diff --git a/source/modules/vfs_cap.c b/source/modules/vfs_cap.c
index 7dfbed0..f99891c 100644
--- a/source/modules/vfs_cap.c
+++ b/source/modules/vfs_cap.c
@@ -1,21 +1,22 @@
-/* 
+/*
  * CAP VFS module for Samba 3.x Version 0.3
  *
  * Copyright (C) Tim Potter, 1999-2000
  * Copyright (C) Alexander Bokovoy, 2002-2003
  * Copyright (C) Stefan (metze) Metzmacher, 2003
  * Copyright (C) TAKAHASHI Motonobu (monyo), 2003
+ * Copyright (C) Jeremy Allison, 2007
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
- *  
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *  
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
@@ -24,288 +25,445 @@
 #include "includes.h"
 
 /* cap functions */
-static char *capencode(char *to, const char *from);
-static char *capdecode(char *to, const char *from);
+static char *capencode(TALLOC_CTX *ctx, const char *from);
+static char *capdecode(TALLOC_CTX *ctx, const char *from);
 
 static SMB_BIG_UINT cap_disk_free(vfs_handle_struct *handle, const char *path,
        bool small_query, SMB_BIG_UINT *bsize,
        SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
-        pstring cappath;
-        capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return (SMB_BIG_UINT)-1;
+       }
        return SMB_VFS_NEXT_DISK_FREE(handle, cappath, small_query, bsize,
-                                        dfree, dsize);
+                                       dfree, dsize);
 }
 
 static SMB_STRUCT_DIR *cap_opendir(vfs_handle_struct *handle, const char 
*fname, const char *mask, uint32 attr)
 {
-        pstring capname;
-        capencode(capname, fname);
+       char *capname = capencode(talloc_tos(), fname);
+
+       if (!capname) {
+               errno = ENOMEM;
+               return NULL;
+       }
        return SMB_VFS_NEXT_OPENDIR(handle, capname, mask, attr);
 }
 
 static SMB_STRUCT_DIRENT *cap_readdir(vfs_handle_struct *handle, 
SMB_STRUCT_DIR *dirp)
 {
-        SMB_STRUCT_DIRENT *result;
+       SMB_STRUCT_DIRENT *result;
+       SMB_STRUCT_DIRENT *newdirent;
+       char *newname;
+       size_t newnamelen;
        DEBUG(3,("cap: cap_readdir\n"));
+
        result = SMB_VFS_NEXT_READDIR(handle, dirp);
-       if (result) {
-         DEBUG(3,("cap: cap_readdir: %s\n", result->d_name));
-         capdecode(result->d_name, result->d_name);
-        }
-        return result;
+       if (!result) {
+               return NULL;
+       }
+
+       newname = capdecode(talloc_tos(), result->d_name);
+       if (!newname) {
+               return NULL;
+       }
+       DEBUG(3,("cap: cap_readdir: %s\n", newname));
+       newnamelen = strlen(newname)+1;
+       newdirent = (SMB_STRUCT_DIRENT *)TALLOC_ARRAY(talloc_tos(),
+                       char,
+                       sizeof(SMB_STRUCT_DIRENT)+
+                               newnamelen);
+       if (!newdirent) {
+               return NULL;
+       }
+       memcpy(newdirent, result, sizeof(SMB_STRUCT_DIRENT));
+       memcpy(&newdirent->d_name, newname, newnamelen);
+       return newdirent;
 }
 
 static int cap_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode)
 {
-       pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_MKDIR(handle, cappath, mode);
 }
 
 static int cap_rmdir(vfs_handle_struct *handle, const char *path)
 {
-        pstring cappath;
-        capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_RMDIR(handle, cappath);
 }
 
 static int cap_open(vfs_handle_struct *handle, const char *fname, files_struct 
*fsp, int flags, mode_t mode)
 {
-        pstring capname;
+       char *cappath = capencode(talloc_tos(), fname);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        DEBUG(3,("cap: cap_open for %s\n", fname));
-       capencode(capname, fname);
-       return SMB_VFS_NEXT_OPEN(handle, capname, fsp, flags, mode);
+       return SMB_VFS_NEXT_OPEN(handle, cappath, fsp, flags, mode);
 }
 
 static int cap_rename(vfs_handle_struct *handle, const char *oldname, const 
char *newname)
 {
-       pstring capold, capnew;
-       capencode(capold, oldname);
-       capencode(capnew, newname);
+       char *capold = capencode(talloc_tos(), oldname);
+       char *capnew = capencode(talloc_tos(), newname);
 
+       if (!capold || !capnew) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_RENAME(handle, capold, capnew);
 }
 
-static int cap_stat(vfs_handle_struct *handle, const char *fname, 
SMB_STRUCT_STAT *sbuf)
+static int cap_stat(vfs_handle_struct *handle, const char *path, 
SMB_STRUCT_STAT *sbuf)
 {
-        pstring capname;
-       capencode(capname, fname);
-       return SMB_VFS_NEXT_STAT(handle, capname, sbuf);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
+       return SMB_VFS_NEXT_STAT(handle, cappath, sbuf);
 }
 
 static int cap_lstat(vfs_handle_struct *handle, const char *path, 
SMB_STRUCT_STAT *sbuf)
 {
-       pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_LSTAT(handle, cappath, sbuf);
 }
 
 static int cap_unlink(vfs_handle_struct *handle, const char *path)
 {
-       pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_UNLINK(handle, cappath);
 }
 
 static int cap_chmod(vfs_handle_struct *handle, const char *path, mode_t mode)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_CHMOD(handle, cappath, mode);
 }
 
 static int cap_chown(vfs_handle_struct *handle, const char *path, uid_t uid, 
gid_t gid)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_CHOWN(handle, cappath, uid, gid);
 }
 
 static int cap_lchown(vfs_handle_struct *handle, const char *path, uid_t uid, 
gid_t gid)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_LCHOWN(handle, cappath, uid, gid);
 }
 
 static int cap_chdir(vfs_handle_struct *handle, const char *path)
 {
-        pstring cappath;
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        DEBUG(3,("cap: cap_chdir for %s\n", path));
-       capencode(cappath, path);
        return SMB_VFS_NEXT_CHDIR(handle, cappath);
 }
 
 static int cap_ntimes(vfs_handle_struct *handle, const char *path, const 
struct timespec ts[2])
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_NTIMES(handle, cappath, ts);
 }
 
 
 static bool cap_symlink(vfs_handle_struct *handle, const char *oldpath, const 
char *newpath)
 {
-        pstring capoldpath, capnewpath;
-        capencode(capoldpath, oldpath);
-        capencode(capnewpath, newpath);
-       return SMB_VFS_NEXT_SYMLINK(handle, capoldpath, capnewpath);
+       char *capold = capencode(talloc_tos(), oldpath);
+       char *capnew = capencode(talloc_tos(), newpath);
+
+       if (!capold || !capnew) {
+               errno = ENOMEM;
+               return -1;
+       }
+       return SMB_VFS_NEXT_SYMLINK(handle, capold, capnew);
 }
 
 static bool cap_readlink(vfs_handle_struct *handle, const char *path, char 
*buf, size_t bufsiz)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_READLINK(handle, cappath, buf, bufsiz);
 }
 
 static int cap_link(vfs_handle_struct *handle, const char *oldpath, const char 
*newpath)
 {
-        pstring capoldpath, capnewpath;
-        capencode(capoldpath, oldpath);
-        capencode(capnewpath, newpath);
-       return SMB_VFS_NEXT_LINK(handle, capoldpath, capnewpath);
+       char *capold = capencode(talloc_tos(), oldpath);
+       char *capnew = capencode(talloc_tos(), newpath);
+
+       if (!capold || !capnew) {
+               errno = ENOMEM;
+               return -1;
+       }
+       return SMB_VFS_NEXT_LINK(handle, capold, capnew);
 }
 
 static int cap_mknod(vfs_handle_struct *handle, const char *path, mode_t mode, 
SMB_DEV_T dev)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
        return SMB_VFS_NEXT_MKNOD(handle, cappath, mode, dev);
 }
 
 static char *cap_realpath(vfs_handle_struct *handle, const char *path, char 
*resolved_path)
 {
         /* monyo need capencode'ed and capdecode'ed? */
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return NULL;
+       }
        return SMB_VFS_NEXT_REALPATH(handle, path, resolved_path);
 }
 
-static NTSTATUS cap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, 
const char *name, uint32 security_info_sent, struct security_descriptor *psd)
+static NTSTATUS cap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, 
const char *path, uint32 security_info_sent, struct security_descriptor *psd)
 {
-        pstring capname;
-       capencode(capname, name);
-       return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, capname, 
security_info_sent, psd);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return NT_STATUS_NO_MEMORY;
+       }
+       return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, cappath, 
security_info_sent, psd);
 }
 
-static int cap_chmod_acl(vfs_handle_struct *handle, const char *name, mode_t 
mode)
+static int cap_chmod_acl(vfs_handle_struct *handle, const char *path, mode_t 
mode)
 {
-        pstring capname;
-       capencode(capname, name);
+       char *cappath = capencode(talloc_tos(), path);
 
        /* If the underlying VFS doesn't have ACL support... */
        if (!handle->vfs_next.ops.chmod_acl) {
                errno = ENOSYS;
                return -1;
        }
-       return SMB_VFS_NEXT_CHMOD_ACL(handle, capname, mode);
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
+       return SMB_VFS_NEXT_CHMOD_ACL(handle, cappath, mode);
 }
 
-static SMB_ACL_T cap_sys_acl_get_file(vfs_handle_struct *handle, const char 
*path_p, SMB_ACL_TYPE_T type)
+static SMB_ACL_T cap_sys_acl_get_file(vfs_handle_struct *handle, const char 
*path, SMB_ACL_TYPE_T type)
 {
-        pstring cappath_p;
-       capencode(cappath_p, path_p);
-       return SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, cappath_p, type);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return (SMB_ACL_T)NULL;
+       }
+       return SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, cappath, type);
 }
 
-static int cap_sys_acl_set_file(vfs_handle_struct *handle, const char *name, 
SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+static int cap_sys_acl_set_file(vfs_handle_struct *handle, const char *path, 
SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
 {
-        pstring capname;
-       capencode(capname, name);
-       return SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, capname, acltype, theacl);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }
+       return SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, cappath, acltype, theacl);
 }
 
 static int cap_sys_acl_delete_def_file(vfs_handle_struct *handle, const char 
*path)
 {
-        pstring cappath;
-       capencode(cappath, path);
+       char *cappath = capencode(talloc_tos(), path);
+
+       if (!cappath) {
+               errno = ENOMEM;
+               return -1;
+       }


-- 
Samba Shared Repository

Reply via email to