diff --git a/daemon/selinux-relabel.c b/daemon/selinux-relabel.c index 976cffe37..454486c17 100644 --- a/daemon/selinux-relabel.c +++ b/daemon/selinux-relabel.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "guestfs_protocol.h" #include "daemon.h" @@ -37,6 +38,17 @@ optgroup_selinuxrelabel_available (void) return prog_exists ("setfiles"); } +static int +dir_exists (const char *dir) +{ + struct stat statbuf; + + if (stat (dir, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) + return 1; + else + return 0; +} + static int setfiles_has_option (int *flag, char opt_char) { @@ -99,8 +111,10 @@ do_selinux_relabel (const char *specfile, const char *path, */ ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_dev); ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_proc); - ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_selinux); ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_sys); + if (dir_exists (s_selinux)) { + ADD_ARG (argv, i, "-e"); ADD_ARG (argv, i, s_selinux); + } /* You have to use the -m option (where available) otherwise * setfiles puts all the mountpoints on the excludes list for no