The branch, master has been updated
       via  e919e76 Cosmetic. Fix bad indentation.
       via  644046f Fix compiler warning in debug message.
       via  20baa11 Remove duplicate code - move to parent_dirname() as a 
common function.
      from  5290927 s3-vfs: another attempt to fix the Tru64 build.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit e919e767fb846fc91160cf44cbc838a9b4f2a832
Author: Jeremy Allison <[email protected]>
Date:   Thu Apr 21 17:25:13 2011 -0700

    Cosmetic. Fix bad indentation.
    
    Autobuild-User: Jeremy Allison <[email protected]>
    Autobuild-Date: Fri Apr 22 03:16:43 CEST 2011 on sn-devel-104

commit 644046f064d73ff97f95a7dfbc5fca199f0dd973
Author: Jeremy Allison <[email protected]>
Date:   Thu Apr 21 17:22:44 2011 -0700

    Fix compiler warning in debug message.

commit 20baa11f33c5282c609258e21a07c7255df7ae30
Author: Jeremy Allison <[email protected]>
Date:   Thu Apr 21 16:50:49 2011 -0700

    Remove duplicate code - move to parent_dirname() as a common function.

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

Summary of changes:
 source3/printing/print_cups.c |    4 +-
 source3/smbd/vfs.c            |   75 +++++++++++++++++-----------------------
 2 files changed, 34 insertions(+), 45 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c
index e3b08b7..da42cb6 100644
--- a/source3/printing/print_cups.c
+++ b/source3/printing/print_cups.c
@@ -127,7 +127,7 @@ static bool send_pcap_blob(DATA_BLOB *pcap_blob, int fd)
                return false;
        }
 
-       DEBUG(10, ("successfully sent blob of len %ld\n", (int64_t)ret));
+       DEBUG(10, ("successfully sent blob of len %d\n", (int)ret));
        return true;
 }
 
@@ -152,7 +152,7 @@ static bool recv_pcap_blob(TALLOC_CTX *mem_ctx, int fd, 
DATA_BLOB *pcap_blob)
                return false;
        }
 
-       DEBUG(10, ("successfully recvd blob of len %ld\n", (int64_t)ret));
+       DEBUG(10, ("successfully recvd blob of len %d\n", (int)ret));
        return true;
 }
 
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 414e00c..3b482e7 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -899,7 +899,6 @@ char *vfs_GetWd(TALLOC_CTX *ctx, connection_struct *conn)
 NTSTATUS check_reduced_name(connection_struct *conn, const char *fname)
 {
        char *resolved_name = NULL;
-       char *p = NULL;
 
        DEBUG(3,("check_reduced_name [%s] [%s]\n", fname, conn->connectpath));
 
@@ -915,28 +914,20 @@ NTSTATUS check_reduced_name(connection_struct *conn, 
const char *fname)
                        case ENOENT:
                        {
                                TALLOC_CTX *ctx = talloc_tos();
-                               char *tmp_fname = NULL;
-                               char *last_component = NULL;
-                               /* Last component didn't exist. Remove it and 
try and canonicalise the directory. */
-
-                               tmp_fname = talloc_strdup(ctx, fname);
-                               if (!tmp_fname) {
+                               char *dir_name = NULL;
+                               const char *last_component = NULL;
+                               char *new_name = NULL;
+
+                               /* Last component didn't exist.
+                                  Remove it and try and canonicalise
+                                  the directory name. */
+                               if (!parent_dirname(ctx, fname,
+                                               &dir_name,
+                                               &last_component)) {
                                        return NT_STATUS_NO_MEMORY;
                                }
-                               p = strrchr_m(tmp_fname, '/');
-                               if (p) {
-                                       *p++ = '\0';
-                                       last_component = p;
-                               } else {
-                                       last_component = tmp_fname;
-                                       tmp_fname = talloc_strdup(ctx,
-                                                       ".");
-                                       if (!tmp_fname) {
-                                               return NT_STATUS_NO_MEMORY;
-                                       }
-                               }
 
-                               resolved_name = 
SMB_VFS_REALPATH(conn,tmp_fname);
+                               resolved_name = SMB_VFS_REALPATH(conn,dir_name);
                                if (!resolved_name) {
                                        NTSTATUS status = 
map_nt_error_from_unix(errno);
 
@@ -951,18 +942,16 @@ NTSTATUS check_reduced_name(connection_struct *conn, 
const char *fname)
                                                nt_errstr(status)));
                                        return status;
                                }
-                               tmp_fname = talloc_asprintf(ctx,
+                               new_name = talloc_asprintf(ctx,
                                                "%s/%s",
                                                resolved_name,
                                                last_component);
-                               if (!tmp_fname) {
+                               if (!new_name) {
                                        return NT_STATUS_NO_MEMORY;
                                }
                                SAFE_FREE(resolved_name);
-                               resolved_name = SMB_STRDUP(tmp_fname);
+                               resolved_name = SMB_STRDUP(new_name);
                                if (!resolved_name) {
-                                       DEBUG(0, ("check_reduced_name: malloc "
-                                                 "fail for %s\n", tmp_fname));
                                        return NT_STATUS_NO_MEMORY;
                                }
                                break;
@@ -986,26 +975,26 @@ NTSTATUS check_reduced_name(connection_struct *conn, 
const char *fname)
 
        /* Check for widelinks allowed. */
        if (!lp_widelinks(SNUM(conn))) {
-                   const char *conn_rootdir;
-
-                   conn_rootdir = SMB_VFS_CONNECTPATH(conn, fname);
-                   if (conn_rootdir == NULL) {
-                           DEBUG(2, ("check_reduced_name: Could not get "
-                                     "conn_rootdir\n"));
-                           SAFE_FREE(resolved_name);
-                           return NT_STATUS_ACCESS_DENIED;
-                   }
+               const char *conn_rootdir;
+
+               conn_rootdir = SMB_VFS_CONNECTPATH(conn, fname);
+               if (conn_rootdir == NULL) {
+                       DEBUG(2, ("check_reduced_name: Could not get "
+                               "conn_rootdir\n"));
+                       SAFE_FREE(resolved_name);
+                       return NT_STATUS_ACCESS_DENIED;
+               }
 
-                   if (strncmp(conn_rootdir, resolved_name,
+               if (strncmp(conn_rootdir, resolved_name,
                                strlen(conn_rootdir)) != 0) {
-                           DEBUG(2, ("check_reduced_name: Bad access "
-                                     "attempt: %s is a symlink outside the "
-                                     "share path\n", fname));
-                           DEBUGADD(2, ("conn_rootdir =%s\n", conn_rootdir));
-                           DEBUGADD(2, ("resolved_name=%s\n", resolved_name));
-                           SAFE_FREE(resolved_name);
-                           return NT_STATUS_ACCESS_DENIED;
-                   }
+                       DEBUG(2, ("check_reduced_name: Bad access "
+                               "attempt: %s is a symlink outside the "
+                               "share path\n", fname));
+                       DEBUGADD(2, ("conn_rootdir =%s\n", conn_rootdir));
+                       DEBUGADD(2, ("resolved_name=%s\n", resolved_name));
+                       SAFE_FREE(resolved_name);
+                       return NT_STATUS_ACCESS_DENIED;
+               }
        }
 
         /* Check if we are allowing users to follow symlinks */


-- 
Samba Shared Repository

Reply via email to