summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2016-04-06 18:12:31 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2016-06-09 16:12:25 +0200
commit8822520e6552bbf5ad1b62a4f88dd31a9c8475f1 (patch)
treeb438a4a6f577e5c1de6b64c90be5f9977fa279f4 /src
parentffe2522a208cddd415d7c3498dcc73ffda863b6f (diff)
downloadsssd-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.c25
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)++;