freerdp: make modifications to NLA server-side fixes according to PR comments
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 22 Jul 2016 13:06:07 +0000 (09:06 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 22 Jul 2016 13:06:07 +0000 (09:06 -0400)
libfreerdp/core/nla.c
server/shadow/shadow_client.c
server/shadow/shadow_server.c
winpr/libwinpr/sspi/NTLM/ntlm.c

index 606c809..0d6b4b4 100644 (file)
@@ -1747,8 +1747,17 @@ rdpNla* nla_new(freerdp* instance, rdpTransport* transport, rdpSettings* setting
        nla->version = 3;
 
        if (settings->NtlmSamFile)
+       {
                nla->SamFile = _strdup(settings->NtlmSamFile);
 
+               if (!nla->SamFile)
+               {
+                       free(nla->identity);
+                       free(nla);
+                       return NULL;
+               }
+       }
+
        ZeroMemory(&nla->negoToken, sizeof(SecBuffer));
        ZeroMemory(&nla->pubKeyAuth, sizeof(SecBuffer));
        ZeroMemory(&nla->authInfo, sizeof(SecBuffer));
@@ -1815,11 +1824,8 @@ void nla_free(rdpNla* nla)
                }
        }
 
-       if (nla->SamFile)
-       {
-               free(nla->SamFile);
-               nla->SamFile = NULL;
-       }
+       free(nla->SamFile);
+       nla->SamFile = NULL;
 
        sspi_SecBufferFree(&nla->PublicKey);
        sspi_SecBufferFree(&nla->tsCredentials);
index 1cc23c9..8d433e2 100644 (file)
@@ -408,6 +408,9 @@ BOOL shadow_client_logon(freerdp_peer* peer, SEC_WINNT_AUTH_IDENTITY* identity,
                        password = _strdup((char*) identity->Password);
        }
 
+       if ((identity->User && !user) || (identity->Domain && !domain) || (identity->Password && !password))
+               return FALSE;
+
        if (user)
        {
                free(settings->Username);
@@ -419,7 +422,7 @@ BOOL shadow_client_logon(freerdp_peer* peer, SEC_WINNT_AUTH_IDENTITY* identity,
        {
                free(settings->Domain);
                settings->Domain = domain;
-               user = NULL;
+               domain = NULL;
        }
 
        if (password)
index d3dd1a0..ad5ebbe 100644 (file)
@@ -784,17 +784,11 @@ void shadow_server_free(rdpShadowServer* server)
        if (!server)
                return;
 
-       if (server->ipcSocket)
-       {
-               free(server->ipcSocket);
-               server->ipcSocket = NULL;
-       }
+       free(server->ipcSocket);
+       server->ipcSocket = NULL;
 
-       if (server->settings)
-       {
-               freerdp_settings_free(server->settings);
-               server->settings = NULL;
-       }
+       freerdp_settings_free(server->settings);
+       server->settings = NULL;
 
        free(server);
 }
index 32ff60a..0932697 100644 (file)
@@ -810,7 +810,15 @@ SECURITY_STATUS SEC_ENTRY ntlm_SetContextAttributesW(PCtxtHandle phContext, ULON
                const char* filename = (char*) pBuffer;
 
                free(context->SamFile);
-               context->SamFile = filename ? _strdup(filename) : NULL;
+               context->SamFile = NULL;
+
+               if (filename)
+               {
+                       context->SamFile = _strdup(filename);
+
+                       if (!context->SamFile)
+                               return SEC_E_INSUFFICIENT_MEMORY;
+               }
 
                return SEC_E_OK;
        }