X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Futils%2Fl_getsepol.c;h=a3e07c4d4f1b2947aed1ca0027892db0a9f9e5ac;hp=effa8e109c5314e0d4ef827d058cacab6bef23c7;hb=e39d6451efb1d05ce7bb62eb0a91aebe7af302d9;hpb=803a59b87d9b0de8c059447902db176dfd37a24a diff --git a/lustre/utils/l_getsepol.c b/lustre/utils/l_getsepol.c index effa8e10..a3e07c4 100644 --- a/lustre/utils/l_getsepol.c +++ b/lustre/utils/l_getsepol.c @@ -329,7 +329,7 @@ int main(int argc, char **argv) int policyver = 0; char pol_bin_path[PATH_MAX + 1]; struct stat st; - time_t policymtime; + time_t policymtime = 0; int enforce; char *policy_type = NULL; unsigned char *mdval = NULL; @@ -342,7 +342,7 @@ int main(int argc, char **argv) if (rc < 0) goto out; - /* Version of loaded policy */ + /* Max version of loaded policy */ policyver = security_policyvers(); if (policyver < 0) { errlog("unknown policy version: %s\n", strerror(errno)); @@ -350,17 +350,26 @@ int main(int argc, char **argv) goto out; } - /* Path of binary policy file */ - snprintf(pol_bin_path, sizeof(pol_bin_path), "%s.%d", - selinux_binary_policy_path(), policyver); - - /* Stat binary policy file */ - if (stat(pol_bin_path, &st)) { - errlog("can't stat %s: %s\n", pol_bin_path, strerror(errno)); - rc = -errno; - goto out; + while (policymtime == 0) { + /* Path of binary policy file */ + snprintf(pol_bin_path, sizeof(pol_bin_path), "%s.%d", + selinux_binary_policy_path(), policyver); + + /* Stat binary policy file */ + if (stat(pol_bin_path, &st)) { + if (policyver > 0) { + policyver--; + } else { + errlog("can't stat %s.*: %s\n", + selinux_binary_policy_path(), + strerror(errno)); + rc = -errno; + goto out; + } + } else { + policymtime = st.st_mtime; + } } - policymtime = st.st_mtime; /* Determine if SELinux is in permissive or enforcing mode */ enforce = security_getenforce();