Hi,
thanks for the comments, I'll send a fixed version when the rest is
finished.
On 04/08/2015 12:48 PM, Jakub Hrozek wrote:
> +
> +char * ifp_users_build_path_from_msg(TALLOC_CTX *mem_ctx,
> + struct sss_domain_info *domain,
> + struct ldb_message *msg)
I wonder why this function isn't static and why it's in the header?
It's going to be used in Groups.Group interface while obtaining user
members (probably, if not I'll remove it :-)).
> +errno_t ifp_users_decompose_path(struct sss_domain_info
*domains,
> + const char *path,
> + struct sss_domain_info **_domain,
> + uid_t *_uid)
Looks like this one could be static as well.
> +{
> + char **parts = NULL;
> + struct sss_domain_info *domain;
> + uid_t uid;
> + errno_t ret;
> +
> + ret = sbus_opath_decompose_exact(NULL, path, IFP_PATH_USERS, 2, &parts);
> + if (ret != EOK) {
> + return ret;
> + }
> +
> + domain = find_domain_by_name(domains, parts[0], false);
> + if (domain == NULL) {
> + ret = ERR_DOMAIN_NOT_FOUND;
> + goto done;
> + }
> +
> + uid = strtouint32(parts[1], NULL, 10);
> + if (errno != 0) {
Since you use errno for error checking, you should set it to zero before
calling strtouint32 (same elsewhere in this patchset).
It is not necessary since it is set inside the function, but I can add
it explicitly so it is clear.
Looking at the interface, I wonder about the members. Are they
transitive or just direct members?
This is a good question... I'm not sure from the top of my head, but I
think we store complete membership in every user/group object, or am I
wrong?