mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
need to make sure that the connection struct mem_ctx is initialized and destroyed
(This used to be commit e0c061b94d
)
This commit is contained in:
parent
11bf0c0b23
commit
2a091c4e89
@ -87,8 +87,16 @@ static BOOL create_conn_struct( connection_struct *conn, int snum, char *path)
|
||||
conn->connectpath = path;
|
||||
pstring_sub(conn->connectpath , "%S", lp_servicename(snum));
|
||||
|
||||
/* needed for smbd_vfs_init() */
|
||||
|
||||
if ( (conn->mem_ctx=talloc_init("connection_struct")) == NULL ) {
|
||||
DEBUG(0,("talloc_init(connection_struct) failed!\n"));
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!smbd_vfs_init(conn)) {
|
||||
DEBUG(0,("create_conn_struct: smbd_vfs_init failed.\n"));
|
||||
talloc_destroy( conn->mem_ctx );
|
||||
return False;
|
||||
}
|
||||
return True;
|
||||
@ -339,6 +347,7 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
struct connection_struct* conn = &conns;
|
||||
pstring conn_path;
|
||||
int snum;
|
||||
BOOL ret = False;
|
||||
|
||||
BOOL self_referral = False;
|
||||
|
||||
@ -381,16 +390,15 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
if (!lp_msdfs_root(SNUM(conn))) {
|
||||
DEBUG(3,("get_referred_path: .%s. in dfs path %s is not a dfs root.\n",
|
||||
dp.servicename, pathname));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (*lp_msdfs_proxy(snum) != '\0') {
|
||||
struct referral* ref;
|
||||
jn->referral_count = 1;
|
||||
if ((ref = (struct referral*) malloc(sizeof(struct referral)))
|
||||
== NULL) {
|
||||
if ((ref = (struct referral*) malloc(sizeof(struct referral))) == NULL) {
|
||||
DEBUG(0, ("malloc failed for referral\n"));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pstrcpy(ref->alternate_path, lp_msdfs_proxy(snum));
|
||||
@ -401,7 +409,8 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
jn->referral_list = ref;
|
||||
if (consumedcntp)
|
||||
*consumedcntp = strlen(pathname);
|
||||
return True;
|
||||
ret = True;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* If not remote & not a self referral, return False */
|
||||
@ -410,7 +419,7 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
self_referralp, consumedcntp)) {
|
||||
if (!*self_referralp) {
|
||||
DEBUG(3,("get_referred_path: No valid referrals for path %s\n", pathname));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
@ -418,10 +427,9 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
if (*self_referralp) {
|
||||
struct referral* ref;
|
||||
jn->referral_count = 1;
|
||||
if((ref = (struct referral*) malloc(sizeof(struct referral)))
|
||||
== NULL) {
|
||||
if((ref = (struct referral*) malloc(sizeof(struct referral))) == NULL) {
|
||||
DEBUG(0,("malloc failed for referral\n"));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pstrcpy(ref->alternate_path,pathname);
|
||||
@ -431,8 +439,10 @@ BOOL get_referred_path(char *pathname, struct junction_map* jn,
|
||||
if (consumedcntp)
|
||||
*consumedcntp = strlen(pathname);
|
||||
}
|
||||
|
||||
return True;
|
||||
out:
|
||||
talloc_destroy( conn->mem_ctx );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int setup_ver2_dfs_referral(char* pathname, char** ppdata,
|
||||
@ -758,6 +768,7 @@ BOOL create_msdfs_link(struct junction_map* jn, BOOL exists)
|
||||
connection_struct *conn = &conns;
|
||||
int i=0;
|
||||
BOOL insert_comma = False;
|
||||
BOOL ret = False;
|
||||
|
||||
if(!junction_to_local_path(jn, path, sizeof(path), conn))
|
||||
return False;
|
||||
@ -786,14 +797,20 @@ BOOL create_msdfs_link(struct junction_map* jn, BOOL exists)
|
||||
|
||||
if(exists)
|
||||
if(SMB_VFS_UNLINK(conn,path)!=0)
|
||||
return False;
|
||||
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)));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
return True;
|
||||
|
||||
|
||||
ret = True;
|
||||
|
||||
out:
|
||||
talloc_destroy( conn->mem_ctx );
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL remove_msdfs_link(struct junction_map* jn)
|
||||
@ -801,14 +818,16 @@ BOOL remove_msdfs_link(struct junction_map* jn)
|
||||
pstring path;
|
||||
connection_struct conns;
|
||||
connection_struct *conn = &conns;
|
||||
BOOL ret = False;
|
||||
|
||||
if(!junction_to_local_path(jn, path, sizeof(path), conn))
|
||||
return False;
|
||||
|
||||
if(SMB_VFS_UNLINK(conn, path)!=0)
|
||||
return False;
|
||||
|
||||
return True;
|
||||
if( junction_to_local_path(jn, path, sizeof(path), conn) ) {
|
||||
if( SMB_VFS_UNLINK(conn, path) == 0 )
|
||||
ret = True;
|
||||
|
||||
talloc_destroy( conn->mem_ctx );
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
@ -821,6 +840,7 @@ static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
connection_struct conns;
|
||||
connection_struct *conn = &conns;
|
||||
struct referral *ref = NULL;
|
||||
BOOL ret = False;
|
||||
|
||||
pstrcpy(connect_path,lp_pathname(snum));
|
||||
|
||||
@ -846,7 +866,7 @@ static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
= (struct referral*) malloc(sizeof(struct referral));
|
||||
if (jn[cnt].referral_list == NULL) {
|
||||
DEBUG(0, ("Malloc failed!\n"));
|
||||
return False;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ref->proximity = 0;
|
||||
@ -854,7 +874,8 @@ static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
if (*lp_msdfs_proxy(snum) != '\0') {
|
||||
pstrcpy(ref->alternate_path, lp_msdfs_proxy(snum));
|
||||
*jn_count = ++cnt;
|
||||
return True;
|
||||
ret = True;
|
||||
goto out;
|
||||
}
|
||||
|
||||
slprintf(ref->alternate_path, sizeof(pstring)-1,
|
||||
@ -864,7 +885,7 @@ static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
/* Now enumerate all dfs links */
|
||||
dirp = SMB_VFS_OPENDIR(conn, connect_path);
|
||||
if(!dirp)
|
||||
return False;
|
||||
goto out;
|
||||
|
||||
while((dname = vfs_readdirname(conn, dirp)) != NULL) {
|
||||
pstring pathreal;
|
||||
@ -883,7 +904,9 @@ static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
|
||||
|
||||
SMB_VFS_CLOSEDIR(conn,dirp);
|
||||
*jn_count = cnt;
|
||||
return True;
|
||||
out:
|
||||
talloc_destroy(conn->mem_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int enum_msdfs_links(struct junction_map* jn)
|
||||
|
Loading…
Reference in New Issue
Block a user