/* SSSD IPA Module utility functions Authors: Sumit Bose Copyright (C) 2014 Red Hat This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "util/util.h" #define OVERRIDE_ANCHOR_IPA_PREFIX ":IPA:" #define OVERRIDE_ANCHOR_IPA_PREFIX_LEN (sizeof(OVERRIDE_ANCHOR_IPA_PREFIX) -1 ) errno_t split_ipa_anchor(TALLOC_CTX *mem_ctx, const char *anchor, char **_anchor_domain, char **_ipa_uuid) { const char *sep; if (anchor == NULL) { return EINVAL; } if (strncmp(OVERRIDE_ANCHOR_IPA_PREFIX, anchor, OVERRIDE_ANCHOR_IPA_PREFIX_LEN) != 0) { DEBUG(SSSDBG_CRIT_FAILURE, "No IPA anchor [%s].\n", anchor); return ENOMSG; } sep = strchr(anchor + OVERRIDE_ANCHOR_IPA_PREFIX_LEN, ':'); if (sep == NULL || sep[1] == '\0') { DEBUG(SSSDBG_CRIT_FAILURE, "Broken IPA anchor [%s].\n", anchor); return EINVAL; } *_anchor_domain = talloc_strndup(mem_ctx, anchor + OVERRIDE_ANCHOR_IPA_PREFIX_LEN, sep - anchor - OVERRIDE_ANCHOR_IPA_PREFIX_LEN); *_ipa_uuid = talloc_strdup(mem_ctx, sep + 1); if (*_anchor_domain == NULL || *_ipa_uuid == NULL) { DEBUG(SSSDBG_OP_FAILURE, "talloc_strndup failed.\n"); talloc_free(*_anchor_domain); talloc_free(*_ipa_uuid); return ENOMEM; } return EOK; }