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