91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina/*
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Authors:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Pavel Březina <pbrezina@redhat.com>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Copyright (C) 2014 Red Hat
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is free software; you can redistribute it and/or modify
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina it under the terms of the GNU General Public License as published by
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina the Free Software Foundation; either version 3 of the License, or
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina (at your option) any later version.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is distributed in the hope that it will be useful,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GNU General Public License for more details.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina You should have received a copy of the GNU General Public License
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina*/
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <string.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp_private.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina#define GET_ATTR(attrs, name, rtype, field, out, ret) do { \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_attr *attr = sss_sifp_find_attr(attrs, name); \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr == NULL) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_ATTR_MISSING; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr->type != rtype) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_INCORRECT_TYPE; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr->data.field == NULL) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_ATTR_NULL; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina out = attr->data.field[0]; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_OK; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina} while (0)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina#define GET_ATTR_ARRAY(attrs, name, rtype, field, out_num, out_val, ret) \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březinado { \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_attr *attr = sss_sifp_find_attr(attrs, name); \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr == NULL) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_ATTR_MISSING; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr->type != rtype) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_INCORRECT_TYPE; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attr->data.field == NULL) { \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina out_num = 0; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina out_val = NULL; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_ATTR_NULL; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina break; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina out_num = attr->num_values; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina out_val = attr->data.field; \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina \
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina ret = SSS_SIFP_OK; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina} while (0)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinastatic sss_sifp_attr *sss_sifp_find_attr(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int i;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (attrs == NULL || name == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina for (i = 0; attrs[i] != NULL; i++) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (strcmp(attrs[i]->name, name) == 0) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return attrs[i];
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_bool(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina bool *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_BOOL, boolean, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int16(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int16_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_INT16, int16, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint16(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint16_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_UINT16, uint16, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int32(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int32_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_INT32, int32, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint32(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint32_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_UINT32, uint32, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int64(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int64_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_INT64, int64, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint64(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint64_t *_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_UINT64, uint64, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_string(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *value = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina GET_ATTR(attrs, name, SSS_SIFP_ATTR_TYPE_STRING, str, value, ret);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina if (ret == SSS_SIFP_ATTR_NULL) {
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_value = NULL;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina *_value = value;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březinasss_sifp_error
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březinasss_sifp_find_attr_as_string_dict(sss_sifp_attr **attrs,
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina const char *name,
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina hash_table_t **_value)
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina{
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina sss_sifp_attr *attr = sss_sifp_find_attr(attrs, name);
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina if (attr == NULL) {
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina return SSS_SIFP_ATTR_MISSING;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina }
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina if (attr->type != SSS_SIFP_ATTR_TYPE_STRING_DICT) {
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina return SSS_SIFP_INCORRECT_TYPE;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina }
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina if (attr->data.str_dict == NULL) {
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_value = NULL;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina return SSS_SIFP_ATTR_NULL;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina }
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina *_value = attr->data.str_dict;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina return SSS_SIFP_OK;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina}
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina/**
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina * @brief Find attribute in list and return its values.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina *
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina * @param[in] attrs Attributes
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina * @param[in] name Name of the attribute to find
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina *
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina * @return Attribute values or NULL if it is not found.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina */
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_bool_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina bool **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_BOOL, boolean,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int16_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int16_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_INT16, int16,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint16_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint16_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_UINT16, uint16,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int32_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int32_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_INT32, int32,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint32_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint32_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_UINT32, uint32,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_int64_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int64_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_INT64, int64,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_uint64_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint64_t **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_UINT64, uint64,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, *_value, ret);
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_find_attr_as_string_array(sss_sifp_attr **attrs,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int *_num_values,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char * const **_value)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char **value;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GET_ATTR_ARRAY(attrs, name, SSS_SIFP_ATTR_TYPE_STRING, str,
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_num_values, value, ret);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina if (ret == SSS_SIFP_OK || ret == SSS_SIFP_ATTR_NULL) {
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina *_value = (const char * const *)value;
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina }
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina
973be642f3d33ba21ea9c06791295f09efcdba46Pavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}