diff --git a/source4/auth/ntlmssp/ntlmssp_server.c b/source4/auth/ntlmssp/ntlmssp_server.c index 838596e..0a67508 100644 --- a/source4/auth/ntlmssp/ntlmssp_server.c +++ b/source4/auth/ntlmssp/ntlmssp_server.c @@ -25,7 +25,7 @@ #include "auth/ntlmssp/ntlmssp.h" #include "auth/ntlmssp/msrpc_parse.h" #include "lib/crypto/crypto.h" -#include "system/filesys.h" +#include "system/network.h" #include "libcli/auth/libcli_auth.h" #include "auth/credentials/credentials.h" #include "auth/gensec/gensec.h" @@ -125,6 +125,7 @@ NTSTATUS ntlmssp_server_negotiate(struct gensec_security *gensec_security, { struct gensec_ntlmssp_state *gensec_ntlmssp_state = (struct gensec_ntlmssp_state *)gensec_security->private_data; DATA_BLOB struct_blob; + struct hostent *host; char dnsname[MAXHOSTNAMELEN], dnsdomname[MAXHOSTNAMELEN]; const char *p; uint32_t neg_flags = 0; @@ -183,16 +184,22 @@ NTSTATUS ntlmssp_server_negotiate(struct gensec_security *gensec_security, gensec_ntlmssp_state->chal = data_blob_talloc(gensec_ntlmssp_state, cryptkey, 8); gensec_ntlmssp_state->internal_chal = data_blob_talloc(gensec_ntlmssp_state, cryptkey, 8); - dnsname[0] = '\0'; + /* Find out the DNS host name */ if (gethostname(dnsname, sizeof(dnsname)) == -1) { DEBUG(0,("gethostname failed\n")); return NT_STATUS_UNSUCCESSFUL; } + if ((host = gethostbyname(dnsname)) == NULL) { + DEBUG(0,("gethostbyname failed\n")); + return NT_STATUS_UNSUCCESSFUL; + } + safe_strcpy(dnsname, host->h_name, sizeof(dnsname) - 1); + strlower_m(dnsname); - /* This should be a 'netbios domain -> DNS domain' mapping */ - p = strchr(dnsname, '.'); + /* Find out the DNS domain name */ + p = strchr(host->h_name, '.'); if (p != NULL) { - safe_strcpy(dnsdomname, p+1, sizeof(dnsdomname)); + safe_strcpy(dnsdomname, p+1, sizeof(dnsdomname) - 1); strlower_m(dnsdomname); } else { dnsdomname[0] = '\0'; diff --git a/source4/ldap_server/ldap_bind.c b/source4/ldap_server/ldap_bind.c index f37ef31..8357251 100644 --- a/source4/ldap_server/ldap_bind.c +++ b/source4/ldap_server/ldap_bind.c @@ -180,9 +180,6 @@ static NTSTATUS ldapsrv_BindSASL(struct ldapsrv_call *call) input = *req->creds.SASL.secblob; } - resp->SASL.secblob = talloc(reply, DATA_BLOB); - NT_STATUS_HAVE_NO_MEMORY(resp->SASL.secblob); - status = gensec_update(conn->gensec, reply, input, &output);