blob: 58f8947271e46429d4868e76f3255bfdb8dacfcc [file] [log] [blame]
Alexander Afanasyev49343f62015-01-26 21:58:07 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento70156942018-09-15 18:40:21 -04002/*
Davide Pesaventocf7db2f2019-03-24 23:17:28 -04003 * Copyright (c) 2014-2019, Regents of the University of California,
Alexander Afanasyev49343f62015-01-26 21:58:07 -08004 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#include "core/privilege-helper.hpp"
27
Alexander Afanasyev49343f62015-01-26 21:58:07 -080028#include "tests/test-common.hpp"
29
30namespace nfd {
31namespace tests {
32
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040033BOOST_AUTO_TEST_SUITE(TestPrivilegeHelper)
Alexander Afanasyev49343f62015-01-26 21:58:07 -080034
35BOOST_AUTO_TEST_CASE(DropRaise)
36{
Alexander Afanasyeve0d71b02016-05-25 11:39:13 -070037#ifdef HAVE_PRIVILEGE_DROP_AND_ELEVATE
Davide Pesavento231ddd72016-09-02 22:20:00 +000038 SKIP_IF_NOT_SUPERUSER();
Alexander Afanasyev49343f62015-01-26 21:58:07 -080039
Davide Pesavento70156942018-09-15 18:40:21 -040040 // The following assumes that daemon:daemon is present on the test system
41 PrivilegeHelper::initialize("daemon", "daemon");
Alexander Afanasyev49343f62015-01-26 21:58:07 -080042 BOOST_CHECK_EQUAL(::geteuid(), 0);
Davide Pesavento70156942018-09-15 18:40:21 -040043 BOOST_CHECK_EQUAL(::getegid(), 0);
Alexander Afanasyev49343f62015-01-26 21:58:07 -080044
Davide Pesavento70156942018-09-15 18:40:21 -040045 PrivilegeHelper::drop();
Alexander Afanasyev49343f62015-01-26 21:58:07 -080046 BOOST_CHECK_NE(::geteuid(), 0);
Davide Pesavento70156942018-09-15 18:40:21 -040047 BOOST_CHECK_NE(::getegid(), 0);
Alexander Afanasyev49343f62015-01-26 21:58:07 -080048
Alexander Afanasyev49343f62015-01-26 21:58:07 -080049 PrivilegeHelper::runElevated([] {
Davide Pesavento231ddd72016-09-02 22:20:00 +000050 BOOST_CHECK_EQUAL(::geteuid(), 0);
Davide Pesavento70156942018-09-15 18:40:21 -040051 BOOST_CHECK_EQUAL(::getegid(), 0);
Davide Pesavento231ddd72016-09-02 22:20:00 +000052 });
Alexander Afanasyev49343f62015-01-26 21:58:07 -080053 BOOST_CHECK_NE(::geteuid(), 0);
Davide Pesavento70156942018-09-15 18:40:21 -040054 BOOST_CHECK_NE(::getegid(), 0);
Alexander Afanasyev49343f62015-01-26 21:58:07 -080055
Davide Pesavento70156942018-09-15 18:40:21 -040056 BOOST_CHECK_THROW(PrivilegeHelper::runElevated(std::function<void()>{}),
57 std::bad_function_call);
58 BOOST_CHECK_NE(::geteuid(), 0);
59 BOOST_CHECK_NE(::getegid(), 0);
60
61 PrivilegeHelper::raise();
Alexander Afanasyev49343f62015-01-26 21:58:07 -080062 BOOST_CHECK_EQUAL(::geteuid(), 0);
Davide Pesavento70156942018-09-15 18:40:21 -040063 BOOST_CHECK_EQUAL(::getegid(), 0);
64
Alexander Afanasyeve0d71b02016-05-25 11:39:13 -070065#else
Davide Pesavento231ddd72016-09-02 22:20:00 +000066 BOOST_TEST_MESSAGE("Dropping/raising privileges not supported on this platform, skipping");
Alexander Afanasyeve0d71b02016-05-25 11:39:13 -070067#endif // HAVE_PRIVILEGE_DROP_AND_ELEVATE
Alexander Afanasyev49343f62015-01-26 21:58:07 -080068}
69
Davide Pesavento70156942018-09-15 18:40:21 -040070BOOST_AUTO_TEST_SUITE_END() // TestPrivilegeHelper
Alexander Afanasyev49343f62015-01-26 21:58:07 -080071
72} // namespace tests
73} // namespace nfd