From patchwork Mon Sep 10 14:18:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clemens Famulla-Conrad X-Patchwork-Id: 968060 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4289Ch632pz9s3Z for ; Tue, 11 Sep 2018 00:19:28 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id E31B83E6296 for ; Mon, 10 Sep 2018 16:19:25 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-3.smtp.seeweb.it (in-3.smtp.seeweb.it [IPv6:2001:4b78:1:20::3]) by picard.linux.it (Postfix) with ESMTP id 894523E6081 for ; Mon, 10 Sep 2018 16:19:24 +0200 (CEST) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-3.smtp.seeweb.it (Postfix) with ESMTPS id 6F06B1A011ED for ; Mon, 10 Sep 2018 16:19:21 +0200 (CEST) Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 771D9B000 for ; Mon, 10 Sep 2018 14:19:21 +0000 (UTC) From: Clemens Famulla-Conrad To: ltp@lists.linux.it Date: Mon, 10 Sep 2018 16:18:57 +0200 Message-Id: <20180910141901.20541-1-cfamullaconrad@suse.de> X-Mailer: git-send-email 2.16.4 X-Virus-Scanned: clamav-milter 0.99.2 at in-3.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-3.smtp.seeweb.it Subject: [LTP] [PATCH v2 1/5] setregid01: Convert to newlib X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Compared to previous patchset, change tst_brk() to tst_res() as it was in the original tests. Store testcases in array and use newlib to iterate over this. Signed-off-by: Clemens Famulla-Conrad --- testcases/kernel/syscalls/setregid/setregid01.c | 171 +++++------------------- 1 file changed, 36 insertions(+), 135 deletions(-) diff --git a/testcases/kernel/syscalls/setregid/setregid01.c b/testcases/kernel/syscalls/setregid/setregid01.c index 57a38eb62..f2e41e134 100644 --- a/testcases/kernel/syscalls/setregid/setregid01.c +++ b/testcases/kernel/syscalls/setregid/setregid01.c @@ -1,25 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA 94043, or: * @@ -37,128 +19,47 @@ * Testcase to test the basic functionality of setregid(2) systemm call. */ -#include -#include -#include -#include - -#include "test.h" -#include "compat_16.h" - -static void setup(void); - -TCID_DEFINE(setregid01); -int TST_TOTAL = 5; - -static gid_t gid, egid; /* current real and effective group id */ - -int main(int ac, char **av) +#include "tst_test.h" +#include "compat_tst_16.h" + +static gid_t gid, egid; /* current real and effective group id */ +static gid_t neg_one = -1; + +static struct tcase { + gid_t *arg1; + gid_t *arg2; + const char *msg; +} tcases[] = { + {&neg_one, &neg_one, "Dont change either real or effective gid" }, + {&neg_one, &egid, "Change effective to effective gid" }, + {&gid, &neg_one, "Change real to real gid" }, + {&neg_one, &gid, "Change effective to real gid" }, + {&gid, &gid, "Try to change real to current real" } +}; + +static void run(unsigned int n) { - int lc; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - - tst_count = 0; - - /* - * TEST CASE: - * Dont change either real or effective gid - */ - gid = getgid(); - GID16_CHECK(gid, setregid, NULL); - - egid = getegid(); - GID16_CHECK(egid, setregid, NULL); + struct tcase *tc = &tcases[n]; - TEST(SETREGID(NULL, -1, -1)); + TEST(SETREGID(*tc->arg1, *tc->arg2)); - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "setregid - Dont change either real or effective gid failed, errno=%d : %s", - TEST_ERRNO, strerror(TEST_ERRNO)); - } else { - tst_resm(TPASS, - "setregid - Dont change either real or effective gid returned %ld", - TEST_RETURN); - } - - /* - * TEST CASE: - * change effective to effective gid - */ - - TEST(SETREGID(NULL, -1, egid)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "setregid - change effective to effective gid failed, errno=%d : %s", - TEST_ERRNO, strerror(TEST_ERRNO)); - } else { - tst_resm(TPASS, - "setregid - change effective to effective gid returned %ld", - TEST_RETURN); - } - - /* - * TEST CASE: - * change real to real gid - */ - - TEST(SETREGID(NULL, gid, -1)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "setregid - change real to real gid failed, errno=%d : %s", - TEST_ERRNO, strerror(TEST_ERRNO)); - } else { - tst_resm(TPASS, - "setregid - change real to real gid returned %ld", - TEST_RETURN); - } - - /* - * TEST CASE: - * change effective to real gid - */ - - TEST(SETREGID(NULL, -1, gid)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL, - "setregid - change effective to real gid failed, errno=%d : %s", - TEST_ERRNO, strerror(TEST_ERRNO)); - } else { - tst_resm(TPASS, - "setregid - change effective to real gid returned %ld", - TEST_RETURN); - } - - /* - * TEST CASE: - * try to change real to current real - */ - - TEST(SETREGID(NULL, gid, gid)); - - if (TEST_RETURN == -1) { - tst_resm(TFAIL | TTERRNO, "setregid failed"); - } else { - tst_resm(TPASS, "setregid return %ld", - TEST_RETURN); - } - - } - - tst_exit(); + if (TST_RET == -1) + tst_res(TFAIL | TTERRNO, tc->msg); + else + tst_res(TPASS, tc->msg); } static void setup(void) { - tst_sig(NOFORK, DEF_HANDLER, NULL); + gid = getgid(); + GID16_CHECK(gid, setregid); - TEST_PAUSE; + egid = getegid(); + GID16_CHECK(egid, setregid); } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .test = run, + .setup = setup, +}; From patchwork Mon Sep 10 14:18:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clemens Famulla-Conrad X-Patchwork-Id: 968061 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4289Cp29nmz9s3Z for ; Tue, 11 Sep 2018 00:19:34 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id CE9423E62A0 for ; Mon, 10 Sep 2018 16:19:31 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) by picard.linux.it (Postfix) with ESMTP id 03D9D3E629F for ; Mon, 10 Sep 2018 16:19:27 +0200 (CEST) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id B34A914016F5 for ; Mon, 10 Sep 2018 16:19:26 +0200 (CEST) Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 16F7BB001 for ; Mon, 10 Sep 2018 14:19:26 +0000 (UTC) From: Clemens Famulla-Conrad To: ltp@lists.linux.it Date: Mon, 10 Sep 2018 16:18:58 +0200 Message-Id: <20180910141901.20541-2-cfamullaconrad@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180910141901.20541-1-cfamullaconrad@suse.de> References: <20180910141901.20541-1-cfamullaconrad@suse.de> X-Virus-Scanned: clamav-milter 0.99.2 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-6.smtp.seeweb.it Subject: [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID() X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Add tst safe wrapper for getgrgid() function. Signed-off-by: Clemens Famulla-Conrad --- include/tst_safe_macros.h | 4 ++++ lib/tst_safe_macros.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h index 03657a410..d457ae92a 100644 --- a/include/tst_safe_macros.h +++ b/include/tst_safe_macros.h @@ -441,6 +441,10 @@ struct group *safe_getgrnam(const char *file, const int lineno, #define SAFE_GETGRNAM(name) \ safe_getgrnam(__FILE__, __LINE__, (name)) +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid); +#define SAFE_GETGRGID(gid) \ + safe_getgrgid(__FILE__, __LINE__, (gid)) + int safe_setxattr(const char *file, const int lineno, const char *path, const char *name, const void *value, size_t size, int flags); #define SAFE_SETXATTR(path, name, value, size, flags) \ diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c index 17384f32c..2e041c460 100644 --- a/lib/tst_safe_macros.c +++ b/lib/tst_safe_macros.c @@ -153,6 +153,19 @@ struct group *safe_getgrnam(const char *file, const int lineno, return rval; } +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid) +{ + struct group *rval; + + rval = getgrgid(gid); + if (rval == NULL) { + tst_brk_(file, lineno, TBROK | TERRNO, + "getgrgid(%li) failed", (long)gid); + } + + return rval; +} + int safe_chroot(const char *file, const int lineno, const char *path) { int rval; From patchwork Mon Sep 10 14:18:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clemens Famulla-Conrad X-Patchwork-Id: 968064 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4289D21bT9z9s3x for ; Tue, 11 Sep 2018 00:19:46 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 708C23E62ED for ; Mon, 10 Sep 2018 16:19:43 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-3.smtp.seeweb.it (in-3.smtp.seeweb.it [217.194.8.3]) by picard.linux.it (Postfix) with ESMTP id C080A3E629F for ; Mon, 10 Sep 2018 16:19:27 +0200 (CEST) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-3.smtp.seeweb.it (Postfix) with ESMTPS id C86DA1A011F5 for ; Mon, 10 Sep 2018 16:19:26 +0200 (CEST) Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 736E3B004 for ; Mon, 10 Sep 2018 14:19:26 +0000 (UTC) From: Clemens Famulla-Conrad To: ltp@lists.linux.it Date: Mon, 10 Sep 2018 16:18:59 +0200 Message-Id: <20180910141901.20541-3-cfamullaconrad@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180910141901.20541-1-cfamullaconrad@suse.de> References: <20180910141901.20541-1-cfamullaconrad@suse.de> X-Virus-Scanned: clamav-milter 0.99.2 at in-3.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-3.smtp.seeweb.it Subject: [LTP] [PATCH v2 3/5] setregid02: Convert to newlib X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" * Changed some messaged to show errno as string. * Used SAVE_* functions for getgrnam(), getgrgid() and getpwnam() * Format changes, put constants on right side Signed-off-by: Clemens Famulla-Conrad --- testcases/kernel/syscalls/setregid/setregid02.c | 138 ++++++++---------------- 1 file changed, 44 insertions(+), 94 deletions(-) diff --git a/testcases/kernel/syscalls/setregid/setregid02.c b/testcases/kernel/syscalls/setregid/setregid02.c index 21d1c823a..ea262b8c8 100644 --- a/testcases/kernel/syscalls/setregid/setregid02.c +++ b/testcases/kernel/syscalls/setregid/setregid02.c @@ -1,21 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0 /* - * * Copyright (c) International Business Machines Corp., 2001 * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * * Ported by John George */ @@ -29,13 +15,9 @@ #include #include #include -#include -#include "test.h" -#include "safe_macros.h" -#include "compat_16.h" - -TCID_DEFINE(setregid02); +#include "tst_test.h" +#include "compat_tst_16.h" static gid_t neg_one = -1; @@ -48,14 +30,14 @@ static struct group ltpgroup, root, bin; * is used for a separate test. The tests are executed in the for loop below. */ -struct test_data_t { +static struct tcase { gid_t *real_gid; gid_t *eff_gid; int exp_errno; struct group *exp_real_usr; struct group *exp_eff_usr; char *test_msg; -} test_data[] = { +} tcases[] = { { &neg_one, &root.gr_gid, EPERM, <pgroup, <pgroup, "After setregid(-1, root),"}, { @@ -71,113 +53,81 @@ struct test_data_t { "After setregid(bin, root),"} }; -int TST_TOTAL = ARRAY_SIZE(test_data); - -static void setup(void); static void gid_verify(struct group *ru, struct group *eu, char *when); static struct group get_group_by_name(const char *name); static struct group get_group_by_gid(gid_t gid); -int main(int ac, char **av) +static void run(unsigned int n) { - int lc; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - int i; - - tst_count = 0; - - for (i = 0; i < TST_TOTAL; i++) { - /* Set the real or effective group id */ - TEST(SETREGID(NULL, *test_data[i].real_gid, - *test_data[i].eff_gid)); - - if (TEST_RETURN == -1) { - if (TEST_ERRNO == test_data[i].exp_errno) { - tst_resm(TPASS, "setregid(%d, %d) " - "failed as expected.", - *test_data[i].real_gid, - *test_data[i].eff_gid); - } else { - tst_resm(TFAIL, "setregid(%d, %d) " - "failed (%d) but did not set the " - "expected errno (%d).", - *test_data[i].real_gid, - *test_data[i].eff_gid, - TEST_ERRNO, - test_data[i].exp_errno); - } - } else { - tst_resm(TFAIL, "setregid(%d, %d) " - "did not fail (ret: %ld) as expected (ret: -1).", - *test_data[i].real_gid, - *test_data[i].eff_gid, TEST_RETURN); - } - gid_verify(test_data[i].exp_real_usr, - test_data[i].exp_eff_usr, - test_data[i].test_msg); + struct tcase *tc = &tcases[n]; + + /* Set the real or effective group id */ + TEST(SETREGID(*tc->real_gid, *tc->eff_gid)); + + if (TST_RET == -1) { + if (tc->exp_errno == TST_ERR) { + tst_res(TPASS | TTERRNO, + "setregid(%d, %d) failed as expected", + *tc->real_gid, *tc->eff_gid); + } else { + tst_res(TFAIL | TTERRNO, + "setregid(%d, %d) failed unexpectedly, expected %s", + *tc->real_gid, *tc->eff_gid, + tst_strerrno(tc->exp_errno)); } + } else { + tst_res(TFAIL, + "setregid(%d, %d) did not fail (ret: %ld) as expected (ret: -1).", + *tc->real_gid, *tc->eff_gid, TST_RET); } - - tst_exit(); + gid_verify(tc->exp_real_usr, tc->exp_eff_usr, tc->test_msg); } static void setup(void) { - tst_require_root(); + ltpuser = SAFE_GETPWNAM("nobody"); - tst_sig(FORK, DEF_HANDLER, NULL); - - ltpuser = getpwnam("nobody"); - if (ltpuser == NULL) - tst_brkm(TBROK, NULL, "getpwnam(\"nobody\") failed"); - - SAFE_SETGID(NULL, ltpuser->pw_gid); - SAFE_SETUID(NULL, ltpuser->pw_uid); + SAFE_SETGID(ltpuser->pw_gid); + SAFE_SETUID(ltpuser->pw_uid); root = get_group_by_name("root"); ltpgroup = get_group_by_gid(ltpuser->pw_gid); bin = get_group_by_name("bin"); - - TEST_PAUSE; } static struct group get_group_by_name(const char *name) { - struct group *ret = getgrnam(name); - - if (ret == NULL) - tst_brkm(TBROK|TERRNO, NULL, "getgrnam(\"%s\") failed", name); + struct group *ret = SAFE_GETGRNAM(name); - GID16_CHECK(ret->gr_gid, setregid, NULL); + GID16_CHECK(ret->gr_gid, setregid); return *ret; } static struct group get_group_by_gid(gid_t gid) { - struct group *ret = getgrgid(gid); + struct group *ret = SAFE_GETGRGID(gid); - if (ret == NULL) - tst_brkm(TBROK|TERRNO, NULL, "getgrgid(\"%d\") failed", gid); - - GID16_CHECK(ret->gr_gid, setregid, NULL); + GID16_CHECK(ret->gr_gid, setregid); return *ret; } - void gid_verify(struct group *rg, struct group *eg, char *when) { if ((getgid() != rg->gr_gid) || (getegid() != eg->gr_gid)) { - tst_resm(TFAIL, "ERROR: %s real gid = %d; effective gid = %d", + tst_res(TFAIL, "ERROR: %s real gid = %d; effective gid = %d", when, getgid(), getegid()); - tst_resm(TINFO, "Expected: real gid = %d; effective gid = %d", + tst_res(TINFO, "Expected: real gid = %d; effective gid = %d", rg->gr_gid, eg->gr_gid); } else { - tst_resm(TPASS, "real or effective gid was modified as expected"); + tst_res(TPASS, + "real or effective gid was modified as expected"); } } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .needs_root = 1, + .test = run, + .setup = setup, +}; From patchwork Mon Sep 10 14:19:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clemens Famulla-Conrad X-Patchwork-Id: 968062 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4289Ct1Zv6z9s3Z for ; Tue, 11 Sep 2018 00:19:38 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id B9BAC3E62E4 for ; Mon, 10 Sep 2018 16:19:35 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-2.smtp.seeweb.it (in-2.smtp.seeweb.it [217.194.8.2]) by picard.linux.it (Postfix) with ESMTP id 047943E62B2 for ; Mon, 10 Sep 2018 16:19:27 +0200 (CEST) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-2.smtp.seeweb.it (Postfix) with ESMTPS id B4131600127 for ; Mon, 10 Sep 2018 16:19:26 +0200 (CEST) Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 620EEB000 for ; Mon, 10 Sep 2018 14:19:26 +0000 (UTC) From: Clemens Famulla-Conrad To: ltp@lists.linux.it Date: Mon, 10 Sep 2018 16:19:00 +0200 Message-Id: <20180910141901.20541-4-cfamullaconrad@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180910141901.20541-1-cfamullaconrad@suse.de> References: <20180910141901.20541-1-cfamullaconrad@suse.de> X-Virus-Scanned: clamav-milter 0.99.2 at in-2.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-2.smtp.seeweb.it Subject: [LTP] [PATCH v2 4/5] tst_safe_macros: add SAFE_GETGRNAM_FALLBACK() X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" This function retrieves the group by name. If the group doesn't exists fall back to the second name given. If the second group doesn't exists, exit with TBROK. Signed-off-by: Clemens Famulla-Conrad --- include/tst_safe_macros.h | 5 +++++ lib/tst_safe_macros.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h index d457ae92a..e8b68ce9d 100644 --- a/include/tst_safe_macros.h +++ b/include/tst_safe_macros.h @@ -441,6 +441,11 @@ struct group *safe_getgrnam(const char *file, const int lineno, #define SAFE_GETGRNAM(name) \ safe_getgrnam(__FILE__, __LINE__, (name)) +struct group *safe_getgrnam_fallback(const char *file, const int lineno, + const char *name, const char *fallback); +#define SAFE_GETGRNAM_FALLBACK(name, fallback) \ + safe_getgrnam_fallback(__FILE__, __LINE__, (name), (fallback)) + struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid); #define SAFE_GETGRGID(gid) \ safe_getgrgid(__FILE__, __LINE__, (gid)) diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c index 2e041c460..83994cdea 100644 --- a/lib/tst_safe_macros.c +++ b/lib/tst_safe_macros.c @@ -153,6 +153,22 @@ struct group *safe_getgrnam(const char *file, const int lineno, return rval; } +struct group *safe_getgrnam_fallback(const char *file, const int lineno, + const char *name, const char *fallback) +{ + struct group *rval; + + rval = getgrnam(name); + if (rval == NULL) { + tst_res_(file, lineno, TINFO, + "getgrnam(%s) failed - try fallback %s", + name, fallback); + rval = safe_getgrnam(file, lineno, fallback); + } + + return rval; +} + struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid) { struct group *rval; From patchwork Mon Sep 10 14:19:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clemens Famulla-Conrad X-Patchwork-Id: 968063 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4289Cy1Pypz9s3Z for ; Tue, 11 Sep 2018 00:19:42 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 893893E62E0 for ; Mon, 10 Sep 2018 16:19:39 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it [IPv6:2001:4b78:1:20::7]) by picard.linux.it (Postfix) with ESMTP id 403F03E62B7 for ; Mon, 10 Sep 2018 16:19:27 +0200 (CEST) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-7.smtp.seeweb.it (Postfix) with ESMTPS id D9CD52010A7 for ; Mon, 10 Sep 2018 16:19:26 +0200 (CEST) Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 7EA50B007 for ; Mon, 10 Sep 2018 14:19:26 +0000 (UTC) From: Clemens Famulla-Conrad To: ltp@lists.linux.it Date: Mon, 10 Sep 2018 16:19:01 +0200 Message-Id: <20180910141901.20541-5-cfamullaconrad@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180910141901.20541-1-cfamullaconrad@suse.de> References: <20180910141901.20541-1-cfamullaconrad@suse.de> X-Virus-Scanned: clamav-milter 0.99.2 at in-7.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-7.smtp.seeweb.it Subject: [LTP] [PATCH v2 5/5] setregid04: Convert to newlib X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Clemens Famulla-Conrad --- testcases/kernel/syscalls/setregid/setregid04.c | 116 ++++++------------------ 1 file changed, 27 insertions(+), 89 deletions(-) diff --git a/testcases/kernel/syscalls/setregid/setregid04.c b/testcases/kernel/syscalls/setregid/setregid04.c index bf744ff05..e0f1853a1 100644 --- a/testcases/kernel/syscalls/setregid/setregid04.c +++ b/testcases/kernel/syscalls/setregid/setregid04.c @@ -1,20 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) International Business Machines Corp., 2001 * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * * Ported by John George */ @@ -22,16 +9,8 @@ * Test setregid() when executed by root. */ -#include -#include -#include -#include -#include - -#include "test.h" -#include "compat_16.h" - -TCID_DEFINE(setregid04); +#include "tst_test.h" +#include "compat_tst_16.h" static gid_t neg_one = -1; @@ -70,88 +49,47 @@ struct test_data_t { "After setregid(-1, nobody)"} }; -int TST_TOTAL = sizeof(test_data) / sizeof(test_data[0]); - static void setup(void); -static void cleanup(void); static void gid_verify(struct group *ru, struct group *eu, const char *when); -int main(int ac, char **av) +static void run(unsigned int i) { - int lc; + /* Set the real or effective group id */ + TEST(SETREGID(*test_data[i].real_gid, *test_data[i].eff_gid)); - tst_parse_opts(ac, av, NULL, NULL); - - setup(); - - for (lc = 0; TEST_LOOPING(lc); lc++) { - int i; - - tst_count = 0; - - for (i = 0; i < TST_TOTAL; i++) { - /* Set the real or effective group id */ - TEST(SETREGID(cleanup, *test_data[i].real_gid, - *test_data[i].eff_gid)); - - if (TEST_RETURN == -1) { - tst_resm(TBROK, "setregid(%d, %d) failed", - *test_data[i].real_gid, - *test_data[i].eff_gid); - } else { - gid_verify(test_data[i].exp_real_usr, - test_data[i].exp_eff_usr, - test_data[i].test_msg); - } - } + if (TST_RET == -1) { + tst_res(TBROK | TTERRNO, "setregid(%d, %d) failed", + *test_data[i].real_gid, *test_data[i].eff_gid); + } else { + gid_verify(test_data[i].exp_real_usr, test_data[i].exp_eff_usr, + test_data[i].test_msg); } - - cleanup(); - tst_exit(); } -#define SAFE_GETGROUP(GROUPNAME) \ - if (getgrnam(#GROUPNAME) == NULL) { \ - tst_brkm(TBROK, NULL, "Couldn't find the `" #GROUPNAME "' group"); \ - } \ - GROUPNAME ## _gr = *(getgrnam(#GROUPNAME)); - -#define SAFE_GETGROUP_FALLBACK(GROUPNAME, GROUPNAME2) \ - if (getgrnam(#GROUPNAME) != NULL) \ - GROUPNAME ## _gr = *(getgrnam(#GROUPNAME)); \ - else if (getgrnam(#GROUPNAME2) != NULL) { \ - GROUPNAME ## _gr = *(getgrnam(#GROUPNAME2)); \ - tst_resm(TINFO, "`" #GROUPNAME "' group not found, trying fallback `" #GROUPNAME2 "' group"); \ - } else \ - tst_brkm(TBROK, NULL, "Couldn't find neither`" #GROUPNAME "' `" #GROUPNAME2 "' nor group"); - static void setup(void) { - tst_require_root(); - - tst_sig(FORK, DEF_HANDLER, cleanup); - - SAFE_GETGROUP(root); - SAFE_GETGROUP_FALLBACK(nobody, nogroup); - SAFE_GETGROUP(daemon); - SAFE_GETGROUP(bin); - - TEST_PAUSE; -} - -static void cleanup(void) -{ + root_gr = *SAFE_GETGRNAM("root"); + nobody_gr = *SAFE_GETGRNAM_FALLBACK("nobody", "nogroup"); + daemon_gr = *SAFE_GETGRNAM("daemon"); + bin_gr = *SAFE_GETGRNAM("bin"); } static void gid_verify(struct group *rg, struct group *eg, const char *when) { if ((getgid() != rg->gr_gid) || (getegid() != eg->gr_gid)) { - tst_resm(TFAIL, "ERROR: %s real gid = %d; effective gid = %d", + tst_res(TFAIL, "ERROR: %s real gid = %d; effective gid = %d", when, getgid(), getegid()); - tst_resm(TINFO, "Expected: real gid = %d; effective gid = %d", + tst_res(TINFO, "Expected: real gid = %d; effective gid = %d", rg->gr_gid, eg->gr_gid); } else { - tst_resm(TPASS, "real or effective gid was modified as " - "expected"); + tst_res(TPASS, + "real or effective gid was modified as expected"); } } + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(test_data), + .needs_root = 1, + .test = run, + .setup = setup, +};