From: Zbigniew Jędrzejewski-Szmek Date: Sat, 28 Nov 2015 05:04:40 +0000 (-0500) Subject: test-acl-util: add new test X-Git-Tag: v229~247^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5bb5b236fe8c663b7d4db5ccaf3e3e7942bf6abd;p=thirdparty%2Fsystemd.git test-acl-util: add new test For now, only add_acls_for_user is tested. When run under root, it actually sets the acls. When run under non-root, it sets the acls for the user, which does nothing, but at least calls the functions. --- diff --git a/.gitignore b/.gitignore index 98eb29d6573..c400fea6849 100644 --- a/.gitignore +++ b/.gitignore @@ -133,6 +133,7 @@ /systemd-vconsole-setup /tags /test-acd +/test-acl-util /test-af-list /test-architecture /test-arphrd-list diff --git a/Makefile.am b/Makefile.am index db206ae13ef..cecd139e4fb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1499,6 +1499,11 @@ tests += \ test-dns-domain \ test-install-root +if HAVE_ACL +tests += \ + test-acl-util +endif + EXTRA_DIST += \ test/a.service \ test/basic.target \ @@ -1846,6 +1851,12 @@ test_install_root_SOURCES = \ test_install_root_LDADD = \ libshared.la +test_acl_util_SOURCES = \ + src/test/test-acl-util.c + +test_acl_util_LDADD = \ + libshared.la + test_namespace_LDADD = \ libcore.la diff --git a/src/test/test-acl-util.c b/src/test/test-acl-util.c new file mode 100644 index 00000000000..bdea04d7f06 --- /dev/null +++ b/src/test/test-acl-util.c @@ -0,0 +1,85 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2015 Zbigniew Jędrzejewski-Szmek + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see . +***/ + +#include +#include +#include +#include + +#include "acl-util.h" +#include "fd-util.h" +#include "fileio.h" +#include "string-util.h" +#include "user-util.h" + +static void test_add_acls_for_user(void) { + char fn[] = "/tmp/test-empty.XXXXXX"; + _cleanup_close_ int fd = -1; + char *cmd; + uid_t uid; + int r; + + fd = mkostemp_safe(fn, O_RDWR|O_CLOEXEC); + assert_se(fd >= 0); + + /* Use the mode that user journal files use */ + assert(fchmod(fd, 0640) == 0); + + cmd = strjoina("ls -l ", fn); + assert_se(system(cmd) == 0); + + cmd = strjoina("getfacl -p ", fn); + assert_se(system(cmd) == 0); + + if (getuid() == 0) { + const char *nobody = "nobody"; + r = get_user_creds(&nobody, &uid, NULL, NULL, NULL); + if (r < 0) + uid = 0; + } else + uid = getuid(); + + r = add_acls_for_user(fd, uid); + assert_se(r >= 0); + + cmd = strjoina("ls -l ", fn); + assert_se(system(cmd) == 0); + + cmd = strjoina("getfacl -p ", fn); + assert_se(system(cmd) == 0); + + /* set the acls again */ + + r = add_acls_for_user(fd, uid); + assert_se(r >= 0); + + cmd = strjoina("ls -l ", fn); + assert_se(system(cmd) == 0); + + cmd = strjoina("getfacl -p ", fn); + assert_se(system(cmd) == 0); + + unlink(fn); +} + +int main(int argc, char **argv) { + test_add_acls_for_user(); +}