summaryrefslogtreecommitdiffstats
path: root/src/gss_ntlmssp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gss_ntlmssp.c')
-rw-r--r--src/gss_ntlmssp.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/gss_ntlmssp.c b/src/gss_ntlmssp.c
index e4a6336..666508b 100644
--- a/src/gss_ntlmssp.c
+++ b/src/gss_ntlmssp.c
@@ -28,8 +28,7 @@ const gss_OID_desc gssntlm_oid = {
.elements = discard_const(GSS_NTLMSSP_OID_STRING)
};
-uint8_t gssntlm_required_security(int security_level,
- enum gssntlm_role role)
+uint8_t gssntlm_required_security(int security_level, struct gssntlm_ctx *ctx)
{
uint8_t resp;
@@ -51,10 +50,10 @@ uint8_t gssntlm_required_security(int security_level,
break;
case 4:
resp |= SEC_NTLM_OK | SEC_EXT_SEC_OK;
- if (role == GSSNTLM_DOMAIN_CONTROLLER) resp &= ~SEC_DC_LM_OK;
+ if (ctx->role == GSSNTLM_DOMAIN_CONTROLLER) resp &= ~SEC_DC_LM_OK;
break;
case 5:
- if (role == GSSNTLM_DOMAIN_CONTROLLER) resp = SEC_DC_V2_OK;
+ if (ctx->role == GSSNTLM_DOMAIN_CONTROLLER) resp = SEC_DC_V2_OK;
resp |= SEC_V2_ONLY | SEC_EXT_SEC_OK;
break;
default:
@@ -65,6 +64,36 @@ uint8_t gssntlm_required_security(int security_level,
return resp;
}
+void gssntlm_set_role(struct gssntlm_ctx *ctx,
+ int desired, char *nb_domain_name)
+{
+ if (desired == GSSNTLM_CLIENT) {
+ ctx->role = GSSNTLM_CLIENT;
+ } else if (nb_domain_name && *nb_domain_name) {
+ ctx->role = GSSNTLM_DOMAIN_SERVER;
+ } else {
+ ctx->role = GSSNTLM_SERVER;
+ }
+}
+
+bool gssntlm_role_is_client(struct gssntlm_ctx *ctx)
+{
+ return (ctx->role == GSSNTLM_CLIENT);
+}
+
+bool gssntlm_role_is_server(struct gssntlm_ctx *ctx)
+{
+ switch (ctx->role) {
+ case GSSNTLM_SERVER:
+ case GSSNTLM_DOMAIN_SERVER:
+ case GSSNTLM_DOMAIN_CONTROLLER:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
bool gssntlm_sec_lm_ok(struct gssntlm_ctx *ctx)
{
switch (ctx->role) {