Enable VeNCrypt auth & encryption
parent
e6b1ca8044
commit
8491d6c73c
60
src/main.c
60
src/main.c
|
@ -23,6 +23,7 @@
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <neatvnc.h>
|
#include <neatvnc.h>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include <libdrm/drm_fourcc.h>
|
#include <libdrm/drm_fourcc.h>
|
||||||
|
@ -403,6 +404,19 @@ static void on_key_event(struct nvnc_client* client, uint32_t symbol,
|
||||||
keyboard_feed(&wayvnc->keyboard_backend, symbol, is_pressed);
|
keyboard_feed(&wayvnc->keyboard_backend, symbol, is_pressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool on_auth(const char* username, const char* password, void* ud)
|
||||||
|
{
|
||||||
|
struct wayvnc* self = ud;
|
||||||
|
|
||||||
|
if (strcmp(username, self->cfg.username) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (strcmp(password, self->cfg.password) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int init_nvnc(struct wayvnc* self, const char* addr, uint16_t port)
|
int init_nvnc(struct wayvnc* self, const char* addr, uint16_t port)
|
||||||
{
|
{
|
||||||
self->nvnc = nvnc_open(addr, port);
|
self->nvnc = nvnc_open(addr, port);
|
||||||
|
@ -421,6 +435,10 @@ int init_nvnc(struct wayvnc* self, const char* addr, uint16_t port)
|
||||||
self->selected_output->height,
|
self->selected_output->height,
|
||||||
format);
|
format);
|
||||||
|
|
||||||
|
if (self->cfg.enable_auth)
|
||||||
|
nvnc_enable_auth(self->nvnc, self->cfg.private_key_file,
|
||||||
|
self->cfg.certificate_file, on_auth, self);
|
||||||
|
|
||||||
if (self->pointer_manager)
|
if (self->pointer_manager)
|
||||||
nvnc_set_pointer_fn(self->nvnc, on_pointer_event);
|
nvnc_set_pointer_fn(self->nvnc, on_pointer_event);
|
||||||
|
|
||||||
|
@ -565,6 +583,42 @@ int wayvnc_usage(FILE* stream, int rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int check_cfg_sanity(struct cfg* cfg)
|
||||||
|
{
|
||||||
|
if (cfg->enable_auth) {
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (!nvnc_has_auth()) {
|
||||||
|
log_error("Authentication can't be enabled because it was not selected during build\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg->certificate_file) {
|
||||||
|
log_error("Authentication enabled, but missing certificate_file\n");
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg->private_key_file) {
|
||||||
|
log_error("Authentication enabled, but missing private_key_file\n");
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg->username) {
|
||||||
|
log_error("Authentication enabled, but missing username\n");
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg->password) {
|
||||||
|
log_error("Authentication enabled, but missing password\n");
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
struct wayvnc self = { 0 };
|
struct wayvnc self = { 0 };
|
||||||
|
@ -632,8 +686,9 @@ int main(int argc, char* argv[])
|
||||||
if (n_args >= 2)
|
if (n_args >= 2)
|
||||||
port = atoi(argv[optind + 1]);
|
port = atoi(argv[optind + 1]);
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
int cfg_rc = cfg_load(&self.cfg, cfg_file);
|
int cfg_rc = cfg_load(&self.cfg, cfg_file);
|
||||||
if (cfg_file && cfg_rc != 0) {
|
if (cfg_rc != 0 && (cfg_file || errno != EEXIST)) {
|
||||||
if (cfg_rc > 0) {
|
if (cfg_rc > 0) {
|
||||||
log_error("Failed to load config. Error on line %d\n",
|
log_error("Failed to load config. Error on line %d\n",
|
||||||
cfg_rc);
|
cfg_rc);
|
||||||
|
@ -644,6 +699,9 @@ int main(int argc, char* argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (check_cfg_sanity(&self.cfg) < 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (cfg_rc == 0) {
|
if (cfg_rc == 0) {
|
||||||
if (!address) address = self.cfg.address;
|
if (!address) address = self.cfg.address;
|
||||||
if (!port) port = self.cfg.port;
|
if (!port) port = self.cfg.port;
|
||||||
|
|
Loading…
Reference in New Issue