diff options
author | Ed Schouten <ed@nuxi.nl> | 2017-10-30 06:58:13 -0400 |
---|---|---|
committer | Refael Ackermann <refack@gmail.com> | 2017-11-01 17:55:20 -0400 |
commit | 78dbcbe559324cdd73c2a158ad6ce77a7a74717f (patch) | |
tree | 0ae16fc1461f81460ad102dfc8351a74a18ceb80 | |
parent | d1a9c029a09165ea7b9ae799d701fab8a204fe05 (diff) | |
download | android-node-v8-78dbcbe559324cdd73c2a158ad6ce77a7a74717f.tar.gz android-node-v8-78dbcbe559324cdd73c2a158ad6ce77a7a74717f.tar.bz2 android-node-v8-78dbcbe559324cdd73c2a158ad6ce77a7a74717f.zip |
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>
-rw-r--r-- | common.gypi | 2 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | src/cares_wrap.cc | 4 | ||||
-rw-r--r-- | src/node.cc | 12 |
4 files changed, 12 insertions, 8 deletions
diff --git a/common.gypi b/common.gypi index c7c367ec83..d152c81498 100644 --- a/common.gypi +++ b/common.gypi @@ -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' ], @@ -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') diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 1abbbe629a..77426c4acd 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -34,6 +34,10 @@ #include <vector> #include <unordered_set> +#ifdef __POSIX__ +# include <netdb.h> +#endif // __POSIX__ + #if defined(__ANDROID__) || \ defined(__MINGW32__) || \ defined(__OpenBSD__) || \ diff --git a/src/node.cc b/src/node.cc index 33bf5199d6..bfe36f218a 100644 --- a/src/node.cc +++ b/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); |