diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2012-01-19 20:38:40 -0500 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-01-21 12:47:57 -0500 |
commit | 0c7aa697991ea9df960fae14fd567ebdda3b4ff4 (patch) | |
tree | e61deb65296375cf381ef780c4bea12fe07d0589 /src/responder/common/responder_dp.c | |
parent | 91d521779424409646649a84a99a20f8e8e159df (diff) | |
download | sssd-0c7aa697991ea9df960fae14fd567ebdda3b4ff4.tar.gz sssd-0c7aa697991ea9df960fae14fd567ebdda3b4ff4.tar.xz sssd-0c7aa697991ea9df960fae14fd567ebdda3b4ff4.zip |
RESPONDER: Extend sss_dp_account_send() to include extra data
Some NSS maps such as 'services' require more values to be passed
to the data provider than just the name or ID. In these cases, we
will amend an optional component to filter value to pass to the
data provider backend.
Diffstat (limited to 'src/responder/common/responder_dp.c')
-rw-r--r-- | src/responder/common/responder_dp.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c index f51e2496a..6bc086c2a 100644 --- a/src/responder/common/responder_dp.c +++ b/src/responder/common/responder_dp.c @@ -247,7 +247,8 @@ sss_dp_get_account_send(TALLOC_CTX *mem_ctx, bool fast_reply, int type, const char *opt_name, - uint32_t opt_id) + uint32_t opt_id, + const char *extra) { errno_t ret; int hret; @@ -312,13 +313,29 @@ sss_dp_get_account_send(TALLOC_CTX *mem_ctx, state->key->type = HASH_KEY_STRING; if (opt_name) { - filter = talloc_asprintf(state, "name=%s", opt_name); - state->key->str = talloc_asprintf(state->key, "%d:%s@%s", - type, opt_name, dom->name); + if (extra) { + filter = talloc_asprintf(state, "name=%s:%s", + opt_name, extra); + state->key->str = talloc_asprintf(state->key, "%d:%s:%s@%s", + type, opt_name, + extra, dom->name); + } else { + filter = talloc_asprintf(state, "name=%s", opt_name); + state->key->str = talloc_asprintf(state->key, "%d:%s@%s", + type, opt_name, dom->name); + } } else if (opt_id) { - filter = talloc_asprintf(state, "idnumber=%u", opt_id); - state->key->str = talloc_asprintf(state->key, "%d:%d@%s", - type, opt_id, dom->name); + if (extra) { + filter = talloc_asprintf(state, "idnumber=%u:%s", + opt_id, extra); + state->key->str = talloc_asprintf(state->key, "%d:%d:%s@%s", + type, opt_id, + extra, dom->name); + } else { + filter = talloc_asprintf(state, "idnumber=%u", opt_id); + state->key->str = talloc_asprintf(state->key, "%d:%d@%s", + type, opt_id, dom->name); + } } else { filter = talloc_strdup(state, ENUM_INDICATOR); state->key->str = talloc_asprintf(state->key, "%d:*@%s", |