summaryrefslogtreecommitdiff
path: root/source4/auth/system_session.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-10-23 14:19:28 +1100
committerAndrew Tridgell <tridge@samba.org>2009-10-23 14:52:17 +1100
commit98e4393df926b600354ef16eb4eb19b5e11bf5c3 (patch)
treecb022930ab51d372c4102cad1357767b2b92c628 /source4/auth/system_session.c
parent4a1a9f579265e885c6fabb3acc3cf0d930feacc3 (diff)
downloadsamba-98e4393df926b600354ef16eb4eb19b5e11bf5c3.tar.gz
samba-98e4393df926b600354ef16eb4eb19b5e11bf5c3.tar.bz2
samba-98e4393df926b600354ef16eb4eb19b5e11bf5c3.zip
s4-dsdb: create a static system_session context
This patch adds a system_session cache, preventing us from having to recreate it on every ldb open, and allowing us to detect when the same session is being used in ldb_wrap
Diffstat (limited to 'source4/auth/system_session.c')
-rw-r--r--source4/auth/system_session.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/source4/auth/system_session.c b/source4/auth/system_session.c
index 8e22bd820e..765f53a613 100644
--- a/source4/auth/system_session.c
+++ b/source4/auth/system_session.c
@@ -146,22 +146,37 @@ static NTSTATUS generate_session_info(TALLOC_CTX *mem_ctx,
}
+/*
+ prevent the static system session being freed
+ */
+static int system_session_destructor(struct auth_session_info *info)
+{
+ return -1;
+}
/* Create a security token for a session SYSTEM (the most
* trusted/prvilaged account), including the local machine account as
* the off-host credentials
*/
-_PUBLIC_ struct auth_session_info *system_session(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
+_PUBLIC_ struct auth_session_info *system_session(struct loadparm_context *lp_ctx)
{
+ static struct auth_session_info *static_session;
NTSTATUS nt_status;
- struct auth_session_info *session_info = NULL;
- nt_status = auth_system_session_info(mem_ctx,
+
+ if (static_session) {
+ return static_session;
+ }
+
+ nt_status = auth_system_session_info(talloc_autofree_context(),
lp_ctx,
- &session_info);
+ &static_session);
if (!NT_STATUS_IS_OK(nt_status)) {
+ talloc_free(static_session);
+ static_session = NULL;
return NULL;
}
- return session_info;
+ talloc_set_destructor(static_session, system_session_destructor);
+ return static_session;
}
static NTSTATUS _auth_system_session_info(TALLOC_CTX *parent_ctx,