summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2014-01-28 21:04:28 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-01-28 21:04:28 +0000
commit11322efdc63003ba7e2ba73dbbb2621e916a3773 (patch)
tree21d2abbc6d223ccec90bfd5cae1f4672837410b7
parent97ea590b4f55c1ee3998d1f17c06a7e7a27821e8 (diff)
parentacd96b11189e0422fa4060bc29139fbfef5b14a8 (diff)
downloadsystem_core-11322efdc63003ba7e2ba73dbbb2621e916a3773.zip
system_core-11322efdc63003ba7e2ba73dbbb2621e916a3773.tar.gz
system_core-11322efdc63003ba7e2ba73dbbb2621e916a3773.tar.bz2
am acd96b11: am 12db3eb6: Merge "Move restorecon and restorecon_recursive code to libselinux."
* commit 'acd96b11189e0422fa4060bc29139fbfef5b14a8': Move restorecon and restorecon_recursive code to libselinux.
-rw-r--r--init/init.c1
-rw-r--r--init/util.c55
2 files changed, 5 insertions, 51 deletions
diff --git a/init/init.c b/init/init.c
index 08fd5fb..00f4558 100644
--- a/init/init.c
+++ b/init/init.c
@@ -867,6 +867,7 @@ struct selabel_handle* selinux_android_prop_context_handle(void)
void selinux_init_all_handles(void)
{
sehandle = selinux_android_file_context_handle();
+ selinux_android_set_sehandle(sehandle);
sehandle_prop = selinux_android_prop_context_handle();
}
diff --git a/init/util.c b/init/util.c
index 5efd5be..e772342 100644
--- a/init/util.c
+++ b/init/util.c
@@ -25,6 +25,7 @@
#include <ftw.h>
#include <selinux/label.h>
+#include <selinux/android.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -524,60 +525,12 @@ int make_dir(const char *path, mode_t mode)
return rc;
}
-static int restorecon_sb(const char *pathname, const struct stat *sb)
+int restorecon(const char* pathname)
{
- char *secontext = NULL;
- char *oldsecontext = NULL;
- int i;
-
- if (selabel_lookup(sehandle, &secontext, pathname, sb->st_mode) < 0)
- return -errno;
-
- if (lgetfilecon(pathname, &oldsecontext) < 0) {
- freecon(secontext);
- return -errno;
- }
-
- if (strcmp(oldsecontext, secontext) != 0) {
- if (lsetfilecon(pathname, secontext) < 0) {
- freecon(oldsecontext);
- freecon(secontext);
- return -errno;
- }
- }
- freecon(oldsecontext);
- freecon(secontext);
- return 0;
-}
-
-int restorecon(const char *pathname)
-{
- struct stat sb;
-
- if (is_selinux_enabled() <= 0 || !sehandle)
- return 0;
-
- if (lstat(pathname, &sb) < 0)
- return -errno;
-
- return restorecon_sb(pathname, &sb);
-}
-
-static int nftw_restorecon(const char* filename, const struct stat* statptr,
- int fileflags __attribute__((unused)),
- struct FTW* pftw __attribute__((unused)))
-{
- restorecon_sb(filename, statptr);
- return 0;
+ return selinux_android_restorecon(pathname);
}
int restorecon_recursive(const char* pathname)
{
- int fd_limit = 20;
- int flags = FTW_DEPTH | FTW_MOUNT | FTW_PHYS;
-
- if (is_selinux_enabled() <= 0 || !sehandle)
- return 0;
-
- return nftw(pathname, nftw_restorecon, fd_limit, flags);
+ return selinux_android_restorecon_recursive(pathname);
}