#include #include #include #include #include "selinux_internal.h" #include #include #include #include #include #include #include int matchmediacon(const char *media, security_context_t *con) { const char *path = selinux_media_context_path(); FILE *infile; char *ptr, *ptr2=NULL; int found=-1; char current_line[PATH_MAX]; if ((infile = fopen(path, "r")) == NULL) return -1; while (!feof_unlocked (infile)) { if (!fgets_unlocked(current_line, sizeof(current_line), infile)) { return -1; } if (current_line[strlen(current_line) - 1]) current_line[strlen(current_line) - 1] = 0; /* Skip leading whitespace before the partial context. */ ptr = current_line; while (*ptr && isspace(*ptr)) ptr++; if (!(*ptr)) continue; /* Find the end of the media context. */ ptr2 = ptr; while (*ptr2 && !isspace(*ptr2)) ptr2++; if (!(*ptr2)) continue; *ptr2++ = 0; if (strcmp (media, ptr) == 0) { found = 1; break; } } if (!found) return -1; /* Skip whitespace. */ while (*ptr2 && isspace(*ptr2)) ptr2++; if (!(*ptr2)) { return -1; } if (context_translations) { if (raw_to_trans_context(ptr2, con)) { *con = NULL; return -1; } } else *con = strdup(ptr2); return 0; }