summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@google.com>2014-12-23 13:51:40 -0800
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-12-25 10:55:41 -0500
commit097df453dab149f6b45f1b30510363acd8f11593 (patch)
treeefce4f6877cc8a3076b291b751068db93ef7a5a1
parent6024a6e302bad6bcf073fa84a41a6123305dc845 (diff)
test: do not use last cap from kernel in test-cap-list
The new test-cap-list introduced in commit 2822da4fb7f891 uses the included table of capabilities. However, it uses cap_last_cap() which probes the kernel for the last available capability. On an older kernel (e.g. 3.10 from RHEL 7) that causes the test to fail with the following message: Assertion '!capability_to_name(cap_last_cap()+1)' failed at src/test/test-cap-list.c:30, function main(). Aborting. Fix it by exporting the size of the static table and using it in the test instead of the dynamic one from the current kernel. Tested by successfully running ./test-cap-list and the whole `make check` test suite with this patch on a RHEL 7 host.
-rw-r--r--src/shared/cap-list.c4
-rw-r--r--src/shared/cap-list.h1
-rw-r--r--src/test/test-cap-list.c7
3 files changed, 9 insertions, 3 deletions
diff --git a/src/shared/cap-list.c b/src/shared/cap-list.c
index 56d1488f4..8033e8c7b 100644
--- a/src/shared/cap-list.c
+++ b/src/shared/cap-list.c
@@ -60,3 +60,7 @@ int capability_from_name(const char *name) {
return sc->id;
}
+
+int capability_list_length(void) {
+ return (int) ELEMENTSOF(capability_names);
+}
diff --git a/src/shared/cap-list.h b/src/shared/cap-list.h
index c699e466a..9824fad70 100644
--- a/src/shared/cap-list.h
+++ b/src/shared/cap-list.h
@@ -23,3 +23,4 @@
const char *capability_to_name(int id);
int capability_from_name(const char *name);
+int capability_list_length(void);
diff --git a/src/test/test-cap-list.c b/src/test/test-cap-list.c
index 7c5ae18b2..4e7513649 100644
--- a/src/test/test-cap-list.c
+++ b/src/test/test-cap-list.c
@@ -19,6 +19,7 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include "util.h"
#include "log.h"
#include "cap-list.h"
#include "capability.h"
@@ -27,9 +28,9 @@ int main(int argc, char *argv[]) {
int i;
assert_se(!capability_to_name(-1));
- assert_se(!capability_to_name(cap_last_cap()+1));
+ assert_se(!capability_to_name(capability_list_length()));
- for (i = 0; i <= (int) cap_last_cap(); i++) {
+ for (i = 0; i < capability_list_length(); i++) {
const char *n;
assert_se(n = capability_to_name(i));
@@ -45,7 +46,7 @@ int main(int argc, char *argv[]) {
assert_se(capability_from_name("15") == 15);
assert_se(capability_from_name("-1") == -EINVAL);
- for (i = 0; i <= (int) cap_last_cap(); i++) {
+ for (i = 0; i < capability_list_length(); i++) {
_cleanup_cap_free_charp_ char *a = NULL;
const char *b;
unsigned u;