s3:rpc_server/fss: make use of create_conn_struct_tos()
[vlendec/samba-autobuild/.git] / source3 / rpc_server / fss / srv_fss_agent.c
index 846b1047670cc5ba1812337f622d8d9295c25a75..33cbca87d73f9196929520af2172afb82ff4e744 100644 (file)
@@ -132,13 +132,10 @@ static NTSTATUS fss_unc_parse(TALLOC_CTX *mem_ctx,
        return NT_STATUS_OK;
 }
 
-static NTSTATUS fss_vfs_conn_create(TALLOC_CTX *mem_ctx,
-                                   struct tevent_context *ev,
-                                   struct messaging_context *msg_ctx,
+static NTSTATUS fss_conn_create_tos(struct messaging_context *msg_ctx,
                                    struct auth_session_info *session_info,
                                    int snum,
                                    struct connection_struct **conn_out);
-static void fss_vfs_conn_destroy(struct connection_struct *conn);
 
 /* test if system path exists */
 static bool snap_path_exists(TALLOC_CTX *ctx, struct messaging_context *msg_ctx,
@@ -168,9 +165,7 @@ static bool snap_path_exists(TALLOC_CTX *ctx, struct messaging_context *msg_ctx,
                goto out;
        }
 
-       status = fss_vfs_conn_create(frame, server_event_context(),
-                                    msg_ctx, NULL, snum, &conn);
-
+       status = fss_conn_create_tos(msg_ctx, NULL, snum, &conn);
        if(!NT_STATUS_IS_OK(status)) {
                goto out;
        }
@@ -186,9 +181,6 @@ static bool snap_path_exists(TALLOC_CTX *ctx, struct messaging_context *msg_ctx,
        }
        result = true;
 out:
-       if (conn) {
-               fss_vfs_conn_destroy(conn);
-       }
        TALLOC_FREE(frame);
        return result;
 }
@@ -289,45 +281,34 @@ out:
        return status;
 }
 
-static NTSTATUS fss_vfs_conn_create(TALLOC_CTX *mem_ctx,
-                                   struct tevent_context *ev,
-                                   struct messaging_context *msg_ctx,
+static NTSTATUS fss_conn_create_tos(struct messaging_context *msg_ctx,
                                    struct auth_session_info *session_info,
                                    int snum,
                                    struct connection_struct **conn_out)
 {
-       struct connection_struct *conn = NULL;
+       struct conn_struct_tos *c = NULL;
        NTSTATUS status;
 
-       status = create_conn_struct(mem_ctx, ev, msg_ctx, &conn,
-                                   snum, lp_path(mem_ctx, snum),
-                                   session_info);
+       status = create_conn_struct_tos(msg_ctx,
+                                       snum,
+                                       lp_path(talloc_tos(), snum),
+                                       session_info,
+                                       &c);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0,("failed to create conn for vfs: %s\n",
                         nt_errstr(status)));
                return status;
        }
 
-       status = set_conn_force_user_group(conn, snum);
+       status = set_conn_force_user_group(c->conn, snum);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("failed set force user / group\n"));
-               goto err_free_conn;
+               TALLOC_FREE(c);
+               return status;
        }
 
-       *conn_out = conn;
-
+       *conn_out = c->conn;
        return NT_STATUS_OK;
-
-err_free_conn:
-       SMB_VFS_DISCONNECT(conn);
-       conn_free(conn);
-       return status;
-}
-
-static void fss_vfs_conn_destroy(struct connection_struct *conn)
-{
-       SMB_VFS_DISCONNECT(conn);
-       conn_free(conn);
 }
 
 static struct fss_sc_set *sc_set_lookup(struct fss_sc_set *sc_set_head,
@@ -780,22 +761,19 @@ uint32_t _fss_AddToShadowCopySet(struct pipes_struct *p,
                goto err_tmp_free;
        }
 
-       status = fss_vfs_conn_create(frame, server_event_context(),
-                                    p->msg_ctx, p->session_info, snum, &conn);
+       status = fss_conn_create_tos(p->msg_ctx, p->session_info, snum, &conn);
        if (!NT_STATUS_IS_OK(status)) {
                ret = HRES_ERROR_V(HRES_E_ACCESSDENIED);
                goto err_tmp_free;
        }
        if (!become_user_by_session(conn, p->session_info)) {
                DEBUG(0, ("failed to become user\n"));
-               fss_vfs_conn_destroy(conn);
                ret = HRES_ERROR_V(HRES_E_ACCESSDENIED);
                goto err_tmp_free;
        }
 
        status = SMB_VFS_SNAP_CHECK_PATH(conn, frame, path_name, &base_vol);
        unbecome_user();
-       fss_vfs_conn_destroy(conn);
        if (!NT_STATUS_IS_OK(status)) {
                ret = FSRVP_E_NOT_SUPPORTED;
                goto err_tmp_free;
@@ -909,9 +887,7 @@ static NTSTATUS commit_sc_with_conn(TALLOC_CTX *mem_ctx,
                return NT_STATUS_UNSUCCESSFUL;
        }
 
-       status = fss_vfs_conn_create(frame,
-                                    ev, msg_ctx, session_info,
-                                    snum, &conn);
+       status = fss_conn_create_tos(msg_ctx, session_info, snum, &conn);
        if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(frame);
                return status;
@@ -919,7 +895,6 @@ static NTSTATUS commit_sc_with_conn(TALLOC_CTX *mem_ctx,
 
        if (!become_user_by_session(conn, session_info)) {
                DEBUG(0, ("failed to become user\n"));
-               fss_vfs_conn_destroy(conn);
                TALLOC_FREE(frame);
                return NT_STATUS_ACCESS_DENIED;
        }
@@ -929,7 +904,6 @@ static NTSTATUS commit_sc_with_conn(TALLOC_CTX *mem_ctx,
                                     &sc->create_ts, rw,
                                     base_path, snap_path);
        unbecome_user();
-       fss_vfs_conn_destroy(conn);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("snap create failed: %s\n", nt_errstr(status)));
                TALLOC_FREE(frame);
@@ -1370,15 +1344,13 @@ uint32_t _fss_IsPathSupported(struct pipes_struct *p,
                return HRES_ERROR_V(HRES_E_INVALIDARG);
        }
 
-       status = fss_vfs_conn_create(frame, server_event_context(),
-                                    p->msg_ctx, p->session_info, snum, &conn);
+       status = fss_conn_create_tos(p->msg_ctx, p->session_info, snum, &conn);
        if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(frame);
                return HRES_ERROR_V(HRES_E_ACCESSDENIED);
        }
        if (!become_user_by_session(conn, p->session_info)) {
                DEBUG(0, ("failed to become user\n"));
-               fss_vfs_conn_destroy(conn);
                TALLOC_FREE(frame);
                return HRES_ERROR_V(HRES_E_ACCESSDENIED);
        }
@@ -1386,7 +1358,6 @@ uint32_t _fss_IsPathSupported(struct pipes_struct *p,
                                         lp_path(frame, snum),
                                         &base_vol);
        unbecome_user();
-       fss_vfs_conn_destroy(conn);
        if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(frame);
                return FSRVP_E_NOT_SUPPORTED;
@@ -1653,22 +1624,21 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
                goto err_tmp_free;
        }
 
-       status = fss_vfs_conn_create(frame, server_event_context(),
-                                    p->msg_ctx, p->session_info, snum, &conn);
+       status = fss_conn_create_tos(p->msg_ctx, p->session_info, snum, &conn);
        if (!NT_STATUS_IS_OK(status)) {
                goto err_tmp_free;
        }
        if (!become_user_by_session(conn, p->session_info)) {
                DEBUG(0, ("failed to become user\n"));
                status = NT_STATUS_ACCESS_DENIED;
-               goto err_conn_destroy;
+               goto err_tmp_free;
        }
 
        status = SMB_VFS_SNAP_DELETE(conn, frame, sc->volume_name,
                                     sc->sc_path);
        unbecome_user();
        if (!NT_STATUS_IS_OK(status)) {
-               goto err_conn_destroy;
+               goto err_tmp_free;
        }
 
        /* XXX set timeout r->in.TimeOutInMilliseconds */
@@ -1698,10 +1668,8 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
        }
 
        status = NT_STATUS_OK;
-err_conn_destroy:
-       fss_vfs_conn_destroy(conn);
 err_tmp_free:
-       talloc_free(frame);
+       TALLOC_FREE(frame);
        return fss_ntstatus_map(status);
 }