summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2017-04-27 09:28:55 +0200
committerJakub Hrozek <jhrozek@redhat.com>2017-04-28 09:12:44 +0200
commit2e5fc89ef25434fab7febe2c52e97ef989b50d5b (patch)
tree4148c6b6459c9b7d8d405c026066c699ad7f2b5d
parentfeeabf273aa7af580552366ce58655e6a482a0cd (diff)
downloadsssd-2e5fc89ef25434fab7febe2c52e97ef989b50d5b.tar.gz
sssd-2e5fc89ef25434fab7febe2c52e97ef989b50d5b.tar.xz
sssd-2e5fc89ef25434fab7febe2c52e97ef989b50d5b.zip
overrides: add certificates to mapped attribute
Certificates in overrides are explicitly used to map users to certificates, so we add them to SYSDB_USER_MAPPED_CERT as well. Resolves https://pagure.io/SSSD/sssd/issue/3373 Reviewed-by: Pavel Březina <pbrezina@redhat.com>
-rw-r--r--src/db/sysdb_views.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/db/sysdb_views.c b/src/db/sysdb_views.c
index 20db9b061..3773dda77 100644
--- a/src/db/sysdb_views.c
+++ b/src/db/sysdb_views.c
@@ -777,6 +777,7 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
int ret;
TALLOC_CTX *tmp_ctx;
struct sysdb_attrs *attrs;
+ struct sysdb_attrs *mapped_attrs = NULL;
size_t c;
size_t d;
size_t num_values;
@@ -791,6 +792,7 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
SYSDB_USER_CERT,
NULL };
bool override_attrs_found = false;
+ bool is_cert = false;
if (override_attrs == NULL) {
/* nothing to do */
@@ -846,6 +848,24 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
num_values = 1;
}
+ is_cert = false;
+ if (strcmp(allowed_attrs[c], SYSDB_USER_CERT) == 0) {
+ /* Certificates in overrides are explicitly used to map
+ * users to certificates, so we add them to
+ * SYSDB_USER_MAPPED_CERT as well. */
+ is_cert = true;
+
+ if (mapped_attrs == NULL) {
+ mapped_attrs = sysdb_new_attrs(tmp_ctx);
+ if (mapped_attrs == NULL) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ "sysdb_new_attrs failed.\n");
+ ret = ENOMEM;
+ goto done;
+ }
+ }
+ }
+
for (d = 0; d < num_values; d++) {
ret = sysdb_attrs_add_val(attrs, allowed_attrs[c],
&el->values[d]);
@@ -854,6 +874,18 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
"sysdb_attrs_add_val failed.\n");
goto done;
}
+
+ if (is_cert) {
+ ret = sysdb_attrs_add_val(mapped_attrs,
+ SYSDB_USER_MAPPED_CERT,
+ &el->values[d]);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ "sysdb_attrs_add_val failed.\n");
+ goto done;
+ }
+ }
+
DEBUG(SSSDBG_TRACE_ALL,
"Override [%s] with [%.*s] for [%s].\n",
allowed_attrs[c], (int) el->values[d].length,
@@ -878,6 +910,15 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
DEBUG(SSSDBG_OP_FAILURE, "sysdb_set_entry_attr failed.\n");
goto done;
}
+
+ if (mapped_attrs != NULL) {
+ ret = sysdb_set_entry_attr(domain->sysdb, obj_dn, mapped_attrs,
+ SYSDB_MOD_ADD);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ "sysdb_set_entry_attr failed, ignored.\n");
+ }
+ }
}
ret = EOK;