Skip to content

Commit 6a9a01d

Browse files
committed
feat(kerberos): add getters to check for context completeness
1 parent b065707 commit 6a9a01d

4 files changed

+30
-2
lines changed

src/kerberos_client.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ NAN_MODULE_INIT(KerberosClient::Init) {
1414
Nan::SetAccessor(itpl, Nan::New("username").ToLocalChecked(), KerberosClient::UserNameGetter);
1515
Nan::SetAccessor(itpl, Nan::New("response").ToLocalChecked(), KerberosClient::ResponseGetter);
1616
Nan::SetAccessor(itpl, Nan::New("responseConf").ToLocalChecked(), KerberosClient::ResponseConfGetter);
17+
Nan::SetAccessor(itpl, Nan::New("contextComplete").ToLocalChecked(), KerberosClient::ContextCompleteGetter);
1718

1819
constructor.Reset(Nan::GetFunction(tpl).ToLocalChecked());
1920
Nan::Set(target, Nan::New("KerberosClient").ToLocalChecked(), Nan::GetFunction(tpl).ToLocalChecked());
@@ -29,7 +30,8 @@ v8::Local<v8::Object> KerberosClient::NewInstance(gss_client_state* state) {
2930
}
3031

3132
KerberosClient::KerberosClient(gss_client_state* state)
32-
: _state(state)
33+
: _state(state),
34+
_contextComplete(false)
3335
{}
3436

3537
KerberosClient::~KerberosClient() {
@@ -62,6 +64,11 @@ NAN_GETTER(KerberosClient::ResponseConfGetter) {
6264
info.GetReturnValue().Set(Nan::New(client->_state->responseConf));
6365
}
6466

67+
NAN_GETTER(KerberosClient::ContextCompleteGetter) {
68+
KerberosClient* client = Nan::ObjectWrap::Unwrap<KerberosClient>(info.This());
69+
info.GetReturnValue().Set(Nan::New(client->_contextComplete));
70+
}
71+
6572
class ClientStepWorker : public Nan::AsyncWorker {
6673
public:
6774
ClientStepWorker(KerberosClient* client, std::string challenge, Nan::Callback *callback)
@@ -77,6 +84,10 @@ class ClientStepWorker : public Nan::AsyncWorker {
7784
SetErrorMessage(result->message);
7885
return;
7986
}
87+
88+
if (result->code == AUTH_GSS_COMPLETE) {
89+
_client->_contextComplete = true;
90+
}
8091
}
8192

8293
private:

src/kerberos_client.h

+3
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ class KerberosClient : public Nan::ObjectWrap {
1717
static NAN_GETTER(UserNameGetter);
1818
static NAN_GETTER(ResponseGetter);
1919
static NAN_GETTER(ResponseConfGetter);
20+
static NAN_GETTER(ContextCompleteGetter);
2021

2122
static NAN_METHOD(Step);
2223
static NAN_METHOD(UnwrapData);
2324
static NAN_METHOD(WrapData);
2425

2526
private:
27+
friend class ClientStepWorker;
2628
explicit KerberosClient(gss_client_state* client_state);
2729
~KerberosClient();
2830

2931
gss_client_state* _state;
32+
bool _contextComplete;
3033
};
3134

3235
#endif

src/kerberos_server.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ NAN_MODULE_INIT(KerberosServer::Init) {
1212
Nan::SetAccessor(itpl, Nan::New("username").ToLocalChecked(), KerberosServer::UserNameGetter);
1313
Nan::SetAccessor(itpl, Nan::New("response").ToLocalChecked(), KerberosServer::ResponseGetter);
1414
Nan::SetAccessor(itpl, Nan::New("targetName").ToLocalChecked(), KerberosServer::TargetNameGetter);
15+
Nan::SetAccessor(itpl, Nan::New("contextComplete").ToLocalChecked(), KerberosServer::ContextCompleteGetter);
1516

1617
constructor.Reset(Nan::GetFunction(tpl).ToLocalChecked());
1718
Nan::Set(target, Nan::New("KerberosServer").ToLocalChecked(), Nan::GetFunction(tpl).ToLocalChecked());
@@ -27,7 +28,8 @@ v8::Local<v8::Object> KerberosServer::NewInstance(gss_server_state* state) {
2728
}
2829

2930
KerberosServer::KerberosServer(gss_server_state* state)
30-
: _state(state)
31+
: _state(state),
32+
_contextComplete(false)
3133
{}
3234

3335
KerberosServer::~KerberosServer() {
@@ -62,6 +64,11 @@ NAN_GETTER(KerberosServer::TargetNameGetter) {
6264
info.GetReturnValue().Set(Nan::New(server->_state->targetname).ToLocalChecked());
6365
}
6466

67+
NAN_GETTER(KerberosServer::ContextCompleteGetter) {
68+
KerberosServer* server = Nan::ObjectWrap::Unwrap<KerberosServer>(info.This());
69+
info.GetReturnValue().Set(Nan::New(server->_contextComplete));
70+
}
71+
6572
class ServerStepWorker : public Nan::AsyncWorker {
6673
public:
6774
ServerStepWorker(KerberosServer* server, std::string challenge, Nan::Callback *callback)
@@ -77,6 +84,10 @@ class ServerStepWorker : public Nan::AsyncWorker {
7784
SetErrorMessage(result->message);
7885
return;
7986
}
87+
88+
if (result->code == AUTH_GSS_COMPLETE) {
89+
_server->_contextComplete = true;
90+
}
8091
}
8192

8293
private:

src/kerberos_server.h

+3
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ class KerberosServer : public Nan::ObjectWrap {
1717
static NAN_GETTER(UserNameGetter);
1818
static NAN_GETTER(ResponseGetter);
1919
static NAN_GETTER(TargetNameGetter);
20+
static NAN_GETTER(ContextCompleteGetter);
2021

2122
static NAN_METHOD(Step);
2223

2324
private:
25+
friend class ServerStepWorker;
2426
explicit KerberosServer(gss_server_state* server_state);
2527
~KerberosServer();
2628

2729
gss_server_state* _state;
30+
bool _contextComplete;
2831
};
2932

3033
#endif

0 commit comments

Comments
 (0)