1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00

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
This commit is contained in:
Volker Lendecke 2008-06-22 20:33:28 +02:00
parent 948607f161
commit f58b098a41
3 changed files with 14 additions and 17 deletions

View File

@ -9774,8 +9774,7 @@ int setup_dfs_referral(connection_struct *orig_conn,
bool create_junction(TALLOC_CTX *ctx,
const char *dfs_path,
struct junction_map *jucn);
bool create_msdfs_link(const struct junction_map *jucn,
bool exists);
bool create_msdfs_link(const struct junction_map *jucn);
bool remove_msdfs_link(const struct junction_map *jucn);
struct junction_map *enum_msdfs_links(TALLOC_CTX *ctx, size_t *p_num_jn);
NTSTATUS resolve_dfspath(TALLOC_CTX *ctx,

View File

@ -44,7 +44,6 @@ 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();
@ -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;
}
@ -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;
}

View File

@ -1318,8 +1318,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;
@ -1369,19 +1368,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: