static int default_canoncon(const char *path, unsigned lineno, char **context) { char *tmpcon; if (security_canonicalize_context_raw(*context, &tmpcon) < 0) { if (errno == ENOENT) return 0; if (lineno) myprintf("%s: line %u has invalid context %s\n", path, lineno, *context); else myprintf("%s: invalid context %s\n", path, *context); return 1; } free(*context); *context = tmpcon; return 0; }
int security_canonicalize_context(const char * con, char ** canoncon) { int ret; char * rcon; char * rcanoncon; if (selinux_trans_to_raw_context(con, &rcon)) return -1; ret = security_canonicalize_context_raw(rcon, &rcanoncon); freecon(rcon); if (!ret) { ret = selinux_raw_to_trans_context(rcanoncon, canoncon); freecon(rcanoncon); } return ret; }
int canoncon(char **contextp) { char *context = *contextp, *tmpcon; int rc = 0; if (policyfile) { if (sepol_check_context(context) < 0) { fprintf(stderr, "invalid context %s\n", context); exit(-1); } } else if (security_canonicalize_context_raw(context, &tmpcon) == 0) { free(context); *contextp = tmpcon; } else if (errno != ENOENT) { rc = -1; inc_err(); } return rc; }