diff options
author | Jeremy Allison <jra@samba.org> | 2005-08-02 23:55:38 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:00:23 -0500 |
commit | 78d6fa7277fadc77d80c400d3a38114a9e296d12 (patch) | |
tree | 7dfe41773d7c103c9d4ca81ff90f1b8262e16c09 /source3/smbd/msdfs.c | |
parent | 08ebcb09418a359bbf1eaeb650364fe3ee50f491 (diff) | |
download | samba-78d6fa7277fadc77d80c400d3a38114a9e296d12.tar.gz |
r8963: Clean up the horrid "fake conn struct" part of MSDFS.
Jeremy.
(This used to be commit 14dd5ab632ff9abb9582e6484187c6ee1573cdd6)
Diffstat (limited to 'source3/smbd/msdfs.c')
-rw-r--r-- | source3/smbd/msdfs.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index ade167f3c56..2b13e2a4b5a 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -133,12 +133,11 @@ static BOOL create_conn_struct(connection_struct *conn, int snum, char *path) pstring connpath; ZERO_STRUCTP(conn); + conn->service = snum; pstrcpy(connpath, path); pstring_sub(connpath , "%S", lp_servicename(snum)); - string_set(&conn->connectpath, connpath); - /* needed for smbd_vfs_init() */ if ( (conn->mem_ctx=talloc_init("connection_struct")) == NULL ) { @@ -146,9 +145,11 @@ static BOOL create_conn_struct(connection_struct *conn, int snum, char *path) return False; } + string_set(&conn->connectpath, connpath); + if (!smbd_vfs_init(conn)) { DEBUG(0,("create_conn_struct: smbd_vfs_init failed.\n")); - talloc_destroy( conn->mem_ctx ); + conn_free_internal(conn); return False; } @@ -161,9 +162,10 @@ static BOOL create_conn_struct(connection_struct *conn, int snum, char *path) if (vfs_ChDir(conn,conn->connectpath) != 0) { DEBUG(3,("create_conn_struct: Can't ChDir to new conn path %s. Error was %s\n", conn->connectpath, strerror(errno) )); - talloc_destroy( conn->mem_ctx ); + conn_free_internal(conn); return False; } + return True; } @@ -477,7 +479,7 @@ BOOL get_referred_path(TALLOC_CTX *ctx, char *pathname, struct junction_map *juc struct dfs_path dp; struct connection_struct conns; - struct connection_struct* conn = &conns; + struct connection_struct *conn = &conns; pstring conn_path; int snum; BOOL ret = False; @@ -585,10 +587,7 @@ BOOL get_referred_path(TALLOC_CTX *ctx, char *pathname, struct junction_map *juc out: - if (conn->mem_ctx) { - talloc_destroy( conn->mem_ctx ); - } - + conn_free_internal(conn); return ret; } @@ -937,6 +936,8 @@ BOOL create_msdfs_link(struct junction_map *jucn, BOOL exists) BOOL insert_comma = False; BOOL ret = False; + ZERO_STRUCT(conns); + if(!junction_to_local_path(jucn, path, sizeof(path), conn)) { return False; } @@ -981,7 +982,8 @@ BOOL create_msdfs_link(struct junction_map *jucn, BOOL exists) ret = True; out: - talloc_destroy( conn->mem_ctx ); + + conn_free_internal(conn); return ret; } @@ -992,6 +994,8 @@ BOOL remove_msdfs_link(struct junction_map *jucn) connection_struct *conn = &conns; BOOL ret = False; + ZERO_STRUCT(conns); + if( junction_to_local_path(jucn, path, sizeof(path), conn) ) { if( SMB_VFS_UNLINK(conn, path) == 0 ) { ret = True; @@ -999,6 +1003,7 @@ BOOL remove_msdfs_link(struct junction_map *jucn) talloc_destroy( conn->mem_ctx ); } + conn_free_internal(conn); return ret; } @@ -1012,6 +1017,8 @@ static int form_junctions(TALLOC_CTX *ctx, int snum, struct junction_map *jucn, connection_struct conn; struct referral *ref = NULL; + ZERO_STRUCT(conn); + if (jn_remain <= 0) { return 0; } @@ -1078,7 +1085,8 @@ static int form_junctions(TALLOC_CTX *ctx, int snum, struct junction_map *jucn, SMB_VFS_CLOSEDIR(&conn,dirp); out: - conn_free(&conn); + + conn_free_internal(&conn); return cnt; } |