0db2f3402b37df221fbf55486769989f82df479aPavel Březina/*
0db2f3402b37df221fbf55486769989f82df479aPavel Březina Authors:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina Pavel Březina <pbrezina@redhat.com>
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina Copyright (C) 2016 Red Hat
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina This program is free software; you can redistribute it and/or modify
0db2f3402b37df221fbf55486769989f82df479aPavel Březina it under the terms of the GNU General Public License as published by
0db2f3402b37df221fbf55486769989f82df479aPavel Březina the Free Software Foundation; either version 3 of the License, or
0db2f3402b37df221fbf55486769989f82df479aPavel Březina (at your option) any later version.
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina This program is distributed in the hope that it will be useful,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
0db2f3402b37df221fbf55486769989f82df479aPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0db2f3402b37df221fbf55486769989f82df479aPavel Březina GNU General Public License for more details.
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina You should have received a copy of the GNU General Public License
0db2f3402b37df221fbf55486769989f82df479aPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
0db2f3402b37df221fbf55486769989f82df479aPavel Březina*/
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina#include <talloc.h>
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina#include "responder/common/cache_req/cache_req_private.h"
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březinastatic const char **
1b33f4d5c564141b888071a342403230a71983cbPavel Březinacache_req_data_create_attrs(TALLOC_CTX *mem_ctx,
1b33f4d5c564141b888071a342403230a71983cbPavel Březina const char **requested)
1b33f4d5c564141b888071a342403230a71983cbPavel Březina{
2e72ababbbadda4c4036f99528460c1d595e0941Lukas Slebodnik static const char *defattrs[] = { SYSDB_DEFAULT_ATTRS, SYSDB_NAME,
2e72ababbbadda4c4036f99528460c1d595e0941Lukas Slebodnik OVERRIDE_PREFIX SYSDB_NAME,
2e72ababbbadda4c4036f99528460c1d595e0941Lukas Slebodnik SYSDB_DEFAULT_OVERRIDE_NAME };
1b33f4d5c564141b888071a342403230a71983cbPavel Březina static size_t defnum = sizeof(defattrs) / sizeof(defattrs[0]);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina const char **attrs;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina size_t reqnum;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina size_t total;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina size_t i;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina for (reqnum = 0; requested[reqnum] != NULL; reqnum++);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina total = defnum + reqnum;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina /* We always want to get default attributes. */
1b33f4d5c564141b888071a342403230a71983cbPavel Březina attrs = talloc_zero_array(mem_ctx, const char *, total + 1);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina if (attrs == NULL) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina return NULL;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina }
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina i = 0;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina for (i = 0; i < reqnum; i++) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina attrs[i] = talloc_strdup(attrs, requested[i]);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina if (attrs[i] == NULL) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina talloc_free(attrs);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina return NULL;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina }
1b33f4d5c564141b888071a342403230a71983cbPavel Březina }
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina for (; i < total; i++) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina attrs[i] = talloc_strdup(attrs, defattrs[i - reqnum]);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina if (attrs[i] == NULL) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina talloc_free(attrs);
1b33f4d5c564141b888071a342403230a71983cbPavel Březina return NULL;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina }
1b33f4d5c564141b888071a342403230a71983cbPavel Březina }
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
1b33f4d5c564141b888071a342403230a71983cbPavel Březina return attrs;
1b33f4d5c564141b888071a342403230a71983cbPavel Březina}
1b33f4d5c564141b888071a342403230a71983cbPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinastatic struct cache_req_data *
0db2f3402b37df221fbf55486769989f82df479aPavel Březinacache_req_data_create(TALLOC_CTX *mem_ctx,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina enum cache_req_type type,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data *input)
0db2f3402b37df221fbf55486769989f82df479aPavel Březina{
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data *data;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina errno_t ret;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data = talloc_zero(mem_ctx, struct cache_req_data);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (data == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero() failed\n");
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return NULL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data->type = type;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina data->svc.name = &data->name;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina switch (type) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_USER_BY_NAME:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_USER_BY_UPN:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_GROUP_BY_NAME:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_USER_BY_FILTER:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_GROUP_BY_FILTER:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_INITGROUPS:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_INITGROUPS_BY_UPN:
6b159f14f69134bba8510a6b50ab62493a23a73fPavel Březina case CACHE_REQ_NETGROUP_BY_NAME:
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina case CACHE_REQ_OBJECT_BY_NAME:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (input->name.input == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ERR_INTERNAL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data->name.input = talloc_strdup(data, input->name.input);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (data->name.input == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ENOMEM;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina break;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_USER_BY_CERT:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (input->cert == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: certificate cannot be NULL!\n");
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ERR_INTERNAL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data->cert = talloc_strdup(data, input->cert);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (data->cert == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ENOMEM;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina break;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_USER_BY_ID:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_GROUP_BY_ID:
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina case CACHE_REQ_OBJECT_BY_ID:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data->id = input->id;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina break;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_OBJECT_BY_SID:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (input->sid == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: SID cannot be NULL!\n");
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ERR_INTERNAL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina data->sid = talloc_strdup(data, input->sid);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (data->sid == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ENOMEM;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina break;
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina case CACHE_REQ_ENUM_USERS:
12d771585a84a7523a5b7d9cf502d4bcddecb9b9Pavel Březina case CACHE_REQ_ENUM_GROUPS:
0ae7e46a3990c47873fca879a9395e3ce00d9150Pavel Březina case CACHE_REQ_ENUM_SVC:
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina break;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina case CACHE_REQ_SVC_BY_NAME:
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina if (input->svc.name->input == NULL) {
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina ret = ERR_INTERNAL;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina goto done;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina }
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina data->svc.name->input = talloc_strdup(data, input->svc.name->input);
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina if (data->svc.name->input == NULL) {
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina ret = ENOMEM;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina goto done;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina }
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina if (input->svc.protocol.name == NULL) {
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina break;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina }
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina data->svc.protocol.name = talloc_strdup(data, input->svc.protocol.name);
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina if (data->svc.protocol.name == NULL) {
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina ret = ENOMEM;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina goto done;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina }
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina break;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina case CACHE_REQ_SVC_BY_PORT:
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina if (input->svc.port == 0) {
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: port cannot be 0!\n");
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina ret = ERR_INTERNAL;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina goto done;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina }
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina data->svc.port = input->svc.port;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina if (input->svc.protocol.name == NULL) {
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina break;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina }
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina data->svc.protocol.name = talloc_strdup(data, input->svc.protocol.name);
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina if (data->svc.protocol.name == NULL) {
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina ret = ENOMEM;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina goto done;
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina }
c2fc9459c31cb1192ab3c15ce4df1c150e99bf95Pavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina break;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina case CACHE_REQ_HOST_BY_NAME:
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina if (input->name.input == NULL) {
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina ret = ERR_INTERNAL;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina goto done;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina }
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina data->name.input = talloc_strdup(data, input->name.input);
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina if (data->name.input == NULL) {
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina ret = ENOMEM;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina goto done;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina }
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina if (input->alias == NULL) {
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina break;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina }
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina data->alias = talloc_strdup(data, input->alias);
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina if (data->alias == NULL) {
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina ret = ENOMEM;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina goto done;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina }
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina break;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina case CACHE_REQ_SENTINEL:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Invalid cache request type!\n");
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ERR_INTERNAL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (input->attrs != NULL) {
1b33f4d5c564141b888071a342403230a71983cbPavel Březina data->attrs = cache_req_data_create_attrs(data, input->attrs);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (data->attrs == NULL) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = ENOMEM;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina goto done;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina ret = EOK;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinadone:
0db2f3402b37df221fbf55486769989f82df479aPavel Březina if (ret != EOK) {
0db2f3402b37df221fbf55486769989f82df479aPavel Březina talloc_zfree(data);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create cache_req data "
0db2f3402b37df221fbf55486769989f82df479aPavel Březina "[%d]: %s\n", ret, sss_strerror(ret));
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return NULL;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina }
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return data;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina}
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinastruct cache_req_data *
0db2f3402b37df221fbf55486769989f82df479aPavel Březinacache_req_data_name(TALLOC_CTX *mem_ctx,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina enum cache_req_type type,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina const char *name)
0db2f3402b37df221fbf55486769989f82df479aPavel Březina{
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data input = {0};
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina input.name.input = name;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return cache_req_data_create(mem_ctx, type, &input);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina}
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březinastruct cache_req_data *
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březinacache_req_data_name_attrs(TALLOC_CTX *mem_ctx,
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina enum cache_req_type type,
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina const char *name,
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina const char **attrs)
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina{
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina struct cache_req_data input = { 0 };
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina input.name.input = name;
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina input.attrs = attrs;
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina return cache_req_data_create(mem_ctx, type, &input);
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina}
488518dde58724daa13b9216a0f1af6e0ba5401fPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinastruct cache_req_data *
0db2f3402b37df221fbf55486769989f82df479aPavel Březinacache_req_data_id(TALLOC_CTX *mem_ctx,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina enum cache_req_type type,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina uint32_t id)
0db2f3402b37df221fbf55486769989f82df479aPavel Březina{
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data input = {0};
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina input.id = id;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return cache_req_data_create(mem_ctx, type, &input);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina}
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březinastruct cache_req_data *
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březinacache_req_data_id_attrs(TALLOC_CTX *mem_ctx,
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina enum cache_req_type type,
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina uint32_t id,
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina const char **attrs)
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina{
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina struct cache_req_data input = { 0 };
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina input.id = id;
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina input.attrs = attrs;
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina return cache_req_data_create(mem_ctx, type, &input);
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina}
3be2628d8aba6aeb99ac1484da990f1fad8169ecPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinastruct cache_req_data *
0db2f3402b37df221fbf55486769989f82df479aPavel Březinacache_req_data_cert(TALLOC_CTX *mem_ctx,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina enum cache_req_type type,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina const char *cert)
0db2f3402b37df221fbf55486769989f82df479aPavel Březina{
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data input = {0};
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina input.cert = cert;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return cache_req_data_create(mem_ctx, type, &input);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina}
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březinastruct cache_req_data *
0db2f3402b37df221fbf55486769989f82df479aPavel Březinacache_req_data_sid(TALLOC_CTX *mem_ctx,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina enum cache_req_type type,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina const char *sid,
0db2f3402b37df221fbf55486769989f82df479aPavel Březina const char **attrs)
0db2f3402b37df221fbf55486769989f82df479aPavel Březina{
0db2f3402b37df221fbf55486769989f82df479aPavel Březina struct cache_req_data input = {0};
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina input.sid = sid;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina input.attrs = attrs;
0db2f3402b37df221fbf55486769989f82df479aPavel Březina
0db2f3402b37df221fbf55486769989f82df479aPavel Březina return cache_req_data_create(mem_ctx, type, &input);
0db2f3402b37df221fbf55486769989f82df479aPavel Březina}
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina
a79acee185654d110c0e35ba351368d664e4e53dPavel Březinastruct cache_req_data *
a79acee185654d110c0e35ba351368d664e4e53dPavel Březinacache_req_data_enum(TALLOC_CTX *mem_ctx,
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina enum cache_req_type type)
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina{
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina struct cache_req_data input = { 0 };
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina return cache_req_data_create(mem_ctx, type, &input);
a79acee185654d110c0e35ba351368d664e4e53dPavel Březina}
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březinastruct cache_req_data *
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březinacache_req_data_svc(TALLOC_CTX *mem_ctx,
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina enum cache_req_type type,
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina const char *name,
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina const char *protocol,
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina uint16_t port)
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina{
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina struct cache_req_data input = { 0 };
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina input.name.input = name;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina input.svc.name = &input.name;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina input.svc.protocol.name = protocol;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina input.svc.port = port;
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina return cache_req_data_create(mem_ctx, type, &input);
2e13817e64ff1e0e47dc844be501f2d3ab299f34Pavel Březina}
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březinastruct cache_req_data *
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březinacache_req_data_host(TALLOC_CTX *mem_ctx,
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina enum cache_req_type type,
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina const char *name,
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina const char *alias,
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina const char **attrs)
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina{
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina struct cache_req_data input = {0};
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina input.name.input = name;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina input.alias = alias;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina input.attrs = attrs;
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina return cache_req_data_create(mem_ctx, type, &input);
53c31b83e4d06ea4c2813eec2f1e647a613b4a2bPavel Březina}
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidênciovoid
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidênciocache_req_data_set_bypass_cache(struct cache_req_data *data,
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio bool bypass_cache)
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio{
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio if (data == NULL) {
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio DEBUG(SSSDBG_CRIT_FAILURE, "cache_req_data should never be NULL\n");
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio return;
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio }
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio data->bypass_cache = bypass_cache;
189db5329db0277425bb3bdd785c19aee23bb364Fabiano Fidêncio}
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bosevoid
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bosecache_req_data_set_bypass_dp(struct cache_req_data *data,
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose bool bypass_dp)
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose{
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose if (data == NULL) {
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose DEBUG(SSSDBG_CRIT_FAILURE, "cache_req_data should never be NULL\n");
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose return;
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose }
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose data->bypass_dp = bypass_dp;
52e675ec4b160720515c81ae8c0e5a95feb50c57Sumit Bose}