00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SSS_SIFP_H_
00022 #define SSS_SIFP_H_
00023
00024 #include <stdint.h>
00025 #include <stdbool.h>
00026 #include <unistd.h>
00027 #include <dhash.h>
00028
00045 #define SSS_SIFP_IFP "org.freedesktop.sssd.infopipe"
00046
00048 #define SSS_SIFP_IFACE_IFP SSS_SIFP_IFP
00049 #define SSS_SIFP_IFACE_COMPONENTS "org.freedesktop.sssd.infopipe.Components"
00050 #define SSS_SIFP_IFACE_SERVICES "org.freedesktop.sssd.infopipe.Services"
00051 #define SSS_SIFP_IFACE_DOMAINS "org.freedesktop.sssd.infopipe.Domains"
00052 #define SSS_SIFP_IFACE_USERS "org.freedesktop.sssd.infopipe.Users"
00053 #define SSS_SIFP_IFACE_GROUPS "org.freedesktop.sssd.infopipe.Groups"
00054
00062 typedef struct sss_sifp_ctx sss_sifp_ctx;
00063
00067 typedef void (sss_sifp_free_func)(void *ptr, void *pvt);
00068 typedef void *(sss_sifp_alloc_func)(size_t size, void *pvt);
00069
00073 typedef enum sss_sifp_error {
00075 SSS_SIFP_OK = 0,
00076
00078 SSS_SIFP_OUT_OF_MEMORY,
00079
00081 SSS_SIFP_INVALID_ARGUMENT,
00082
00088 SSS_SIFP_IO_ERROR,
00089
00091 SSS_SIFP_INTERNAL_ERROR,
00092
00094 SSS_SIFP_NOT_SUPPORTED,
00095
00097 SSS_SIFP_ATTR_MISSING,
00098
00100 SSS_SIFP_ATTR_NULL,
00101
00103 SSS_SIFP_INCORRECT_TYPE,
00104
00106 SSS_SIFP_ERROR_SENTINEL
00107 } sss_sifp_error;
00108
00112 typedef struct sss_sifp_attr sss_sifp_attr;
00113
00117 typedef struct sss_sifp_object {
00118 char *name;
00119 char *object_path;
00120 char *interface;
00121 sss_sifp_attr **attrs;
00122 } sss_sifp_object;
00123
00129 sss_sifp_error
00130 sss_sifp_init(sss_sifp_ctx **_ctx);
00131
00142 sss_sifp_error
00143 sss_sifp_init_ex(void *alloc_pvt,
00144 sss_sifp_alloc_func *alloc_func,
00145 sss_sifp_free_func *free_func,
00146 sss_sifp_ctx **_ctx);
00147
00154 const char *
00155 sss_sifp_get_last_io_error_name(sss_sifp_ctx *ctx);
00156
00163 const char *
00164 sss_sifp_get_last_io_error_message(sss_sifp_ctx *ctx);
00165
00175 sss_sifp_error
00176 sss_sifp_fetch_attr(sss_sifp_ctx *ctx,
00177 const char *object_path,
00178 const char *interface,
00179 const char *name,
00180 sss_sifp_attr ***_attrs);
00181
00190 sss_sifp_error
00191 sss_sifp_fetch_all_attrs(sss_sifp_ctx *ctx,
00192 const char *object_path,
00193 const char *interface,
00194 sss_sifp_attr ***_attrs);
00195
00204 sss_sifp_error
00205 sss_sifp_fetch_object(sss_sifp_ctx *ctx,
00206 const char *object_path,
00207 const char *interface,
00208 sss_sifp_object **_object);
00209
00217 sss_sifp_error
00218 sss_sifp_find_attr_as_bool(sss_sifp_attr **attrs,
00219 const char *name,
00220 bool *_value);
00221
00229 sss_sifp_error
00230 sss_sifp_find_attr_as_int16(sss_sifp_attr **attrs,
00231 const char *name,
00232 int16_t *_value);
00233
00241 sss_sifp_error
00242 sss_sifp_find_attr_as_uint16(sss_sifp_attr **attrs,
00243 const char *name,
00244 uint16_t *_value);
00245
00253 sss_sifp_error
00254 sss_sifp_find_attr_as_int32(sss_sifp_attr **attrs,
00255 const char *name,
00256 int32_t *_value);
00257
00265 sss_sifp_error
00266 sss_sifp_find_attr_as_uint32(sss_sifp_attr **attrs,
00267 const char *name,
00268 uint32_t *_value);
00269
00277 sss_sifp_error
00278 sss_sifp_find_attr_as_int64(sss_sifp_attr **attrs,
00279 const char *name,
00280 int64_t *_value);
00281
00289 sss_sifp_error
00290 sss_sifp_find_attr_as_uint64(sss_sifp_attr **attrs,
00291 const char *name,
00292 uint64_t *_value);
00293
00301 sss_sifp_error
00302 sss_sifp_find_attr_as_string(sss_sifp_attr **attrs,
00303 const char *name,
00304 const char **_value);
00305
00316 sss_sifp_error
00317 sss_sifp_find_attr_as_string_dict(sss_sifp_attr **attrs,
00318 const char *name,
00319 hash_table_t **_value);
00320
00329 sss_sifp_error
00330 sss_sifp_find_attr_as_bool_array(sss_sifp_attr **attrs,
00331 const char *name,
00332 unsigned int *_num_values,
00333 bool **_value);
00334
00343 sss_sifp_error
00344 sss_sifp_find_attr_as_int16_array(sss_sifp_attr **attrs,
00345 const char *name,
00346 unsigned int *_num_values,
00347 int16_t **_value);
00348
00357 sss_sifp_error
00358 sss_sifp_find_attr_as_uint16_array(sss_sifp_attr **attrs,
00359 const char *name,
00360 unsigned int *_num_values,
00361 uint16_t **_value);
00362
00371 sss_sifp_error
00372 sss_sifp_find_attr_as_int32_array(sss_sifp_attr **attrs,
00373 const char *name,
00374 unsigned int *_num_values,
00375 int32_t **_value);
00376
00385 sss_sifp_error
00386 sss_sifp_find_attr_as_uint32_array(sss_sifp_attr **attrs,
00387 const char *name,
00388 unsigned int *_num_values,
00389 uint32_t **_value);
00390
00399 sss_sifp_error
00400 sss_sifp_find_attr_as_int64_array(sss_sifp_attr **attrs,
00401 const char *name,
00402 unsigned int *_num_values,
00403 int64_t **_value);
00404
00413 sss_sifp_error
00414 sss_sifp_find_attr_as_uint64_array(sss_sifp_attr **attrs,
00415 const char *name,
00416 unsigned int *_num_values,
00417 uint64_t **_value);
00418
00427 sss_sifp_error
00428 sss_sifp_find_attr_as_string_array(sss_sifp_attr **attrs,
00429 const char *name,
00430 unsigned int *_num_values,
00431 const char * const **_value);
00432
00438 void
00439 sss_sifp_free(sss_sifp_ctx **_ctx);
00440
00447 void
00448 sss_sifp_free_attrs(sss_sifp_ctx *ctx,
00449 sss_sifp_attr ***_attrs);
00450
00457 void
00458 sss_sifp_free_object(sss_sifp_ctx *ctx,
00459 sss_sifp_object **_object);
00460
00467 void
00468 sss_sifp_free_string(sss_sifp_ctx *ctx,
00469 char **_str);
00470
00477 void
00478 sss_sifp_free_string_array(sss_sifp_ctx *ctx,
00479 char ***_str_array);
00480
00496 sss_sifp_error
00497 sss_sifp_list_domains(sss_sifp_ctx *ctx,
00498 char ***_domains);
00499
00507 sss_sifp_error
00508 sss_sifp_fetch_domain_by_name(sss_sifp_ctx *ctx,
00509 const char *name,
00510 sss_sifp_object **_domain);
00511
00519 sss_sifp_error
00520 sss_sifp_fetch_user_by_uid(sss_sifp_ctx *ctx,
00521 uid_t uid,
00522 sss_sifp_object **_user);
00523
00531 sss_sifp_error
00532 sss_sifp_fetch_user_by_name(sss_sifp_ctx *ctx,
00533 const char *name,
00534 sss_sifp_object **_user);
00535
00540 #endif