2e4c85f157
clang-tidy hinted that some of this code wasn't right. Looking deeper, there is really not much related to file and socket descriptors, except that they're published in similar ways to the environment. All of the abstraction into a 'Descriptor' class takes us further away from specifying what we really mean. This removes that abstraction, adds stricter checks and better errors for parsing init scripts, reports sockets and files that are unable to be acquired before exec, and updates the README.md for the passcred option. Test: build, logd (uses files and sockets) works Change-Id: I59e611e95c85bdbefa779ef69b32b9dd4ee203e2
73 lines
1.8 KiB
C++
73 lines
1.8 KiB
C++
/*
|
|
* Copyright (C) 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <sys/resource.h>
|
|
#include <sys/types.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <cutils/iosched_policy.h>
|
|
|
|
#include "result.h"
|
|
|
|
namespace android {
|
|
namespace init {
|
|
|
|
struct SocketDescriptor {
|
|
std::string name;
|
|
int type = 0;
|
|
uid_t uid = 0;
|
|
gid_t gid = 0;
|
|
int perm = 0;
|
|
std::string context;
|
|
bool passcred = false;
|
|
|
|
Result<void> CreateAndPublish(const std::string& global_context) const;
|
|
};
|
|
|
|
struct FileDescriptor {
|
|
std::string name;
|
|
std::string type;
|
|
|
|
Result<void> CreateAndPublish() const;
|
|
};
|
|
|
|
struct NamespaceInfo {
|
|
int flags;
|
|
// Pair of namespace type, path to name.
|
|
std::vector<std::pair<int, std::string>> namespaces_to_enter;
|
|
};
|
|
Result<void> EnterNamespaces(const NamespaceInfo& info, const std::string& name, bool pre_apexd);
|
|
|
|
struct ProcessAttributes {
|
|
std::string console;
|
|
IoSchedClass ioprio_class;
|
|
int ioprio_pri;
|
|
std::vector<std::pair<int, rlimit>> rlimits;
|
|
uid_t uid;
|
|
gid_t gid;
|
|
std::vector<gid_t> supp_gids;
|
|
int priority;
|
|
};
|
|
Result<void> SetProcessAttributes(const ProcessAttributes& attr);
|
|
|
|
Result<void> WritePidToFiles(std::vector<std::string>* files);
|
|
|
|
} // namespace init
|
|
} // namespace android
|