requirements.cpp revision ef421f66f47224a42073deaf087378c5d0c9952e
//
// Automated Testing Framework (atf)
//
// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
//
// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// TODO: We probably don't want to raise std::runtime_error for the errors
// detected in this file.
#include <stdexcept>
#include "atf-c++/config.hpp"
#include "atf-c++/detail/sanity.hpp"
#include "requirements.hpp"
#include "user.hpp"
namespace {
static
bool
{
bool found = false;
if (program.is_absolute()) {
} else {
"when searching for a program (" +
found = true;
}
}
return found;
}
static
{
return "";
}
if (v.size() == 1)
else
}
static
{
"defined";
}
return "";
}
static
{
return "";
}
if (v.size() == 1)
else
}
static
{
}
return "";
}
static
{
if (user == "root") {
return "Requires root privileges";
else
return "";
} else if (user == "unprivileged") {
"unprivileged-user");
return "Requires an unprivileged user and the "
"'unprivileged-user' configuration variable is not set";
else {
try {
return "";
} catch (const std::runtime_error& e) {
return "Failed to get information for user " +
}
}
} else
return "";
} else
"require.user");
}
} // anonymous namespace
{
if (name == "require.arch")
else if (name == "require.config")
else if (name == "require.machine")
else if (name == "require.progs")
else if (name == "require.user")
else {
// Unknown require.* properties are forbidden by the
// application/X-atf-tp parser.
}
}
return failure_reason;
}
{
"require.user");
"unprivileged-user");
try {
UNREACHABLE; // This has been validated by check_user.
throw e;
}
} else {
}
} else
}