sss_idmap  1.14.0
sss_idmap.h
1 /*
2  SSSD
3 
4  ID-mapping library
5 
6  Authors:
7  Sumit Bose <sbose@redhat.com>
8 
9  Copyright (C) 2012 Red Hat
10 
11  This program is free software; you can redistribute it and/or modify
12  it under the terms of the GNU General Public License as published by
13  the Free Software Foundation; either version 3 of the License, or
14  (at your option) any later version.
15 
16  This program is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  GNU General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with this program. If not, see <http://www.gnu.org/licenses/>.
23 */
24 
25 #ifndef SSS_IDMAP_H_
26 #define SSS_IDMAP_H_
27 
28 #include <stdlib.h>
29 #include <stdint.h>
30 #include <stdbool.h>
31 #include <sys/types.h>
32 
33 #define DOM_SID_PREFIX "S-1-5-21-"
34 #define DOM_SID_PREFIX_LEN (sizeof(DOM_SID_PREFIX) - 1)
35 
49 
52 
55 
58 
61 
64 
67 
70 
73 
76 
79 
82 
85 
88 };
89 
93 typedef void *(idmap_alloc_func)(size_t size, void *pvt);
94 typedef void (idmap_free_func)(void *ptr, void *pvt);
95 
99 typedef enum idmap_error_code (*idmap_store_cb)(const char *dom_name,
100  const char *dom_sid,
101  const char *range_id,
102  uint32_t min_id,
103  uint32_t max_id,
104  uint32_t first_rid,
105  void *pvt);
106 
113  uint32_t min;
114  uint32_t max;
115 };
116 
120 struct sss_dom_sid;
121 
125 struct sss_idmap_ctx;
126 
132 struct dom_sid;
133 
148  void *alloc_pvt,
149  idmap_free_func *free_func,
150  struct sss_idmap_ctx **ctx);
151 
158 enum idmap_error_code
159 sss_idmap_ctx_set_autorid(struct sss_idmap_ctx *ctx, bool use_autorid);
160 
167 enum idmap_error_code
168 sss_idmap_ctx_set_lower(struct sss_idmap_ctx *ctx, id_t lower);
169 
176 enum idmap_error_code
177 sss_idmap_ctx_set_upper(struct sss_idmap_ctx *ctx, id_t upper);
178 
185 enum idmap_error_code
186 sss_idmap_ctx_set_rangesize(struct sss_idmap_ctx *ctx, id_t rangesize);
187 
195 enum idmap_error_code
196 sss_idmap_ctx_set_extra_slice_init(struct sss_idmap_ctx *ctx,
197  int extra_slice_init);
198 
205 enum idmap_error_code
206 sss_idmap_ctx_get_autorid(struct sss_idmap_ctx *ctx, bool *_autorid);
207 
214 enum idmap_error_code
215 sss_idmap_ctx_get_lower(struct sss_idmap_ctx *ctx, id_t *_lower);
216 
223 enum idmap_error_code
224 sss_idmap_ctx_get_upper(struct sss_idmap_ctx *ctx, id_t *_upper);
225 
232 enum idmap_error_code
233 sss_idmap_ctx_get_rangesize(struct sss_idmap_ctx *ctx, id_t *rangesize);
234 
252 enum idmap_error_code sss_idmap_calculate_range(struct sss_idmap_ctx *ctx,
253  const char *dom_sid,
254  id_t *slice_num,
255  struct sss_idmap_range *range);
256 
274 enum idmap_error_code sss_idmap_add_domain(struct sss_idmap_ctx *ctx,
275  const char *domain_name,
276  const char *domain_sid,
277  struct sss_idmap_range *range);
278 
307 enum idmap_error_code sss_idmap_add_domain_ex(struct sss_idmap_ctx *ctx,
308  const char *domain_name,
309  const char *domain_sid,
310  struct sss_idmap_range *range,
311  const char *range_id,
312  uint32_t rid,
313  bool external_mapping);
314 
347 enum idmap_error_code
348 sss_idmap_add_auto_domain_ex(struct sss_idmap_ctx *ctx,
349  const char *domain_name,
350  const char *domain_sid,
351  struct sss_idmap_range *range,
352  const char *range_id,
353  uint32_t rid,
354  bool external_mapping,
355  idmap_store_cb cb,
356  void *pvt);
357 
376 enum idmap_error_code sss_idmap_check_collision(struct sss_idmap_ctx *ctx,
377  char *n_name, char *n_sid,
378  struct sss_idmap_range *n_range,
379  uint32_t n_first_rid,
380  char *n_range_id,
381  bool n_external_mapping);
382 
410 enum idmap_error_code sss_idmap_check_collision_ex(const char *o_name,
411  const char *o_sid,
412  struct sss_idmap_range *o_range,
413  uint32_t o_first_rid,
414  const char *o_range_id,
415  bool o_external_mapping,
416  const char *n_name,
417  const char *n_sid,
418  struct sss_idmap_range *n_range,
419  uint32_t n_first_rid,
420  const char *n_range_id,
421  bool n_external_mapping);
436 enum idmap_error_code sss_idmap_sid_to_unix(struct sss_idmap_ctx *ctx,
437  const char *sid,
438  uint32_t *id);
439 
454 enum idmap_error_code sss_idmap_dom_sid_to_unix(struct sss_idmap_ctx *ctx,
455  struct sss_dom_sid *dom_sid,
456  uint32_t *id);
457 
473 enum idmap_error_code sss_idmap_bin_sid_to_unix(struct sss_idmap_ctx *ctx,
474  uint8_t *bin_sid,
475  size_t length,
476  uint32_t *id);
477 
492 enum idmap_error_code sss_idmap_smb_sid_to_unix(struct sss_idmap_ctx *ctx,
493  struct dom_sid *smb_sid,
494  uint32_t *id);
495 
510 enum idmap_error_code sss_idmap_check_sid_unix(struct sss_idmap_ctx *ctx,
511  const char *sid,
512  uint32_t id);
513 
528 enum idmap_error_code sss_idmap_check_dom_sid_unix(struct sss_idmap_ctx *ctx,
529  struct sss_dom_sid *dom_sid,
530  uint32_t id);
531 
547 enum idmap_error_code sss_idmap_check_bin_sid_unix(struct sss_idmap_ctx *ctx,
548  uint8_t *bin_sid,
549  size_t length,
550  uint32_t id);
551 
567 enum idmap_error_code sss_idmap_check_smb_sid_unix(struct sss_idmap_ctx *ctx,
568  struct dom_sid *smb_sid,
569  uint32_t id);
570 
585 enum idmap_error_code sss_idmap_unix_to_sid(struct sss_idmap_ctx *ctx,
586  uint32_t id,
587  char **sid);
588 
602 enum idmap_error_code sss_idmap_unix_to_dom_sid(struct sss_idmap_ctx *ctx,
603  uint32_t id,
604  struct sss_dom_sid **dom_sid);
605 
621 enum idmap_error_code sss_idmap_unix_to_bin_sid(struct sss_idmap_ctx *ctx,
622  uint32_t id,
623  uint8_t **bin_sid,
624  size_t *length);
625 
634 enum idmap_error_code sss_idmap_free(struct sss_idmap_ctx *ctx);
635 
645 enum idmap_error_code sss_idmap_free_sid(struct sss_idmap_ctx *ctx,
646  char *sid);
647 
657 enum idmap_error_code sss_idmap_free_dom_sid(struct sss_idmap_ctx *ctx,
658  struct sss_dom_sid *dom_sid);
659 
669 enum idmap_error_code sss_idmap_free_smb_sid(struct sss_idmap_ctx *ctx,
670  struct dom_sid *smb_sid);
671 
681 enum idmap_error_code sss_idmap_free_bin_sid(struct sss_idmap_ctx *ctx,
682  uint8_t *bin_sid);
683 
692 const char *idmap_error_string(enum idmap_error_code err);
693 
703 bool is_domain_sid(const char *str);
704 
724 enum idmap_error_code
725 sss_idmap_domain_has_algorithmic_mapping(struct sss_idmap_ctx *ctx,
726  const char *dom_sid,
727  bool *has_algorithmic_mapping);
728 
747 enum idmap_error_code
748 sss_idmap_domain_by_name_has_algorithmic_mapping(struct sss_idmap_ctx *ctx,
749  const char *dom_name,
750  bool *has_algorithmic_mapping);
751 
765 enum idmap_error_code sss_idmap_bin_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
766  const uint8_t *bin_sid,
767  size_t length,
768  struct sss_dom_sid **dom_sid);
769 
783 enum idmap_error_code sss_idmap_bin_sid_to_sid(struct sss_idmap_ctx *ctx,
784  const uint8_t *bin_sid,
785  size_t length,
786  char **sid);
787 
801 enum idmap_error_code sss_idmap_dom_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
802  struct sss_dom_sid *dom_sid,
803  uint8_t **bin_sid,
804  size_t *length);
805 
819 enum idmap_error_code sss_idmap_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
820  const char *sid,
821  uint8_t **bin_sid,
822  size_t *length);
823 
836 enum idmap_error_code sss_idmap_dom_sid_to_sid(struct sss_idmap_ctx *ctx,
837  struct sss_dom_sid *dom_sid,
838  char **sid);
839 
852 enum idmap_error_code sss_idmap_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
853  const char *sid,
854  struct sss_dom_sid **dom_sid);
855 
868 enum idmap_error_code sss_idmap_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
869  const char *sid,
870  struct dom_sid **smb_sid);
871 
884 enum idmap_error_code sss_idmap_smb_sid_to_sid(struct sss_idmap_ctx *ctx,
885  struct dom_sid *smb_sid,
886  char **sid);
887 
900 enum idmap_error_code sss_idmap_dom_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
901  struct sss_dom_sid *dom_sid,
902  struct dom_sid **smb_sid);
903 
916 enum idmap_error_code sss_idmap_smb_sid_to_dom_sid(struct sss_idmap_ctx *ctx,
917  struct dom_sid *smb_sid,
918  struct sss_dom_sid **dom_sid);
919 
933 enum idmap_error_code sss_idmap_bin_sid_to_smb_sid(struct sss_idmap_ctx *ctx,
934  const uint8_t *bin_sid,
935  size_t length,
936  struct dom_sid **smb_sid);
937 
951 enum idmap_error_code sss_idmap_smb_sid_to_bin_sid(struct sss_idmap_ctx *ctx,
952  struct dom_sid *smb_sid,
953  uint8_t **bin_sid,
954  size_t *length);
958 #endif /* SSS_IDMAP_H_ */
enum idmap_error_code sss_idmap_sid_to_bin_sid(struct sss_idmap_ctx *ctx, const char *sid, uint8_t **bin_sid, size_t *length)
Convert SID string to binary SID.
The provided SID was not found.
Definition: sss_idmap.h:69
enum idmap_error_code sss_idmap_ctx_get_upper(struct sss_idmap_ctx *ctx, id_t *_upper)
Get the upper bound of the range of POSIX IDs.
enum idmap_error_code sss_idmap_check_dom_sid_unix(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid, uint32_t id)
Check if a SID structure and a unix UID or GID belong to the same range.
Success.
Definition: sss_idmap.h:48
Function is not yet implemented.
Definition: sss_idmap.h:51
enum idmap_error_code sss_idmap_calculate_range(struct sss_idmap_ctx *ctx, const char *dom_sid, id_t *slice_num, struct sss_idmap_range *range)
Calculate new range of available POSIX IDs.
enum idmap_error_code sss_idmap_bin_sid_to_unix(struct sss_idmap_ctx *ctx, uint8_t *bin_sid, size_t length, uint32_t *id)
Translate a binary SID to a unix UID or GID.
The provided SID is a built-in one.
Definition: sss_idmap.h:75
enum idmap_error_code sss_idmap_ctx_get_rangesize(struct sss_idmap_ctx *ctx, id_t *rangesize)
Get the range size of POSIX IDs available for single domain.
enum idmap_error_code sss_idmap_ctx_set_extra_slice_init(struct sss_idmap_ctx *ctx, int extra_slice_init)
Set the number of secondary slices available for domain.
enum idmap_error_code sss_idmap_check_bin_sid_unix(struct sss_idmap_ctx *ctx, uint8_t *bin_sid, size_t length, uint32_t id)
Check if a binary SID and a unix UID or GID belong to the same range.
The provided idmap context is invalid.
Definition: sss_idmap.h:63
enum idmap_error_code sss_idmap_sid_to_unix(struct sss_idmap_ctx *ctx, const char *sid, uint32_t *id)
Translate SID to a unix UID or GID.
The provided UID or GID could not be mapped.
Definition: sss_idmap.h:72
enum idmap_error_code sss_idmap_ctx_set_upper(struct sss_idmap_ctx *ctx, id_t upper)
Set the upper bound of the range of POSIX IDs.
enum idmap_error_code sss_idmap_init(idmap_alloc_func *alloc_func, void *alloc_pvt, idmap_free_func *free_func, struct sss_idmap_ctx **ctx)
Initialize idmap context.
bool is_domain_sid(const char *str)
Check if given string can be used as domain SID.
enum idmap_error_code sss_idmap_free_dom_sid(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid)
Free mapped domain SID.
enum idmap_error_code sss_idmap_unix_to_dom_sid(struct sss_idmap_ctx *ctx, uint32_t id, struct sss_dom_sid **dom_sid)
Translate unix UID or GID to a SID structure.
enum idmap_error_code sss_idmap_dom_sid_to_bin_sid(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid, uint8_t **bin_sid, size_t *length)
Convert SID structure to binary SID.
External source should be consulted for idmapping.
Definition: sss_idmap.h:84
enum idmap_error_code sss_idmap_add_domain_ex(struct sss_idmap_ctx *ctx, const char *domain_name, const char *domain_sid, struct sss_idmap_range *range, const char *range_id, uint32_t rid, bool external_mapping)
Add a domain with the first mappable RID to the idmap context.
General error.
Definition: sss_idmap.h:54
enum idmap_error_code sss_idmap_ctx_set_rangesize(struct sss_idmap_ctx *ctx, id_t rangesize)
Set the range size of POSIX IDs available for single domain.
const char * idmap_error_string(enum idmap_error_code err)
Translate error code to a string.
void *( idmap_alloc_func)(size_t size, void *pvt)
Typedef for memory allocation functions.
Definition: sss_idmap.h:93
enum idmap_error_code sss_idmap_add_auto_domain_ex(struct sss_idmap_ctx *ctx, const char *domain_name, const char *domain_sid, struct sss_idmap_range *range, const char *range_id, uint32_t rid, bool external_mapping, idmap_store_cb cb, void *pvt)
Add a domain with the first mappable RID to the idmap context and generate automatically secondary sl...
enum idmap_error_code sss_idmap_smb_sid_to_dom_sid(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid, struct sss_dom_sid **dom_sid)
Convert Samba dom_sid structure to SID structure.
enum idmap_error_code sss_idmap_sid_to_dom_sid(struct sss_idmap_ctx *ctx, const char *sid, struct sss_dom_sid **dom_sid)
Convert SID string to SID structure.
Ran out of memory during processing.
Definition: sss_idmap.h:57
enum idmap_error_code sss_idmap_domain_has_algorithmic_mapping(struct sss_idmap_ctx *ctx, const char *dom_sid, bool *has_algorithmic_mapping)
Check if a domain is configured with algorithmic mapping.
enum idmap_error_code sss_idmap_check_collision(struct sss_idmap_ctx *ctx, char *n_name, char *n_sid, struct sss_idmap_range *n_range, uint32_t n_first_rid, char *n_range_id, bool n_external_mapping)
Check if a new range would collide with any existing one.
enum idmap_error_code sss_idmap_smb_sid_to_bin_sid(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid, uint8_t **bin_sid, size_t *length)
Convert Samba dom_sid structure to binary SID.
enum idmap_error_code sss_idmap_free_sid(struct sss_idmap_ctx *ctx, char *sid)
Free mapped SID.
enum idmap_error_code sss_idmap_ctx_set_autorid(struct sss_idmap_ctx *ctx, bool use_autorid)
Set/unset autorid compatibility mode.
enum idmap_error_code sss_idmap_check_sid_unix(struct sss_idmap_ctx *ctx, const char *sid, uint32_t id)
Check if a SID and a unix UID or GID belong to the same range.
enum idmap_error_code sss_idmap_free_smb_sid(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid)
Free mapped Samba SID.
enum idmap_error_code sss_idmap_free_bin_sid(struct sss_idmap_ctx *ctx, uint8_t *bin_sid)
Free mapped binary SID.
New domain collides with existing one.
Definition: sss_idmap.h:81
No domain added.
Definition: sss_idmap.h:60
enum idmap_error_code sss_idmap_ctx_set_lower(struct sss_idmap_ctx *ctx, id_t lower)
Set the lower bound of the range of POSIX IDs.
The provided SID is invalid.
Definition: sss_idmap.h:66
enum idmap_error_code sss_idmap_add_domain(struct sss_idmap_ctx *ctx, const char *domain_name, const char *domain_sid, struct sss_idmap_range *range)
Add a domain to the idmap context.
enum idmap_error_code sss_idmap_free(struct sss_idmap_ctx *ctx)
Free all the allocated memory of the idmap context.
enum idmap_error_code sss_idmap_unix_to_bin_sid(struct sss_idmap_ctx *ctx, uint32_t id, uint8_t **bin_sid, size_t *length)
Translate unix UID or GID to a binary SID.
enum idmap_error_code sss_idmap_check_smb_sid_unix(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid, uint32_t id)
Check if a Samba dom_sid structure and a unix UID or GID belong to the same range.
No more free slices.
Definition: sss_idmap.h:78
enum idmap_error_code sss_idmap_sid_to_smb_sid(struct sss_idmap_ctx *ctx, const char *sid, struct dom_sid **smb_sid)
Convert SID string to Samba dom_sid structure.
enum idmap_error_code(* idmap_store_cb)(const char *dom_name, const char *dom_sid, const char *range_id, uint32_t min_id, uint32_t max_id, uint32_t first_rid, void *pvt)
Typedef for storing mappings of dynamically created domains.
Definition: sss_idmap.h:99
Structure for id ranges FIXME: this struct might change when it is clear how ranges are handled on th...
Definition: sss_idmap.h:112
enum idmap_error_code sss_idmap_smb_sid_to_sid(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid, char **sid)
Convert Samba dom_sid structure to SID string.
enum idmap_error_code sss_idmap_unix_to_sid(struct sss_idmap_ctx *ctx, uint32_t id, char **sid)
Translate unix UID or GID to a SID.
enum idmap_error_code sss_idmap_ctx_get_lower(struct sss_idmap_ctx *ctx, id_t *_lower)
Get the lower bound of the range of POSIX IDs.
enum idmap_error_code sss_idmap_dom_sid_to_smb_sid(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid, struct dom_sid **smb_sid)
Convert SID stucture to Samba dom_sid structure.
enum idmap_error_code sss_idmap_bin_sid_to_smb_sid(struct sss_idmap_ctx *ctx, const uint8_t *bin_sid, size_t length, struct dom_sid **smb_sid)
Convert binary SID to Samba dom_sid structure.
enum idmap_error_code sss_idmap_smb_sid_to_unix(struct sss_idmap_ctx *ctx, struct dom_sid *smb_sid, uint32_t *id)
Translate a Samba dom_sid stucture to a unix UID or GID.
enum idmap_error_code sss_idmap_dom_sid_to_unix(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid, uint32_t *id)
Translate a SID stucture to a unix UID or GID.
enum idmap_error_code sss_idmap_bin_sid_to_dom_sid(struct sss_idmap_ctx *ctx, const uint8_t *bin_sid, size_t length, struct sss_dom_sid **dom_sid)
Convert binary SID to SID structure.
enum idmap_error_code sss_idmap_bin_sid_to_sid(struct sss_idmap_ctx *ctx, const uint8_t *bin_sid, size_t length, char **sid)
Convert binary SID to SID string.
idmap_error_code
Error codes used by libsss_idmap.
Definition: sss_idmap.h:46
enum idmap_error_code sss_idmap_ctx_get_autorid(struct sss_idmap_ctx *ctx, bool *_autorid)
Check if autorid compatibility mode is set.
enum idmap_error_code sss_idmap_check_collision_ex(const char *o_name, const char *o_sid, struct sss_idmap_range *o_range, uint32_t o_first_rid, const char *o_range_id, bool o_external_mapping, const char *n_name, const char *n_sid, struct sss_idmap_range *n_range, uint32_t n_first_rid, const char *n_range_id, bool n_external_mapping)
Check if two ranges would collide.
enum idmap_error_code sss_idmap_dom_sid_to_sid(struct sss_idmap_ctx *ctx, struct sss_dom_sid *dom_sid, char **sid)
Convert SID structure to SID string.
The provided name was not found.
Definition: sss_idmap.h:87
enum idmap_error_code sss_idmap_domain_by_name_has_algorithmic_mapping(struct sss_idmap_ctx *ctx, const char *dom_name, bool *has_algorithmic_mapping)
Check if a domain is configured with algorithmic mapping.