Skip to content

Commit ce2feb3

Browse files
authored
feat(NODE-5746): allow runtime linking against system kerberos library (#165)
1 parent 6abd90e commit ce2feb3

File tree

8 files changed

+200
-70
lines changed

8 files changed

+200
-70
lines changed

.evergreen/config.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ functions:
6767
env:
6868
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
6969
PROJECT: ${project}
70+
GYP_DEFINES: ${GYP_DEFINES|}
71+
NPM_OPTIONS: ${NPM_OPTIONS|}
7072
args:
7173
- run
7274
- '--interactive'
@@ -76,6 +78,10 @@ functions:
7678
- /app
7779
- '--env'
7880
- PROJECT_DIRECTORY=/app
81+
- '--env'
82+
- GYP_DEFINES
83+
- '--env'
84+
- NPM_OPTIONS
7985
- 'ubuntu:22.04'
8086
- /bin/bash
8187
- /app/.evergreen/run-tests-ubuntu.sh
@@ -122,6 +128,12 @@ tasks:
122128
- name: run-tests-ubuntu
123129
commands:
124130
- func: run tests ubuntu
131+
- name: run-tests-ubuntu-rtld
132+
commands:
133+
- func: run tests ubuntu
134+
vars:
135+
GYP_DEFINES: kerberos_use_rtld=true
136+
NPM_OPTIONS: --build-from-source
125137
- name: run-prebuild
126138
commands:
127139
- func: install dependencies
@@ -194,6 +206,7 @@ buildvariants:
194206
packager_arch: x86_64
195207
tasks:
196208
- run-tests-ubuntu
209+
- run-tests-ubuntu-rtld
197210
- name: ubuntu2204-arm64
198211
display_name: 'Ubuntu 22.04 arm64'
199212
run_on: ubuntu2204-arm64-small
@@ -203,3 +216,4 @@ buildvariants:
203216
packager_arch: arm64
204217
tasks:
205218
- run-tests-ubuntu
219+
- run-tests-ubuntu-rtld

.evergreen/install-dependencies.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,4 @@ echo "npm location: $(which npm)"
105105
echo "npm version: $(npm -v)"
106106

107107
npm install "${NPM_OPTIONS}"
108+
ldd build/*/kerberos.node || true

binding.gyp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
'sources': [
88
'src/kerberos.cc'
99
],
10+
'variables': {
11+
'kerberos_use_rtld%': 'false'
12+
},
1013
'xcode_settings': {
1114
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
1215
'CLANG_CXX_LIBRARY': 'libc++',
@@ -36,7 +39,9 @@
3639
'src/unix/base64.cc',
3740
'src/unix/kerberos_gss.cc',
3841
'src/unix/kerberos_unix.cc'
39-
],
42+
]
43+
}],
44+
['(OS=="mac" or OS=="linux") and (kerberos_use_rtld!="true")', {
4045
'link_settings': {
4146
'libraries': [
4247
'-lkrb5',
@@ -53,6 +58,14 @@
5358
}]
5459
]
5560
}],
61+
['(OS=="mac" or OS=="linux") and (kerberos_use_rtld=="true")', {
62+
'defines': ['KERBEROS_USE_RTLD=1'],
63+
'link_settings': {
64+
'libraries': [
65+
'-ldl',
66+
]
67+
},
68+
}],
5669
['OS=="win"', {
5770
'sources': [
5871
'src/win32/kerberos_sspi.cc',

src/kerberos.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ void TestMethod(const CallbackInfo& info) {
171171
}
172172

173173
static Object Init(Env env, Object exports) {
174+
std::string libraries_unavailable_error;
175+
if (!kerberos_libraries_available(&libraries_unavailable_error)) {
176+
throw Error::New(env, libraries_unavailable_error);
177+
}
174178
Function KerberosClientCtor = KerberosClient::Init(env);
175179
Function KerberosServerCtor = KerberosServer::Init(env);
176180
exports["KerberosClient"] = KerberosClientCtor;

src/kerberos.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
namespace node_kerberos {
1515

16+
bool kerberos_libraries_available(std::string* error_out);
17+
1618
class KerberosServer : public Napi::ObjectWrap<KerberosServer> {
1719
public:
1820
static Napi::Function Init(Napi::Env env);

0 commit comments

Comments
 (0)