1*c243e490SMarcel Moolenaar /* 2*c243e490SMarcel Moolenaar * Automated Testing Framework (atf) 3*c243e490SMarcel Moolenaar * 4*c243e490SMarcel Moolenaar * Copyright (c) 2007 The NetBSD Foundation, Inc. 5*c243e490SMarcel Moolenaar * All rights reserved. 6*c243e490SMarcel Moolenaar * 7*c243e490SMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 8*c243e490SMarcel Moolenaar * modification, are permitted provided that the following conditions 9*c243e490SMarcel Moolenaar * are met: 10*c243e490SMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 11*c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 12*c243e490SMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 13*c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 14*c243e490SMarcel Moolenaar * documentation and/or other materials provided with the distribution. 15*c243e490SMarcel Moolenaar * 16*c243e490SMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*c243e490SMarcel Moolenaar * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*c243e490SMarcel Moolenaar * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*c243e490SMarcel Moolenaar * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*c243e490SMarcel Moolenaar * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*c243e490SMarcel Moolenaar * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*c243e490SMarcel Moolenaar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*c243e490SMarcel Moolenaar * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*c243e490SMarcel Moolenaar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*c243e490SMarcel Moolenaar * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*c243e490SMarcel Moolenaar * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*c243e490SMarcel Moolenaar * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*c243e490SMarcel Moolenaar */ 29*c243e490SMarcel Moolenaar 30*c243e490SMarcel Moolenaar #include <sys/param.h> 31*c243e490SMarcel Moolenaar #include <sys/types.h> 32*c243e490SMarcel Moolenaar #include <limits.h> 33*c243e490SMarcel Moolenaar #include <unistd.h> 34*c243e490SMarcel Moolenaar 35*c243e490SMarcel Moolenaar #include "sanity.h" 36*c243e490SMarcel Moolenaar #include "user.h" 37*c243e490SMarcel Moolenaar 38*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 39*c243e490SMarcel Moolenaar * Free functions. 40*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 41*c243e490SMarcel Moolenaar 42*c243e490SMarcel Moolenaar uid_t 43*c243e490SMarcel Moolenaar atf_user_euid(void) 44*c243e490SMarcel Moolenaar { 45*c243e490SMarcel Moolenaar return geteuid(); 46*c243e490SMarcel Moolenaar } 47*c243e490SMarcel Moolenaar 48*c243e490SMarcel Moolenaar bool 49*c243e490SMarcel Moolenaar atf_user_is_member_of_group(gid_t gid) 50*c243e490SMarcel Moolenaar { 51*c243e490SMarcel Moolenaar static gid_t groups[NGROUPS_MAX]; 52*c243e490SMarcel Moolenaar static int ngroups = -1; 53*c243e490SMarcel Moolenaar bool found; 54*c243e490SMarcel Moolenaar int i; 55*c243e490SMarcel Moolenaar 56*c243e490SMarcel Moolenaar if (ngroups == -1) { 57*c243e490SMarcel Moolenaar ngroups = getgroups(NGROUPS_MAX, groups); 58*c243e490SMarcel Moolenaar INV(ngroups >= 0); 59*c243e490SMarcel Moolenaar } 60*c243e490SMarcel Moolenaar 61*c243e490SMarcel Moolenaar found = false; 62*c243e490SMarcel Moolenaar for (i = 0; !found && i < ngroups; i++) 63*c243e490SMarcel Moolenaar if (groups[i] == gid) 64*c243e490SMarcel Moolenaar found = true; 65*c243e490SMarcel Moolenaar return found; 66*c243e490SMarcel Moolenaar } 67*c243e490SMarcel Moolenaar 68*c243e490SMarcel Moolenaar bool 69*c243e490SMarcel Moolenaar atf_user_is_root(void) 70*c243e490SMarcel Moolenaar { 71*c243e490SMarcel Moolenaar return geteuid() == 0; 72*c243e490SMarcel Moolenaar } 73*c243e490SMarcel Moolenaar 74*c243e490SMarcel Moolenaar bool 75*c243e490SMarcel Moolenaar atf_user_is_unprivileged(void) 76*c243e490SMarcel Moolenaar { 77*c243e490SMarcel Moolenaar return geteuid() != 0; 78*c243e490SMarcel Moolenaar } 79