summaryrefslogtreecommitdiff
path: root/src/responder/pac
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2012-11-26 12:33:11 +0100
committerJakub Hrozek <jhrozek@redhat.com>2013-01-08 14:42:56 +0100
commit12bfb1b3c9683ccc9972749772a6e6be495c0769 (patch)
tree3a39c3acfce04fff47b4d4a01a65bae3a8206f27 /src/responder/pac
parent8d371b14623e1dced3ddc885ff7d8cd2cbf50604 (diff)
downloadsssd-12bfb1b3c9683ccc9972749772a6e6be495c0769.tar.gz
sssd-12bfb1b3c9683ccc9972749772a6e6be495c0769.tar.bz2
sssd-12bfb1b3c9683ccc9972749772a6e6be495c0769.zip
Add find_domain_by_id()
Currently domains can only be searched by name in the global domain list. To make it easier to find the domain for a given SID find_domain_by_id() which returns a pointer to the domain or subdomain entry in the global domain list if a matching id was found.
Diffstat (limited to 'src/responder/pac')
-rw-r--r--src/responder/pac/pacsrv.h3
-rw-r--r--src/responder/pac/pacsrv_utils.c39
2 files changed, 42 insertions, 0 deletions
diff --git a/src/responder/pac/pacsrv.h b/src/responder/pac/pacsrv.h
index 8cd49284..4d3a3164 100644
--- a/src/responder/pac/pacsrv.h
+++ b/src/responder/pac/pacsrv.h
@@ -125,4 +125,7 @@ errno_t diff_gid_lists(TALLOC_CTX *mem_ctx,
struct pac_grp **_add_gid_list,
size_t *_del_gid_num,
struct grp_info ***_del_gid_list);
+
+struct sss_domain_info *find_domain_by_id(struct sss_domain_info *domains,
+ const char *id_str);
#endif /* __PACSRV_H__ */
diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c
index 6e0f4bfa..d79adb1f 100644
--- a/src/responder/pac/pacsrv_utils.c
+++ b/src/responder/pac/pacsrv_utils.c
@@ -71,6 +71,45 @@ errno_t local_sid_to_id(struct local_mapping_ranges *map, struct dom_sid *sid,
return EOK;
}
+struct sss_domain_info *find_domain_by_id(struct sss_domain_info *domains,
+ const char *id_str)
+{
+ struct sss_domain_info *dom;
+ struct sss_domain_info *ret_dom = NULL;
+ size_t c;
+
+ if (id_str == NULL) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Missing domain id.\n"));
+ return NULL;
+ }
+
+ for (dom = domains; dom; dom = dom->next) {
+ if (dom->domain_id == NULL) {
+ continue;
+ }
+
+ if (strcasecmp(dom->domain_id, id_str) == 0) {
+ ret_dom = dom;
+ break;
+ }
+
+ for (c = 0; c < dom->subdomain_count; c++) {
+ if (strcasecmp(dom->subdomains[c]->domain_id, id_str) == 0) {
+ ret_dom = dom->subdomains[c];
+ break;
+ }
+ }
+
+ }
+
+ if (!ret_dom) {
+ DEBUG(SSSDBG_OP_FAILURE, ("No domain with domain ID [%s] found",
+ id_str));
+ }
+
+ return ret_dom;
+}
+
/**
* Add a new remote domain and the corresponding ID range to the context of
* the libsss_idmap. Without this it is not possible to find the Posix UID for