| #include <unistd.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <errno.h> |
| #include <selinux/selinux.h> |
| #include <selinux/android.h> |
| |
| 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; |
| } |