1 /* restorecon.c - Restore default security contexts for files
2  *
3  * Copyright 2015 The Android Open Source Project
4 
5 USE_RESTORECON(NEWTOY(restorecon, "<1DFnRrv", TOYFLAG_USR|TOYFLAG_SBIN))
6 
7 config RESTORECON
8   bool "restorecon"
9   depends on TOYBOX_SELINUX
10   default y
11   help
12     usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...
13 
14     Restores the default security contexts for the given files.
15 
16     -D	apply to /data/data too
17     -F	force reset
18     -R	recurse into directories
19     -n	don't make any changes; useful with -v to see what would change
20     -v	verbose: show any changes
21 */
22 
23 #define FOR_restorecon
24 #include "toys.h"
25 
26 #if defined(__ANDROID__)
27 #include <selinux/android.h>
28 #endif
29 
restorecon_main(void)30 void restorecon_main(void)
31 {
32 #if defined(__ANDROID__)
33   char **s;
34   int flags = 0;
35 
36   if (toys.optflags & FLAG_D) flags |= SELINUX_ANDROID_RESTORECON_DATADATA;
37   if (toys.optflags & FLAG_F) flags |= SELINUX_ANDROID_RESTORECON_FORCE;
38   if (toys.optflags & (FLAG_R|FLAG_r))
39     flags |= SELINUX_ANDROID_RESTORECON_RECURSE;
40   if (toys.optflags & FLAG_n) flags |= SELINUX_ANDROID_RESTORECON_NOCHANGE;
41   if (toys.optflags & FLAG_v) flags |= SELINUX_ANDROID_RESTORECON_VERBOSE;
42 
43   for (s = toys.optargs; *s; s++)
44     if (selinux_android_restorecon(*s, flags) < 0)
45       perror_msg("restorecon failed: %s", *s);
46 #endif
47 }
48