mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
build,src: Add CloudABI as a POSIX-like runtime environment.
CloudABI is a compact POSIX-like runtime that makes use of capability-based security. More details: https://github.com/NuxiNL/cloudlibc * src: Disable use of pwd.h, grp.h and get*uid() on CloudABI. As CloudABI is intended to run applications in cluster contexts (e.g., on Kubernetes), they are oblivious of UNIX credentials. Extend the existing preprocessor checks to disable any use of these interfaces, just like on Windows, Android, etc. * src: Explicitly include <netdb.h>. cares_wrap.cc calls into functions like getnameinfo() and getaddrinfo(). These functions tend to be available implicitly through <uv.h>, but we'd better still include this header explicitly. On CloudABI, we make use of a custom implementation of libuv that does not implicitly include header files like <netdb.h>. PR-URL: https://github.com/nodejs/node/pull/16612 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
committed by
Refael Ackermann
parent
d1a9c029a0
commit
78dbcbe559
@@ -291,7 +291,7 @@
|
||||
'cflags': [ '-pthread', ],
|
||||
'ldflags': [ '-pthread' ],
|
||||
}],
|
||||
[ 'OS in "linux freebsd openbsd solaris android aix"', {
|
||||
[ 'OS in "linux freebsd openbsd solaris android aix cloudabi"', {
|
||||
'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ],
|
||||
'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++0x' ],
|
||||
'ldflags': [ '-rdynamic' ],
|
||||
|
||||
2
configure
vendored
2
configure
vendored
@@ -57,7 +57,7 @@ from gyp_node import run_gyp
|
||||
parser = optparse.OptionParser()
|
||||
|
||||
valid_os = ('win', 'mac', 'solaris', 'freebsd', 'openbsd', 'linux',
|
||||
'android', 'aix')
|
||||
'android', 'aix', 'cloudabi')
|
||||
valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'mips64el', 'ppc',
|
||||
'ppc64', 'x32','x64', 'x86', 's390', 's390x')
|
||||
valid_arm_float_abi = ('soft', 'softfp', 'hard')
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
#include <vector>
|
||||
#include <unordered_set>
|
||||
|
||||
#ifdef __POSIX__
|
||||
# include <netdb.h>
|
||||
#endif // __POSIX__
|
||||
|
||||
#if defined(__ANDROID__) || \
|
||||
defined(__MINGW32__) || \
|
||||
defined(__OpenBSD__) || \
|
||||
|
||||
12
src/node.cc
12
src/node.cc
@@ -108,7 +108,7 @@ typedef int mode_t;
|
||||
#include <unistd.h> // setuid, getuid
|
||||
#endif
|
||||
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__)
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__) && !defined(__CloudABI__)
|
||||
#include <pwd.h> // getpwnam()
|
||||
#include <grp.h> // getgrnam()
|
||||
#endif
|
||||
@@ -1002,7 +1002,7 @@ Local<Value> UVException(Isolate* isolate,
|
||||
|
||||
// Look up environment variable unless running as setuid root.
|
||||
bool SafeGetenv(const char* key, std::string* text) {
|
||||
#ifndef _WIN32
|
||||
#if !defined(__CloudABI__) && !defined(_WIN32)
|
||||
if (linux_at_secure || getuid() != geteuid() || getgid() != getegid())
|
||||
goto fail;
|
||||
#endif
|
||||
@@ -2122,7 +2122,7 @@ static void Umask(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__)
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__) && !defined(__CloudABI__)
|
||||
|
||||
static const uid_t uid_not_found = static_cast<uid_t>(-1);
|
||||
static const gid_t gid_not_found = static_cast<gid_t>(-1);
|
||||
@@ -2441,7 +2441,7 @@ static void InitGroups(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
}
|
||||
|
||||
#endif // __POSIX__ && !defined(__ANDROID__)
|
||||
#endif // __POSIX__ && !defined(__ANDROID__) && !defined(__CloudABI__)
|
||||
|
||||
|
||||
static void WaitForInspectorDisconnect(Environment* env) {
|
||||
@@ -3706,7 +3706,7 @@ void SetupProcessObject(Environment* env,
|
||||
|
||||
env->SetMethod(process, "umask", Umask);
|
||||
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__)
|
||||
#if defined(__POSIX__) && !defined(__ANDROID__) && !defined(__CloudABI__)
|
||||
env->SetMethod(process, "getuid", GetUid);
|
||||
env->SetMethod(process, "geteuid", GetEUid);
|
||||
env->SetMethod(process, "setuid", SetUid);
|
||||
@@ -3720,7 +3720,7 @@ void SetupProcessObject(Environment* env,
|
||||
env->SetMethod(process, "getgroups", GetGroups);
|
||||
env->SetMethod(process, "setgroups", SetGroups);
|
||||
env->SetMethod(process, "initgroups", InitGroups);
|
||||
#endif // __POSIX__ && !defined(__ANDROID__)
|
||||
#endif // __POSIX__ && !defined(__ANDROID__) && !defined(__CloudABI__)
|
||||
|
||||
env->SetMethod(process, "_kill", Kill);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user