diff options
-rw-r--r-- | src/lib/idmap/sss_idmap.c | 15 | ||||
-rw-r--r-- | src/lib/idmap/sss_idmap.h | 3 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/lib/idmap/sss_idmap.c b/src/lib/idmap/sss_idmap.c index 122f62f5..b04d849a 100644 --- a/src/lib/idmap/sss_idmap.c +++ b/src/lib/idmap/sss_idmap.c @@ -39,6 +39,7 @@ struct idmap_domain_info { struct sss_idmap_range *range; struct idmap_domain_info *next; uint32_t first_rid; + char *range_id; }; static void *default_alloc(size_t size, void *pvt) @@ -339,6 +340,9 @@ static enum idmap_error_code dom_check_collision( for (dom = dom_list; dom != NULL; dom = dom->next) { + /* TODO: if both ranges have the same ID check if an update is + * needed. */ + /* check if ID ranges overlap */ if ((new_dom->range->min >= dom->range->min && new_dom->range->min <= dom->range->max) @@ -372,6 +376,7 @@ 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) { struct idmap_domain_info *dom = NULL; @@ -412,6 +417,13 @@ enum idmap_error_code sss_idmap_add_domain_ex(struct sss_idmap_ctx *ctx, goto fail; } + if (range_id != NULL) { + dom->range_id = idmap_strdup(ctx, range_id); + if (dom->range_id == NULL) { + goto fail; + } + } + dom->first_rid = rid; err = dom_check_collision(ctx->idmap_domain_info, dom); @@ -438,7 +450,8 @@ enum idmap_error_code sss_idmap_add_domain(struct sss_idmap_ctx *ctx, const char *domain_sid, struct sss_idmap_range *range) { - return sss_idmap_add_domain_ex(ctx, domain_name, domain_sid, range, 0); + return sss_idmap_add_domain_ex(ctx, domain_name, domain_sid, range, NULL, + 0); } static bool sss_idmap_sid_is_builtin(const char *sid) diff --git a/src/lib/idmap/sss_idmap.h b/src/lib/idmap/sss_idmap.h index 3beeca11..5536aeb7 100644 --- a/src/lib/idmap/sss_idmap.h +++ b/src/lib/idmap/sss_idmap.h @@ -256,6 +256,8 @@ enum idmap_error_code sss_idmap_add_domain(struct sss_idmap_ctx *ctx, * SID (S-1-15-.....) * @param[in] range TBD Some information about the id ranges of this * domain + * @param[in] range_id optional unique identifier of a range, it is needed + * to allow updates at runtime * @param[in] rid The RID that should be mapped to the first ID of the * given range. * @@ -270,6 +272,7 @@ 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); /** * @brief Translate SID to a unix UID or GID |