summaryrefslogtreecommitdiff
path: root/source3/winbindd
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2012-11-22 18:16:31 +0100
committerStefan Metzmacher <metze@samba.org>2012-12-03 08:48:23 +0100
commit370d62578dd171c6f898f4868f382cdddb908bcf (patch)
tree514ced38c426465fdd3881bebfc2e951ce1648a6 /source3/winbindd
parent150cfb4b97e2ee67ec1fa8fc379ac03d42002da9 (diff)
downloadsamba-370d62578dd171c6f898f4868f382cdddb908bcf.tar.gz
samba-370d62578dd171c6f898f4868f382cdddb908bcf.tar.bz2
samba-370d62578dd171c6f898f4868f382cdddb908bcf.zip
s3:winbindd: add idmap_find_domain_with_sid()
This will return the passdb domain if the given sid is in our sam or builtin or is the domain sid of those domains. Otherwise it returns the idmap domain that results from the idmap configuration. Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/winbindd')
-rw-r--r--source3/winbindd/idmap.c16
-rw-r--r--source3/winbindd/winbindd_proto.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/source3/winbindd/idmap.c b/source3/winbindd/idmap.c
index 07295e757a..065b7e67db 100644
--- a/source3/winbindd/idmap.c
+++ b/source3/winbindd/idmap.c
@@ -422,6 +422,22 @@ struct idmap_domain *idmap_find_domain(const char *domname)
return result;
}
+struct idmap_domain *idmap_find_domain_with_sid(const char *domname,
+ const struct dom_sid *sid)
+{
+ idmap_init();
+
+ if (sid_check_is_in_builtin(sid) ||
+ sid_check_is_builtin(sid) ||
+ sid_check_is_in_our_sam(sid) ||
+ sid_check_is_our_sam(sid))
+ {
+ return idmap_passdb_domain(NULL);
+ }
+
+ return idmap_find_domain(domname);
+}
+
void idmap_close(void)
{
TALLOC_FREE(default_idmap_domain);
diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h
index 4e5fb7389c..5952bf96bc 100644
--- a/source3/winbindd/winbindd_proto.h
+++ b/source3/winbindd/winbindd_proto.h
@@ -317,6 +317,8 @@ NTSTATUS winbindd_print_groupmembers(struct talloc_dict *members,
void init_idmap_child(void);
struct winbindd_child *idmap_child(void);
struct idmap_domain *idmap_find_domain(const char *domname);
+struct idmap_domain *idmap_find_domain_with_sid(const char *domname,
+ const struct dom_sid *sid);
/* The following definitions come from winbindd/winbindd_locator.c */