mirror of https://github.com/FreeRDP/FreeRDP
libfreerdp-core: make NLA use transport abstraction layer
This commit is contained in:
parent
f19f3a6024
commit
b70bfc1579
|
@ -134,8 +134,8 @@ int credssp_ntlm_client_init(rdpCredssp* credssp)
|
|||
(char*) credssp->identity.User, (char*) credssp->identity.Domain, (char*) credssp->identity.Password);
|
||||
#endif
|
||||
|
||||
sspi_SecBufferAlloc(&credssp->PublicKey, credssp->TlsIn->PublicKeyLength);
|
||||
CopyMemory(credssp->PublicKey.pvBuffer, credssp->TlsIn->PublicKey, credssp->TlsIn->PublicKeyLength);
|
||||
sspi_SecBufferAlloc(&credssp->PublicKey, credssp->transport->TlsIn->PublicKeyLength);
|
||||
CopyMemory(credssp->PublicKey.pvBuffer, credssp->transport->TlsIn->PublicKey, credssp->transport->TlsIn->PublicKeyLength);
|
||||
|
||||
length = sizeof(TERMSRV_SPN_PREFIX) + strlen(settings->ServerHostname);
|
||||
|
||||
|
@ -165,8 +165,8 @@ int credssp_ntlm_server_init(rdpCredssp* credssp)
|
|||
rdpSettings* settings = credssp->settings;
|
||||
instance = (freerdp*) settings->instance;
|
||||
|
||||
sspi_SecBufferAlloc(&credssp->PublicKey, credssp->TlsIn->PublicKeyLength);
|
||||
CopyMemory(credssp->PublicKey.pvBuffer, credssp->TlsIn->PublicKey, credssp->TlsIn->PublicKeyLength);
|
||||
sspi_SecBufferAlloc(&credssp->PublicKey, credssp->transport->TlsIn->PublicKeyLength);
|
||||
CopyMemory(credssp->PublicKey.pvBuffer, credssp->transport->TlsIn->PublicKey, credssp->transport->TlsIn->PublicKeyLength);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -1128,7 +1128,7 @@ void credssp_send(rdpCredssp* credssp)
|
|||
ber_write_octet_string(s, credssp->pubKeyAuth.pvBuffer, length);
|
||||
}
|
||||
|
||||
tls_write(credssp->TlsOut, s->data, stream_get_length(s));
|
||||
transport_write(credssp->transport, s);
|
||||
stream_free(s);
|
||||
}
|
||||
|
||||
|
@ -1147,7 +1147,7 @@ int credssp_recv(rdpCredssp* credssp)
|
|||
|
||||
s = stream_new(4096);
|
||||
|
||||
status = tls_read_all(credssp->TlsIn, s->p, stream_get_left(s));
|
||||
status = transport_read(credssp->transport, s);
|
||||
s->size = status;
|
||||
|
||||
if (status < 0)
|
||||
|
@ -1231,7 +1231,7 @@ void credssp_buffer_free(rdpCredssp* credssp)
|
|||
* @return new CredSSP state machine.
|
||||
*/
|
||||
|
||||
rdpCredssp* credssp_new(freerdp* instance, rdpTls* TlsIn, rdpTls* TlsOut, rdpSettings* settings)
|
||||
rdpCredssp* credssp_new(freerdp* instance, rdpTransport* transport, rdpSettings* settings)
|
||||
{
|
||||
rdpCredssp* credssp;
|
||||
|
||||
|
@ -1248,8 +1248,7 @@ rdpCredssp* credssp_new(freerdp* instance, rdpTls* TlsIn, rdpTls* TlsOut, rdpSet
|
|||
credssp->instance = instance;
|
||||
credssp->settings = settings;
|
||||
credssp->server = settings->ServerMode;
|
||||
credssp->TlsIn = TlsIn;
|
||||
credssp->TlsOut = TlsOut;
|
||||
credssp->transport = transport;
|
||||
credssp->send_seq_num = 0;
|
||||
credssp->recv_seq_num = 0;
|
||||
ZeroMemory(&credssp->negoToken, sizeof(SecBuffer));
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef FREERDP_SSPI_CREDSSP_H
|
||||
#define FREERDP_SSPI_CREDSSP_H
|
||||
#ifndef FREERDP_CORE_CREDSSP_H
|
||||
#define FREERDP_CORE_CREDSSP_H
|
||||
|
||||
typedef struct rdp_credssp rdpCredssp;
|
||||
|
||||
|
@ -33,17 +33,18 @@ typedef struct rdp_credssp rdpCredssp;
|
|||
#include <freerdp/crypto/der.h>
|
||||
#include <freerdp/crypto/crypto.h>
|
||||
|
||||
#include "transport.h"
|
||||
|
||||
struct rdp_credssp
|
||||
{
|
||||
BOOL server;
|
||||
rdpTls* TlsIn;
|
||||
rdpTls* TlsOut;
|
||||
int send_seq_num;
|
||||
int recv_seq_num;
|
||||
freerdp* instance;
|
||||
CtxtHandle context;
|
||||
LPTSTR SspiModule;
|
||||
rdpSettings* settings;
|
||||
rdpTransport* transport;
|
||||
SecBuffer negoToken;
|
||||
SecBuffer pubKeyAuth;
|
||||
SecBuffer authInfo;
|
||||
|
@ -56,9 +57,9 @@ struct rdp_credssp
|
|||
SecPkgContext_Sizes ContextSizes;
|
||||
};
|
||||
|
||||
FREERDP_API int credssp_authenticate(rdpCredssp* credssp);
|
||||
int credssp_authenticate(rdpCredssp* credssp);
|
||||
|
||||
FREERDP_API rdpCredssp* credssp_new(freerdp* instance, rdpTls* TlsIn, rdpTls* TlsOut, rdpSettings* settings);
|
||||
FREERDP_API void credssp_free(rdpCredssp* credssp);
|
||||
rdpCredssp* credssp_new(freerdp* instance, rdpTransport* transport, rdpSettings* settings);
|
||||
void credssp_free(rdpCredssp* credssp);
|
||||
|
||||
#endif /* FREERDP_SSPI_CREDSSP_H */
|
||||
#endif /* FREERDP_CORE_CREDSSP_H */
|
||||
|
|
|
@ -130,7 +130,7 @@ BOOL transport_connect_nla(rdpTransport* transport)
|
|||
instance = (freerdp*) settings->instance;
|
||||
|
||||
if (transport->credssp == NULL)
|
||||
transport->credssp = credssp_new(instance, transport->TlsIn, transport->TlsOut, settings);
|
||||
transport->credssp = credssp_new(instance, transport, settings);
|
||||
|
||||
if (credssp_authenticate(transport->credssp) < 0)
|
||||
{
|
||||
|
@ -252,7 +252,7 @@ BOOL transport_accept_nla(rdpTransport* transport)
|
|||
instance = (freerdp*) settings->instance;
|
||||
|
||||
if (transport->credssp == NULL)
|
||||
transport->credssp = credssp_new(instance, transport->TlsIn, transport->TlsOut, settings);
|
||||
transport->credssp = credssp_new(instance, transport, settings);
|
||||
|
||||
if (credssp_authenticate(transport->credssp) < 0)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue