1*cf5a6c84SAndroid Build Coastguard Worker /* chcon.c - Change file security context
2*cf5a6c84SAndroid Build Coastguard Worker *
3*cf5a6c84SAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker USE_CHCON(NEWTOY(chcon, "<2hvR", TOYFLAG_USR|TOYFLAG_BIN))
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Worker config CHCON
8*cf5a6c84SAndroid Build Coastguard Worker bool "chcon"
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: chcon [-hRv] CONTEXT FILE...
13*cf5a6c84SAndroid Build Coastguard Worker
14*cf5a6c84SAndroid Build Coastguard Worker Change the SELinux security context of listed file[s].
15*cf5a6c84SAndroid Build Coastguard Worker
16*cf5a6c84SAndroid Build Coastguard Worker -h Change symlinks instead of what they point to
17*cf5a6c84SAndroid Build Coastguard Worker -R Recurse into subdirectories
18*cf5a6c84SAndroid Build Coastguard Worker -v Verbose
19*cf5a6c84SAndroid Build Coastguard Worker */
20*cf5a6c84SAndroid Build Coastguard Worker
21*cf5a6c84SAndroid Build Coastguard Worker #define FOR_chcon
22*cf5a6c84SAndroid Build Coastguard Worker #include "toys.h"
23*cf5a6c84SAndroid Build Coastguard Worker
do_chcon(struct dirtree * try)24*cf5a6c84SAndroid Build Coastguard Worker static int do_chcon(struct dirtree *try)
25*cf5a6c84SAndroid Build Coastguard Worker {
26*cf5a6c84SAndroid Build Coastguard Worker char *path, *con = *toys.optargs;
27*cf5a6c84SAndroid Build Coastguard Worker
28*cf5a6c84SAndroid Build Coastguard Worker if (!dirtree_notdotdot(try)) return 0;
29*cf5a6c84SAndroid Build Coastguard Worker
30*cf5a6c84SAndroid Build Coastguard Worker path = dirtree_path(try, 0);
31*cf5a6c84SAndroid Build Coastguard Worker if (FLAG(v)) printf("chcon '%s' to %s\n", path, con);
32*cf5a6c84SAndroid Build Coastguard Worker if (-1 == (FLAG(h) ? lsetfilecon : setfilecon)(path, con))
33*cf5a6c84SAndroid Build Coastguard Worker perror_msg("'%s' to %s", path, con);
34*cf5a6c84SAndroid Build Coastguard Worker free(path);
35*cf5a6c84SAndroid Build Coastguard Worker
36*cf5a6c84SAndroid Build Coastguard Worker return FLAG(R)*DIRTREE_RECURSE;
37*cf5a6c84SAndroid Build Coastguard Worker }
38*cf5a6c84SAndroid Build Coastguard Worker
chcon_main(void)39*cf5a6c84SAndroid Build Coastguard Worker void chcon_main(void)
40*cf5a6c84SAndroid Build Coastguard Worker {
41*cf5a6c84SAndroid Build Coastguard Worker char **file;
42*cf5a6c84SAndroid Build Coastguard Worker
43*cf5a6c84SAndroid Build Coastguard Worker for (file = toys.optargs+1; *file; file++) dirtree_read(*file, do_chcon);
44*cf5a6c84SAndroid Build Coastguard Worker }
45