The branch, v3-2-stable has been updated
       via  a142ff51235ce0158417917a7cf1650dda62b206 (commit)
       via  961565d3a9e0ac22af1497e2210c3f5982911c7c (commit)
       via  6551dd884018d45112ec26a4a5d510ef34682a3c (commit)
      from  31a23b3fe4ca3cf7c65a6b3e079d10ef2956fae2 (commit)

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


- Log -----------------------------------------------------------------
commit a142ff51235ce0158417917a7cf1650dda62b206
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Mon Jun 23 11:24:52 2008 -0700

    Sorry volker, lost your original git-id due to proto.h conflicts.
    
    Remove the "exists" parameter from create_msdfs_link
    
    Jeremy, setting "exists" to True in _dfs_Add prevented the initial creation 
of
    a new symlink for me, because the SMB_VFS_UNLINK failed. This also exists in
    3.2. I only check it into 3.3 as I would like you to look at it first.
    
    Thanks,
    
    Volker
    (cherry picked from commit 47e66814c176d597d9a3c165a7cfa6a5a2fd70be)

commit 961565d3a9e0ac22af1497e2210c3f5982911c7c
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Jun 22 20:27:20 2008 +0200

    Check for sec_initial_uid() instead of uid==0 in dfs management
    (cherry picked from commit 12d816dc997b1bfc048c5c042945a5e935abf4b4)

commit 6551dd884018d45112ec26a4a5d510ef34682a3c
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Jun 22 11:28:57 2008 +0200

    Reduce memory usage in form_junctions() a little bit
    (cherry picked from commit 0dafec20396a0722d691ab3723eadc6124759e12)

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

Summary of changes:
 source/rpc_server/srv_dfs_nt.c |   10 ++++------
 source/smbd/msdfs.c            |   23 ++++++++++++-----------
 2 files changed, 16 insertions(+), 17 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/rpc_server/srv_dfs_nt.c b/source/rpc_server/srv_dfs_nt.c
index 29538a3..72b8236 100644
--- a/source/rpc_server/srv_dfs_nt.c
+++ b/source/rpc_server/srv_dfs_nt.c
@@ -44,12 +44,11 @@ WERROR _dfs_Add(pipes_struct *p, struct dfs_Add *r)
        struct referral *old_referral_list = NULL;
        bool self_ref = False;
        int consumedcnt = 0;
-       bool exists = False;
        char *altpath = NULL;
        NTSTATUS status;
        TALLOC_CTX *ctx = talloc_tos();
 
-       if (p->pipe_user.ut.uid != 0) {
+       if (p->pipe_user.ut.uid != sec_initial_uid()) {
                DEBUG(10,("_dfs_add: uid != 0. Access denied.\n"));
                return WERR_ACCESS_DENIED;
        }
@@ -76,7 +75,6 @@ WERROR _dfs_Add(pipes_struct *p, struct dfs_Add *r)
                return ntstatus_to_werror(status);
        }
 
-       exists = True;
        jn->referral_count += 1;
        old_referral_list = jn->referral_list;
 
@@ -101,7 +99,7 @@ WERROR _dfs_Add(pipes_struct *p, struct dfs_Add *r)
        jn->referral_list[jn->referral_count-1].ttl = REFERRAL_TTL;
        jn->referral_list[jn->referral_count-1].alternate_path = altpath;
 
-       if(!create_msdfs_link(jn, exists)) {
+       if(!create_msdfs_link(jn)) {
                vfs_ChDir(p->conn,p->conn->connectpath);
                return WERR_DFS_CANT_CREATE_JUNCT;
        }
@@ -119,7 +117,7 @@ WERROR _dfs_Remove(pipes_struct *p, struct dfs_Remove *r)
        TALLOC_CTX *ctx = talloc_tos();
        char *altpath = NULL;
 
-       if (p->pipe_user.ut.uid != 0) {
+       if (p->pipe_user.ut.uid != sec_initial_uid()) {
                DEBUG(10,("_dfs_remove: uid != 0. Access denied.\n"));
                return WERR_ACCESS_DENIED;
        }
@@ -184,7 +182,7 @@ WERROR _dfs_Remove(pipes_struct *p, struct dfs_Remove *r)
                                return WERR_DFS_NO_SUCH_VOL;
                        }
                } else {
-                       if(!create_msdfs_link(jn, True)) {
+                       if(!create_msdfs_link(jn)) {
                                vfs_ChDir(p->conn,p->conn->connectpath);
                                return WERR_DFS_CANT_CREATE_JUNCT;
                        }
diff --git a/source/smbd/msdfs.c b/source/smbd/msdfs.c
index baf41bd..aef4ff6 100644
--- a/source/smbd/msdfs.c
+++ b/source/smbd/msdfs.c
@@ -1306,8 +1306,7 @@ static bool junction_to_local_path(const struct 
junction_map *jucn,
        return True;
 }
 
-bool create_msdfs_link(const struct junction_map *jucn,
-               bool exists)
+bool create_msdfs_link(const struct junction_map *jucn)
 {
        char *path = NULL;
        char *msdfs_link = NULL;
@@ -1360,19 +1359,20 @@ bool create_msdfs_link(const struct junction_map *jucn,
        DEBUG(5,("create_msdfs_link: Creating new msdfs link: %s -> %s\n",
                path, msdfs_link));
 
-       if(exists) {
-               if(SMB_VFS_UNLINK(conn,path)!=0) {
+       if(SMB_VFS_SYMLINK(conn, msdfs_link, path) < 0) {
+               if (errno == EEXIST) {
+                       if(SMB_VFS_UNLINK(conn,path)!=0) {
+                               goto out;
+                       }
+               }
+               if (SMB_VFS_SYMLINK(conn, msdfs_link, path) < 0) {
+                       DEBUG(1,("create_msdfs_link: symlink failed "
+                                "%s -> %s\nError: %s\n",
+                                path, msdfs_link, strerror(errno)));
                        goto out;
                }
        }
 
-       if(SMB_VFS_SYMLINK(conn, msdfs_link, path) < 0) {
-               DEBUG(1,("create_msdfs_link: symlink failed "
-                       "%s -> %s\nError: %s\n", 
-                       path, msdfs_link, strerror(errno)));
-               goto out;
-       }
-
        ret = True;
 
 out:
@@ -1565,6 +1565,7 @@ static int form_junctions(TALLOC_CTX *ctx,
                                jucn[cnt].comment = "";
                                cnt++;
                        }
+                       TALLOC_FREE(link_target);
                }
        }
 


-- 
Samba Shared Repository

Reply via email to