Options to specify sfreerdp-server cert and private key

This commit is contained in:
Armin Novak 2021-09-06 12:50:08 +02:00 committed by akallabeth
parent ba0da04217
commit 210c56d0fb
1 changed files with 34 additions and 5 deletions

View File

@ -60,6 +60,8 @@ struct server_info
{ {
BOOL test_dump_rfx_realtime; BOOL test_dump_rfx_realtime;
const char* test_pcap_file; const char* test_pcap_file;
const char* cert;
const char* key;
}; };
static void test_peer_context_free(freerdp_peer* client, rdpContext* ctx) static void test_peer_context_free(freerdp_peer* client, rdpContext* ctx)
@ -877,26 +879,38 @@ static BOOL tf_peer_suppress_output(rdpContext* context, BYTE allow, const RECTA
static DWORD WINAPI test_peer_mainloop(LPVOID arg) static DWORD WINAPI test_peer_mainloop(LPVOID arg)
{ {
BOOL rc;
DWORD error = CHANNEL_RC_OK; DWORD error = CHANNEL_RC_OK;
HANDLE handles[32] = { 0 }; HANDLE handles[32] = { 0 };
DWORD count; DWORD count;
DWORD status; DWORD status;
testPeerContext* context; testPeerContext* context;
struct server_info* info;
freerdp_peer* client = (freerdp_peer*)arg; freerdp_peer* client = (freerdp_peer*)arg;
const char* key = "server.key";
const char* cert = "server.crt";
WINPR_ASSERT(client); WINPR_ASSERT(client);
info = client->ContextExtra;
WINPR_ASSERT(info);
if (!test_peer_init(client)) if (!test_peer_init(client))
{ {
freerdp_peer_free(client); freerdp_peer_free(client);
return 0; return 0;
} }
if (info->key)
key = info->key;
if (info->cert)
cert = info->cert;
/* Initialize the real server settings here */ /* Initialize the real server settings here */
WINPR_ASSERT(client->settings); WINPR_ASSERT(client->settings);
if (!freerdp_settings_set_string(client->settings, FreeRDP_CertificateFile, "server.crt") || if (!freerdp_settings_set_string(client->settings, FreeRDP_CertificateFile, cert) ||
!freerdp_settings_set_string(client->settings, FreeRDP_PrivateKeyFile, "server.key") || !freerdp_settings_set_string(client->settings, FreeRDP_PrivateKeyFile, key) ||
!freerdp_settings_set_string(client->settings, FreeRDP_RdpKeyFile, "server.key")) !freerdp_settings_set_string(client->settings, FreeRDP_RdpKeyFile, key))
{ {
WLog_ERR(TAG, "Memory allocation failed (strdup)"); WLog_ERR(TAG, "Memory allocation failed (strdup)");
freerdp_peer_free(client); freerdp_peer_free(client);
@ -931,7 +945,8 @@ static DWORD WINAPI test_peer_mainloop(LPVOID arg)
client->settings->MultifragMaxRequestSize = 0xFFFFFF; /* FIXME */ client->settings->MultifragMaxRequestSize = 0xFFFFFF; /* FIXME */
WINPR_ASSERT(client->Initialize); WINPR_ASSERT(client->Initialize);
client->Initialize(client); rc = client->Initialize(client);
WINPR_ASSERT(rc);
context = (testPeerContext*)client->context; context = (testPeerContext*)client->context;
WINPR_ASSERT(context); WINPR_ASSERT(context);
@ -1075,7 +1090,9 @@ static const struct
const char sfast[7]; const char sfast[7];
const char sport[7]; const char sport[7];
const char slocal_only[13]; const char slocal_only[13];
} options = { "--pcap=", "--fast", "--port=", "--local-only" }; const char scert[7];
const char skey[6];
} options = { "--pcap=", "--fast", "--port=", "--local-only", "--cert=", "--key=" };
static WINPR_NORETURN(void usage(const char* app, const char* invalid)) static WINPR_NORETURN(void usage(const char* app, const char* invalid))
{ {
@ -1129,6 +1146,18 @@ int main(int argc, char* argv[])
if (!winpr_PathFileExists(info.test_pcap_file)) if (!winpr_PathFileExists(info.test_pcap_file))
usage(app, arg); usage(app, arg);
} }
else if (strncmp(arg, options.scert, sizeof(options.scert)) == 0)
{
info.cert = &arg[sizeof(options.scert)];
if (!winpr_PathFileExists(info.cert))
usage(app, arg);
}
else if (strncmp(arg, options.skey, sizeof(options.skey)) == 0)
{
info.key = &arg[sizeof(options.skey)];
if (!winpr_PathFileExists(info.key))
usage(app, arg);
}
else else
usage(app, arg); usage(app, arg);
} }