00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SSS_IDMAP_H_
00026 #define SSS_IDMAP_H_
00027
00028 #include <stdlib.h>
00029 #include <stdint.h>
00030 #include <stdbool.h>
00031
00032 #define DOM_SID_PREFIX "S-1-5-21-"
00033 #define DOM_SID_PREFIX_LEN (sizeof(DOM_SID_PREFIX) - 1)
00034
00045 enum idmap_error_code {
00047 IDMAP_SUCCESS = 0,
00048
00050 IDMAP_NOT_IMPLEMENTED,
00051
00053 IDMAP_ERROR,
00054
00056 IDMAP_OUT_OF_MEMORY,
00057
00059 IDMAP_NO_DOMAIN,
00060
00062 IDMAP_CONTEXT_INVALID,
00063
00065 IDMAP_SID_INVALID,
00066
00068 IDMAP_SID_UNKNOWN,
00069
00071 IDMAP_NO_RANGE,
00072
00074 IDMAP_BUILTIN_SID
00075 };
00076
00080 typedef void *(idmap_alloc_func)(size_t size, void *pvt);
00081 typedef void (idmap_free_func)(void *ptr, void *pvt);
00082
00088 struct sss_idmap_range {
00089 uint32_t min;
00090 uint32_t max;
00091 };
00092
00096 struct sss_dom_sid;
00097
00101 struct sss_idmap_ctx;
00102
00108 struct dom_sid;
00109
00123 enum idmap_error_code sss_idmap_init(idmap_alloc_func *alloc_func,
00124 void *alloc_pvt,
00125 idmap_free_func *free_func,
00126 struct sss_idmap_ctx **ctx);
00127
00144 enum idmap_error_code sss_idmap_add_domain(struct sss_idmap_ctx *ctx,
00145 const char *domain_name,
00146 const char *domain_sid,
00147 struct sss_idmap_range *range);
00148
00162 enum idmap_error_code sss_idmap_sid_to_unix(struct sss_idmap_ctx *ctx,
00163 const char *sid,
00164 uint32_t *id);
00165
00179 enum idmap_error_code sss_idmap_dom_sid_to_unix(struct sss_idmap_ctx *ctx,
00180 struct sss_dom_sid *dom_sid,
00181 uint32_t *id);
00182
00197 enum idmap_error_code sss_idmap_bin_sid_to_unix(struct sss_idmap_ctx *ctx,
00198 uint8_t *bin_sid,
00199 size_t length,
00200 uint32_t *id);
00201
00215 enum idmap_error_code sss_idmap_unix_to_sid(struct sss_idmap_ctx *ctx,
00216 uint32_t id,
00217 char **sid);
00218
00231 enum idmap_error_code sss_idmap_unix_to_dom_sid(struct sss_idmap_ctx *ctx,
00232 uint32_t id,
00233 struct sss_dom_sid **dom_sid);
00234
00249 enum idmap_error_code sss_idmap_unix_to_bin_sid(struct sss_idmap_ctx *ctx,
00250 uint32_t id,
00251 uint8_t **bin_sid,
00252 size_t *length);
00253
00262 enum idmap_error_code sss_idmap_free(struct sss_idmap_ctx *ctx);
00263
00272 const char *idmap_error_string(enum idmap_error_code err);
00273
00283 bool is_domain_sid(const char *str);
00284
00298 enum idmap_error_code sss_idmap_bin_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00299 const uint8_t *bin_sid,
00300 size_t length,
00301 struct sss_dom_sid **dom_sid);
00302
00316 enum idmap_error_code sss_idmap_bin_sid_to_sid(struct sss_idmap_ctx *ctx,
00317 const uint8_t *bin_sid,
00318 size_t length,
00319 char **sid);
00320
00334 enum idmap_error_code sss_idmap_dom_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00335 struct sss_dom_sid *dom_sid,
00336 uint8_t **bin_sid,
00337 size_t *length);
00338
00352 enum idmap_error_code sss_idmap_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00353 const char *sid,
00354 uint8_t **bin_sid,
00355 size_t *length);
00356
00369 enum idmap_error_code sss_idmap_dom_sid_to_sid(struct sss_idmap_ctx *ctx,
00370 struct sss_dom_sid *dom_sid,
00371 char **sid);
00372
00385 enum idmap_error_code sss_idmap_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00386 const char *sid,
00387 struct sss_dom_sid **dom_sid);
00388
00401 enum idmap_error_code sss_idmap_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00402 const char *sid,
00403 struct dom_sid **smb_sid);
00404
00417 enum idmap_error_code sss_idmap_smb_sid_to_sid(struct sss_idmap_ctx *ctx,
00418 struct dom_sid *smb_sid,
00419 char **sid);
00420
00433 enum idmap_error_code sss_idmap_dom_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00434 struct sss_dom_sid *dom_sid,
00435 struct dom_sid **smb_sid);
00436
00449 enum idmap_error_code sss_idmap_smb_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00450 struct dom_sid *smb_sid,
00451 struct sss_dom_sid **dom_sid);
00452
00466 enum idmap_error_code sss_idmap_bin_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00467 const uint8_t *bin_sid,
00468 size_t length,
00469 struct dom_sid **smb_sid);
00470
00484 enum idmap_error_code sss_idmap_smb_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00485 struct dom_sid *smb_sid,
00486 uint8_t **bin_sid,
00487 size_t *length);
00491 #endif