static char * lctx_label (pid_t lcid) { mac_t lctxlabel; char *string; int error; string = NULL; error = mac_prepare_process_label(&lctxlabel); if (error == -1) { warn("mac_prepare_process_label"); return (NULL); } error = mac_get_lcid(lcid, lctxlabel); if (error) { warn("mac_get_lcid"); return (NULL); } error = mac_to_text(lctxlabel, &string); if (error == -1) { mac_free(lctxlabel); return (NULL); } mac_free(lctxlabel); return (string); }
static void maclabel(void) { char *string; mac_t label; int error; error = mac_prepare_process_label(&label); if (error == -1) errx(1, "mac_prepare_type: %s", strerror(errno)); error = mac_get_proc(label); if (error == -1) errx(1, "mac_get_proc: %s", strerror(errno)); error = mac_to_text(label, &string); if (error == -1) errx(1, "mac_to_text: %s", strerror(errno)); (void)printf("%s\n", string); mac_free(label); free(string); }
int main(int argc, char *argv[]) { char *labellist, *string; mac_t label; pid_t pid; int ch, error, pid_set; pid_set = 0; pid = 0; labellist = NULL; while ((ch = getopt(argc, argv, "l:p:")) != -1) { switch (ch) { case 'l': if (labellist != NULL) usage(); labellist = argv[optind - 1]; break; case 'p': if (pid_set) usage(); pid = atoi(argv[optind - 1]); pid_set = 1; break; default: usage(); } } argc -= optind; argv += optind; if (argc != 0) usage(); if (labellist != NULL) error = mac_prepare(&label, labellist); else error = mac_prepare_process_label(&label); if (error != 0) { perror("mac_prepare"); return (-1); } if (pid_set) { error = mac_get_pid(pid, label); if (error) perror("mac_get_pid"); } else { error = mac_get_proc(label); if (error) perror("mac_get_proc"); } if (error) { mac_free(label); exit (-1); } error = mac_to_text(label, &string); if (error != 0) { perror("mac_to_text"); exit(EX_DATAERR); } if (strlen(string) > 0) printf("%s\n", string); mac_free(label); free(string); exit(EX_OK); }