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