#include #include #include #include #include #include static const char *progname; static void usage(void) { fprintf(stderr, "usage: %s [-DFnrRv] pathname...\n", progname); exit(1); } int restorecon_main(int argc, char **argv) { int ch, i, rc; unsigned int flags = 0; progname = argv[0]; do { ch = getopt(argc, argv, "DFnrRv"); if (ch == EOF) break; switch (ch) { case 'D': flags |= SELINUX_ANDROID_RESTORECON_DATADATA; break; case 'F': flags |= SELINUX_ANDROID_RESTORECON_FORCE; break; case 'n': flags |= SELINUX_ANDROID_RESTORECON_NOCHANGE; break; case 'r': case 'R': flags |= SELINUX_ANDROID_RESTORECON_RECURSE; break; case 'v': flags |= SELINUX_ANDROID_RESTORECON_VERBOSE; break; default: usage(); } } while (1); argc -= optind; argv += optind; if (!argc) usage(); for (i = 0; i < argc; i++) { rc = selinux_android_restorecon(argv[i], flags); if (rc < 0) fprintf(stderr, "Could not restorecon %s: %s\n", argv[i], strerror(errno)); } return 0; }