s4-samdb: reduce the number of samdb opens at startup
authorAndrew Tridgell <tridge@samba.org>
Sun, 25 Oct 2009 06:19:03 +0000 (17:19 +1100)
committerAndrew Tridgell <tridge@samba.org>
Sun, 25 Oct 2009 06:19:03 +0000 (17:19 +1100)
Using common parameters means that the ldb_wrap code can return a
reference rather than a new database

source4/dsdb/kcc/kcc_service.c
source4/dsdb/repl/drepl_service.c
source4/dsdb/samdb/samdb_privilege.c
source4/kdc/hdb-samba4.c
source4/ldap_server/ldap_server.c
source4/smb_server/smb_server.c

index 32e09ac989808c8bb07bad739b0a86dcb858a29b..b088d2ed896cd94105999eec29a4ba5438a6f96d 100644 (file)
  */
 static WERROR kccsrv_init_creds(struct kccsrv_service *service)
 {
-       NTSTATUS status;
-
-       status = auth_system_session_info(service, service->task->lp_ctx, 
-                                         &service->system_session_info);
-       if (!NT_STATUS_IS_OK(status)) {
-               return ntstatus_to_werror(status);
+       service->system_session_info = system_session(service->task->lp_ctx);
+       if (!service->system_session_info) {
+               return WERR_NOMEM;
        }
 
        return WERR_OK;
index 34853c85f92ac6d21fca2f5a85d9043fdeb06cb0..a05ccc8d703f0931736fbc871bb2aa754758a275 100644 (file)
 
 static WERROR dreplsrv_init_creds(struct dreplsrv_service *service)
 {
-       NTSTATUS status;
-
-       status = auth_system_session_info(service, service->task->lp_ctx, 
-                                         &service->system_session_info);
-       if (!NT_STATUS_IS_OK(status)) {
-               return ntstatus_to_werror(status);
+       service->system_session_info = system_session(service->task->lp_ctx);
+       if (service->system_session_info == NULL) {
+               return WERR_NOMEM;
        }
 
        return WERR_OK;
index dcb96d8c0e84b9f6bf358af2e9eb23c40bfc10e2..81b9381b22bbccbad8106a2318fea55e33bbd161 100644 (file)
@@ -33,17 +33,8 @@ struct ldb_context *privilege_connect(TALLOC_CTX *mem_ctx,
                                      struct tevent_context *ev_ctx,
                                      struct loadparm_context *lp_ctx)
 {
-       char *path;
-       struct ldb_context *pdb;
-
-       path = private_path(mem_ctx, lp_ctx, "privilege.ldb");
-       if (!path) return NULL;
-
-       pdb = ldb_wrap_connect(mem_ctx, ev_ctx, lp_ctx, path, 
-                              NULL, NULL, 0);
-       talloc_free(path);
-
-       return pdb;
+       return ldb_wrap_connect(mem_ctx, ev_ctx, lp_ctx, "privilege.ldb", 
+                               NULL, NULL, 0);
 }
 
 /*
index 4062e13f6c17f8778eba9a5c19a8c380a9d0adde..5fef5908b847a06bc64e646d1ce1ed52fd797393 100644 (file)
@@ -1596,9 +1596,9 @@ NTSTATUS hdb_samba4_create_kdc(TALLOC_CTX *mem_ctx,
        (*db)->hdb_db = NULL;
        (*db)->hdb_capability_flags = 0;
 
-       nt_status = auth_system_session_info(*db, lp_ctx, &session_info);
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               return nt_status;
+       session_info = system_session(lp_ctx);
+       if (session_info == NULL) {
+               return NT_STATUS_INTERNAL_ERROR;
        }
        
        /* The idea here is very simple.  Using Kerberos to
index c45a4168f91c9397b1667e2d0fb609803d08d3cf..63bfc70b2a779a16637c04db25a3087a735b793f 100644 (file)
@@ -468,11 +468,9 @@ static void ldapsrv_accept_priv(struct stream_connection *c)
        struct ldapsrv_service *ldapsrv_service = talloc_get_type_abort(
                c->private_data, struct ldapsrv_service);
        struct auth_session_info *session_info;
-       NTSTATUS status;
 
-       status = auth_system_session_info(
-               c, ldapsrv_service->task->lp_ctx, &session_info);
-       if (!NT_STATUS_IS_OK(status)) {
+       session_info = system_session(ldapsrv_service->task->lp_ctx);
+       if (!session_info) {
                stream_terminate_connection(c, "failed to setup system "
                                            "session info");
                return;
index 9b10f66b2cc07389982e7f3e75938a4ac4cdd8b8..b0a37adba0050c8d17acc86797bb29fb3d69b182 100644 (file)
@@ -199,18 +199,6 @@ _PUBLIC_ NTSTATUS smbsrv_add_socket(struct tevent_context *event_context,
 }
 
 
-/*
-  pre-open some of our ldb databases, to prevent an explosion of memory usage
-  when we fork
- */
-static void smbsrv_preopen_ldb(struct task_server *task)
-{
-       /* yes, this looks strange. It is a hack to preload the
-          schema. I'd like to share most of the ldb context with the
-          child too. That will come later */
-       talloc_free(samdb_connect(task, task->event_ctx, task->lp_ctx, NULL));
-}
-
 /*
   open the smb server sockets
 */
@@ -245,8 +233,6 @@ static void smbsrv_task_init(struct task_server *task)
                if (!NT_STATUS_IS_OK(status)) goto failed;
        }
 
-       smbsrv_preopen_ldb(task);
-
        return;
 failed:
        task_server_terminate(task, "Failed to startup smb server task", true);