Merge branch 'master' of ssh://git.samba.org/data/git/samba
[samba.git] / source4 / dsdb / samdb / samdb_privilege.c
index 688d1ef9de3da4586d3337f2fbee4573a85c7c48..f05b7e2a186dbf68407e46f6658d0dd296533e58 100644 (file)
 #include "dsdb/samdb/samdb.h"
 #include "auth/auth.h"
 #include "libcli/security/security.h"
-#include "util/util_ldb.h"
+#include "../lib/util/util_ldb.h"
 #include "param/param.h"
+#include "ldb_wrap.h"
+
+/* connect to the privilege database */
+struct ldb_context *privilege_connect(TALLOC_CTX *mem_ctx, 
+                                     struct tevent_context *ev_ctx,
+                                     struct loadparm_context *lp_ctx)
+{
+       return ldb_wrap_connect(mem_ctx, ev_ctx, lp_ctx, "privilege.ldb",
+                               NULL, NULL, 0);
+}
 
 /*
   add privilege bits for one sid to a security_token
 */
-static NTSTATUS samdb_privilege_setup_sid(void *samctx, TALLOC_CTX *mem_ctx,
+static NTSTATUS samdb_privilege_setup_sid(struct ldb_context *pdb, TALLOC_CTX *mem_ctx,
                                          struct security_token *token,
                                          const struct dom_sid *sid)
 {
        const char * const attrs[] = { "privilege", NULL };
        struct ldb_message **res = NULL;
        struct ldb_message_element *el;
-       int ret, i;
+       unsigned int i;
+       int ret;
        char *sidstr;
 
        sidstr = ldap_encode_ndr_dom_sid(mem_ctx, sid);
        NT_STATUS_HAVE_NO_MEMORY(sidstr);
 
-       ret = gendb_search(samctx, mem_ctx, NULL, &res, attrs, "objectSid=%s", sidstr);
+       ret = gendb_search(pdb, mem_ctx, NULL, &res, attrs, "objectSid=%s", sidstr);
        talloc_free(sidstr);
        if (ret != 1) {
                /* not an error to not match */
@@ -73,12 +84,12 @@ static NTSTATUS samdb_privilege_setup_sid(void *samctx, TALLOC_CTX *mem_ctx,
   setup the privilege mask for this security token based on our
   local SAM
 */
-NTSTATUS samdb_privilege_setup(struct event_context *ev_ctx, 
+NTSTATUS samdb_privilege_setup(struct tevent_context *ev_ctx, 
                               struct loadparm_context *lp_ctx, struct security_token *token)
 {
-       void *samctx;
+       struct ldb_context *pdb;
        TALLOC_CTX *mem_ctx;
-       int i;
+       unsigned int i;
        NTSTATUS status;
 
        /* Shortcuts to prevent recursion and avoid lookups */
@@ -98,8 +109,8 @@ NTSTATUS samdb_privilege_setup(struct event_context *ev_ctx,
        }
 
        mem_ctx = talloc_new(token);
-       samctx = samdb_connect(mem_ctx, ev_ctx, lp_ctx, system_session(mem_ctx, lp_ctx));
-       if (samctx == NULL) {
+       pdb = privilege_connect(mem_ctx, ev_ctx, lp_ctx);
+       if (pdb == NULL) {
                talloc_free(mem_ctx);
                return NT_STATUS_INTERNAL_DB_CORRUPTION;
        }
@@ -107,7 +118,7 @@ NTSTATUS samdb_privilege_setup(struct event_context *ev_ctx,
        token->privilege_mask = 0;
        
        for (i=0;i<token->num_sids;i++) {
-               status = samdb_privilege_setup_sid(samctx, mem_ctx,
+               status = samdb_privilege_setup_sid(pdb, mem_ctx,
                                                   token, token->sids[i]);
                if (!NT_STATUS_IS_OK(status)) {
                        talloc_free(mem_ctx);