summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2017-03-01 17:07:12 +0100
committerLukas Slebodnik <lslebodn@redhat.com>2017-03-10 22:20:14 +0100
commit7aadfa5454e436e4c36ede00434ff9687a6c48e2 (patch)
tree917e37b57bce77601bbad846bf8aaf6b8245df66
parent16c9d63d96ce8dc7517ae16502e9ec72d6a58d6c (diff)
downloadsssd-7aadfa5454e436e4c36ede00434ff9687a6c48e2.tar.gz
sssd-7aadfa5454e436e4c36ede00434ff9687a6c48e2.tar.xz
sssd-7aadfa5454e436e4c36ede00434ff9687a6c48e2.zip
nss: ensure that SSS_NSS_GETNAMEBYCERT only returns a unique match
Related to https://pagure.io/SSSD/sssd/issue/3050 Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r--src/responder/nss/nss_cmd.c2
-rw-r--r--src/responder/nss/nss_protocol.h6
-rw-r--r--src/responder/nss/nss_protocol_sid.c15
3 files changed, 22 insertions, 1 deletions
diff --git a/src/responder/nss/nss_cmd.c b/src/responder/nss/nss_cmd.c
index 84bb60f59..08b3d32f2 100644
--- a/src/responder/nss/nss_cmd.c
+++ b/src/responder/nss/nss_cmd.c
@@ -929,7 +929,7 @@ static errno_t nss_cmd_getorigbyname(struct cli_ctx *cli_ctx)
static errno_t nss_cmd_getnamebycert(struct cli_ctx *cli_ctx)
{
return nss_getby_cert(cli_ctx, CACHE_REQ_USER_BY_CERT,
- nss_protocol_fill_name);
+ nss_protocol_fill_single_name);
}
struct sss_cmd_table *get_nss_cmds(void)
diff --git a/src/responder/nss/nss_protocol.h b/src/responder/nss/nss_protocol.h
index 40552dc99..c94e7b911 100644
--- a/src/responder/nss/nss_protocol.h
+++ b/src/responder/nss/nss_protocol.h
@@ -169,6 +169,12 @@ nss_protocol_fill_name(struct nss_ctx *nss_ctx,
struct cache_req_result *result);
errno_t
+nss_protocol_fill_single_name(struct nss_ctx *nss_ctx,
+ struct nss_cmd_ctx *cmd_ctx,
+ struct sss_packet *packet,
+ struct cache_req_result *result);
+
+errno_t
nss_protocol_fill_id(struct nss_ctx *nss_ctx,
struct nss_cmd_ctx *cmd_ctx,
struct sss_packet *packet,
diff --git a/src/responder/nss/nss_protocol_sid.c b/src/responder/nss/nss_protocol_sid.c
index 40fbc5dd1..0b97e65f7 100644
--- a/src/responder/nss/nss_protocol_sid.c
+++ b/src/responder/nss/nss_protocol_sid.c
@@ -389,6 +389,21 @@ nss_get_ad_name(TALLOC_CTX *mem_ctx,
}
errno_t
+nss_protocol_fill_single_name(struct nss_ctx *nss_ctx,
+ struct nss_cmd_ctx *cmd_ctx,
+ struct sss_packet *packet,
+ struct cache_req_result *result)
+{
+ if (result->ldb_result->count > 1) {
+ DEBUG(SSSDBG_TRACE_FUNC, "Lookup returned more than one result "
+ "but only one was expected.\n");
+ return EEXIST;
+ }
+
+ return nss_protocol_fill_name(nss_ctx, cmd_ctx, packet, result);
+}
+
+errno_t
nss_protocol_fill_name(struct nss_ctx *nss_ctx,
struct nss_cmd_ctx *cmd_ctx,
struct sss_packet *packet,