[systemd-devel] [PATCHv2] test: do not use last cap from kernel in test-cap-list
Filipe Brandenburger
filbranden at google.com
Mon Dec 22 11:58:30 PST 2014
Ping?
On Fri, Dec 12, 2014 at 10:47 AM, Filipe Brandenburger
<filbranden at google.com> wrote:
> 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.
>
> v2: Updated the patch to also consider the changes introduced in commit
> 4b7c1d5d6a0060 ("test-cap-list: always check libcap comes to the same names...")
> ---
> src/shared/cap-list.c | 4 ++++
> src/shared/cap-list.h | 1 +
> src/test/test-cap-list.c | 7 ++++---
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/shared/cap-list.c b/src/shared/cap-list.c
> index 56d1488..8033e8c 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 c699e46..9824fad 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 238f876..831cdf5 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;
> --
> 1.8.3.1
>
More information about the systemd-devel
mailing list