// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. * * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA 94043, or: * * http://www.sgi.com * * For further information regarding this notice, see: * * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ * * Author: William Roske * Co-pilot: Dave Fenner */ /*\ * [Description] * * Verify the basic functionality of setregid(2) system call. */ #include "tst_test.h" #include "compat_tst_16.h" static gid_t gid, egid; static gid_t neg_one = -1; static struct tcase { gid_t *arg1; gid_t *arg2; const char *msg; } tcases[] = { {&neg_one, &neg_one, "Leave real and effective both gids unchanged" }, {&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, "Change real and effective both gids to current real gid" } }; static void run(unsigned int n) { struct tcase *tc = &tcases[n]; TST_EXP_PASS(SETREGID(*tc->arg1, *tc->arg2), "%s:", tc->msg); } static void setup(void) { gid = getgid(); GID16_CHECK(gid, setregid); egid = getegid(); GID16_CHECK(egid, setregid); } static struct tst_test test = { .tcnt = ARRAY_SIZE(tcases), .test = run, .setup = setup, };