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_smb_sid_to_unix(struct sss_idmap_ctx *ctx,
00216 struct dom_sid *smb_sid,
00217 uint32_t *id);
00218
00232 enum idmap_error_code sss_idmap_unix_to_sid(struct sss_idmap_ctx *ctx,
00233 uint32_t id,
00234 char **sid);
00235
00248 enum idmap_error_code sss_idmap_unix_to_dom_sid(struct sss_idmap_ctx *ctx,
00249 uint32_t id,
00250 struct sss_dom_sid **dom_sid);
00251
00266 enum idmap_error_code sss_idmap_unix_to_bin_sid(struct sss_idmap_ctx *ctx,
00267 uint32_t id,
00268 uint8_t **bin_sid,
00269 size_t *length);
00270
00279 enum idmap_error_code sss_idmap_free(struct sss_idmap_ctx *ctx);
00280
00289 const char *idmap_error_string(enum idmap_error_code err);
00290
00300 bool is_domain_sid(const char *str);
00301
00315 enum idmap_error_code sss_idmap_bin_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00316 const uint8_t *bin_sid,
00317 size_t length,
00318 struct sss_dom_sid **dom_sid);
00319
00333 enum idmap_error_code sss_idmap_bin_sid_to_sid(struct sss_idmap_ctx *ctx,
00334 const uint8_t *bin_sid,
00335 size_t length,
00336 char **sid);
00337
00351 enum idmap_error_code sss_idmap_dom_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00352 struct sss_dom_sid *dom_sid,
00353 uint8_t **bin_sid,
00354 size_t *length);
00355
00369 enum idmap_error_code sss_idmap_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00370 const char *sid,
00371 uint8_t **bin_sid,
00372 size_t *length);
00373
00386 enum idmap_error_code sss_idmap_dom_sid_to_sid(struct sss_idmap_ctx *ctx,
00387 struct sss_dom_sid *dom_sid,
00388 char **sid);
00389
00402 enum idmap_error_code sss_idmap_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00403 const char *sid,
00404 struct sss_dom_sid **dom_sid);
00405
00418 enum idmap_error_code sss_idmap_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00419 const char *sid,
00420 struct dom_sid **smb_sid);
00421
00434 enum idmap_error_code sss_idmap_smb_sid_to_sid(struct sss_idmap_ctx *ctx,
00435 struct dom_sid *smb_sid,
00436 char **sid);
00437
00450 enum idmap_error_code sss_idmap_dom_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00451 struct sss_dom_sid *dom_sid,
00452 struct dom_sid **smb_sid);
00453
00466 enum idmap_error_code sss_idmap_smb_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
00467 struct dom_sid *smb_sid,
00468 struct sss_dom_sid **dom_sid);
00469
00483 enum idmap_error_code sss_idmap_bin_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
00484 const uint8_t *bin_sid,
00485 size_t length,
00486 struct dom_sid **smb_sid);
00487
00501 enum idmap_error_code sss_idmap_smb_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
00502 struct dom_sid *smb_sid,
00503 uint8_t **bin_sid,
00504 size_t *length);
00508 #endif