diff options
author | Sumit Bose <sbose@redhat.com> | 2016-04-06 18:12:31 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2016-06-09 16:12:25 +0200 |
commit | 8822520e6552bbf5ad1b62a4f88dd31a9c8475f1 (patch) | |
tree | b438a4a6f577e5c1de6b64c90be5f9977fa279f4 /src | |
parent | ffe2522a208cddd415d7c3498dcc73ffda863b6f (diff) | |
download | sssd-8822520e6552bbf5ad1b62a4f88dd31a9c8475f1.tar.gz sssd-8822520e6552bbf5ad1b62a4f88dd31a9c8475f1.tar.xz sssd-8822520e6552bbf5ad1b62a4f88dd31a9c8475f1.zip |
nss: return user certificate base64 encoded
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index ab6700a18..c91403256 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -22,6 +22,7 @@ #include "util/util.h" #include "util/sss_nss.h" #include "util/sss_cli_cmd.h" +#include "util/crypto/sss_crypto.h" #include "responder/nss/nsssrv.h" #include "responder/nss/nsssrv_private.h" #include "responder/nss/nsssrv_netgroup.h" @@ -4973,8 +4974,9 @@ static errno_t process_attr_list(TALLOC_CTX *mem_ctx, struct ldb_message *msg, size_t d; struct sized_string *keys; struct sized_string *vals; - struct ldb_val *val; + struct ldb_val val; struct ldb_message_element *el; + bool use_base64; keys = *_keys; vals = *_vals; @@ -4993,18 +4995,31 @@ static errno_t process_attr_list(TALLOC_CTX *mem_ctx, struct ldb_message *msg, return ENOMEM; } } + + use_base64 = false; + if (strcmp(attr_list[c], SYSDB_USER_CERT) == 0) { + use_base64 = true; + } for (d = 0; d < el->num_values; d++) { to_sized_string(&keys[*found], attr_list[c]); *sum += keys[*found].len; - val = &(el->values[d]); - if (val == NULL || val->data == NULL - || val->data[val->length] != '\0') { + if (use_base64) { + val.data = (uint8_t *) sss_base64_encode(vals, + el->values[d].data, + el->values[d].length); + if (val.data != NULL) { + val.length = strlen((char *)val.data); + } + } else { + val = el->values[d]; + } + if (val.data == NULL || val.data[val.length] != '\0') { DEBUG(SSSDBG_CRIT_FAILURE, "Unexpected attribute value found for [%s].\n", attr_list[c]); return EINVAL; } - to_sized_string(&vals[*found], (const char *)val->data); + to_sized_string(&vals[*found], (const char *)val.data); *sum += vals[*found].len; (*found)++; |