s3:passdb add pdb_*_is_responsible_for* functions
authorChristian Ambach <ambi@samba.org>
Mon, 27 May 2013 10:24:22 +0000 (12:24 +0200)
committerMichael Adam <obnox@samba.org>
Fri, 21 Jun 2013 08:44:19 +0000 (10:44 +0200)
allows PDB modules to specify for which special domains they
are responsible when it comes to SID->xid conversion

By default, passdb modules will be responsible for local BUILTIN,
local SAM and Unix Users/Groups

Pair-Programmed-With: Michael Adam <obnox@samba.org>

Signed-off-by: Christian Ambach <ambi@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
source3/include/passdb.h
source3/passdb/ABI/pdb-0.sigs
source3/passdb/pdb_interface.c

index e032ae1014030a1330d8c3593800b2a5789cc0f3..793c7667cc2b905c1d4fad03023fe34a17140411 100644 (file)
@@ -934,6 +934,11 @@ NTSTATUS pdb_enum_upn_suffixes(TALLOC_CTX *mem_ctx,
 
 NTSTATUS pdb_set_upn_suffixes(uint32_t num_suffixes,
                              const char **suffixes);
+bool pdb_is_responsible_for_our_sam(void);
+bool pdb_is_responsible_for_builtin(void);
+bool pdb_is_responsible_for_wellknown(void);
+bool pdb_is_responsible_for_unix_users(void);
+bool pdb_is_responsible_for_unix_groups(void);
 
 /* The following definitions come from passdb/pdb_util.c  */
 
index 51810efeca69c53a5ed418aff3e138a8519eb8f3..09563f5089dcbb9a6c1e5abe434cc0e7268c701a 100644 (file)
@@ -90,6 +90,11 @@ pdb_default_get_aliasinfo: NTSTATUS (struct pdb_methods *, const struct dom_sid
 pdb_default_getgrgid: NTSTATUS (struct pdb_methods *, GROUP_MAP *, gid_t)
 pdb_default_getgrnam: NTSTATUS (struct pdb_methods *, GROUP_MAP *, const char *)
 pdb_default_getgrsid: NTSTATUS (struct pdb_methods *, GROUP_MAP *, struct dom_sid)
+pdb_is_responsible_for_our_sam: bool (void)
+pdb_is_responsible_for_builtin: bool (void)
+pdb_is_responsible_for_wellknown: bool (void)
+pdb_is_responsible_for_unix_users: bool (void)
+pdb_is_responsible_for_unix_groups: bool (void)
 pdb_default_set_aliasinfo: NTSTATUS (struct pdb_methods *, const struct dom_sid *, struct acct_info *)
 pdb_default_update_group_mapping_entry: NTSTATUS (struct pdb_methods *, GROUP_MAP *)
 pdb_del_aliasmem: NTSTATUS (const struct dom_sid *, const struct dom_sid *)
index 36dde6f8e6cc16aaa43c4a6600dc3b91a1cdac81..b45b4d66bbd528770adacdf056f6e40f0e1b02de 100644 (file)
@@ -2373,6 +2373,69 @@ NTSTATUS pdb_set_upn_suffixes(uint32_t num_suffixes,
        return pdb->set_upn_suffixes(pdb, num_suffixes, suffixes);
 }
 
+/*******************************************************************
+ idmap control methods
+ *******************************************************************/
+static bool pdb_default_is_responsible_for_our_sam(
+                                       struct pdb_methods *methods)
+{
+       return true;
+}
+
+static bool pdb_default_is_responsible_for_builtin(
+                                       struct pdb_methods *methods)
+{
+       return true;
+}
+
+static bool pdb_default_is_responsible_for_wellknown(
+                                       struct pdb_methods *methods)
+{
+       return false;
+}
+
+static bool pdb_default_is_responsible_for_unix_users(
+                                       struct pdb_methods *methods)
+{
+       return true;
+}
+
+static bool pdb_default_is_responsible_for_unix_groups(
+                                       struct pdb_methods *methods)
+{
+       return true;
+}
+
+bool pdb_is_responsible_for_our_sam(void)
+{
+       struct pdb_methods *pdb = pdb_get_methods();
+       return pdb->is_responsible_for_our_sam(pdb);
+}
+
+bool pdb_is_responsible_for_builtin(void)
+{
+       struct pdb_methods *pdb = pdb_get_methods();
+       return pdb->is_responsible_for_builtin(pdb);
+}
+
+bool pdb_is_responsible_for_wellknown(void)
+{
+       struct pdb_methods *pdb = pdb_get_methods();
+       return pdb->is_responsible_for_wellknown(pdb);
+}
+
+bool pdb_is_responsible_for_unix_users(void)
+{
+       struct pdb_methods *pdb = pdb_get_methods();
+       return pdb->is_responsible_for_unix_users(pdb);
+}
+
+bool pdb_is_responsible_for_unix_groups(void)
+{
+       struct pdb_methods *pdb = pdb_get_methods();
+       return pdb->is_responsible_for_unix_groups(pdb);
+}
+
 /*******************************************************************
  secret methods
  *******************************************************************/
@@ -2523,5 +2586,16 @@ NTSTATUS make_pdb_method( struct pdb_methods **methods )
        (*methods)->enum_upn_suffixes = pdb_default_enum_upn_suffixes;
        (*methods)->set_upn_suffixes  = pdb_default_set_upn_suffixes;
 
+       (*methods)->is_responsible_for_our_sam =
+                               pdb_default_is_responsible_for_our_sam;
+       (*methods)->is_responsible_for_builtin =
+                               pdb_default_is_responsible_for_builtin;
+       (*methods)->is_responsible_for_wellknown =
+                               pdb_default_is_responsible_for_wellknown;
+       (*methods)->is_responsible_for_unix_users =
+                               pdb_default_is_responsible_for_unix_users;
+       (*methods)->is_responsible_for_unix_groups =
+                               pdb_default_is_responsible_for_unix_groups;
+
        return NT_STATUS_OK;
 }