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.
+
+int capability_list_length(void) {
+ return (int) ELEMENTSOF(capability_names);
+}
const char *capability_to_name(int id);
int capability_from_name(const char *name);
const char *capability_to_name(int id);
int capability_from_name(const char *name);
+int capability_list_length(void);
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
#include "log.h"
#include "cap-list.h"
#include "capability.h"
#include "log.h"
#include "cap-list.h"
#include "capability.h"
int i;
assert_se(!capability_to_name(-1));
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));
const char *n;
assert_se(n = capability_to_name(i));
assert_se(capability_from_name("15") == 15);
assert_se(capability_from_name("-1") == -EINVAL);
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;
_cleanup_cap_free_charp_ char *a = NULL;
const char *b;
unsigned u;