From d82d729b901e7cbfa70eec900aa2dfbc53d9adcb Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Mon, 12 Dec 2022 11:59:23 -0800 Subject: [PATCH] Add configuration for MQTT protocol version, username, password Default MQTT version is 5 Default username, password are block. Up to 255 chars each. --- src/sbbs3/mqtt.c | 9 ++++++++- src/sbbs3/scfgdefs.h | 3 +++ src/sbbs3/scfglib1.c | 3 +++ src/sbbs3/scfgsave.c | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/sbbs3/mqtt.c b/src/sbbs3/mqtt.c index 6ca2e8ca19..cebbcf23e4 100644 --- a/src/sbbs3/mqtt.c +++ b/src/sbbs3/mqtt.c @@ -242,7 +242,14 @@ int mqtt_connect(struct mqtt* mqtt, const char* bind_address) return MQTT_FAILURE; #ifdef USE_MOSQUITTO - mosquitto_int_option(mqtt->handle, MOSQ_OPT_PROTOCOL_VERSION, MQTT_PROTOCOL_V5); + char* username = mqtt->cfg->mqtt.username; + char* password = mqtt->cfg->mqtt.password; + if(*username == '\0') + username = NULL; + if(*password == '\0') + password = NULL; + mosquitto_int_option(mqtt->handle, MOSQ_OPT_PROTOCOL_VERSION, mqtt->cfg->mqtt.protocol_version); + mosquitto_username_pw_set(mqtt->handle, username, password); return mosquitto_connect_bind(mqtt->handle, mqtt->cfg->mqtt.broker_addr, mqtt->cfg->mqtt.broker_port, diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index 8e52cf0ff0..2a8c0592ee 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -367,8 +367,11 @@ struct mqtt_cfg { BOOL enabled; char broker_addr[128]; uint16_t broker_port; + char username[256]; + char password[256]; int keepalive; int qos; + int protocol_version; }; typedef struct diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 8aa4803834..6ec35eb96c 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -204,10 +204,13 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen) /*****************/ section = iniGetParsedSection(sections, "mqtt", /* cut: */TRUE); cfg->mqtt.enabled = iniGetBool(section, NULL, "enabled", FALSE); + SAFECOPY(cfg->mqtt.username, iniGetString(section, NULL, "username", "", value)); + SAFECOPY(cfg->mqtt.password, iniGetString(section, NULL, "password", "", value)); SAFECOPY(cfg->mqtt.broker_addr, iniGetString(section, NULL, "broker_addr", "127.0.0.1", value)); cfg->mqtt.broker_port = iniGetUInt16(section, NULL, "broker_port", IPPORT_MQTT); cfg->mqtt.keepalive = iniGetInteger(section, NULL, "keepalive", 10); cfg->mqtt.qos = iniGetInteger(section, NULL, "qos", 0); + cfg->mqtt.protocol_version = iniGetInteger(section, NULL, "protocol_version", 5); /***********/ /* Modules */ diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c index 58379747ad..8a4bf23c98 100644 --- a/src/sbbs3/scfgsave.c +++ b/src/sbbs3/scfgsave.c @@ -212,8 +212,11 @@ BOOL write_main_cfg(scfg_t* cfg, int backup_level) iniSetBool(&ini, name, "enabled", cfg->mqtt.enabled, NULL); iniSetString(&ini, name, "broker_addr", cfg->mqtt.broker_addr, NULL); iniSetUInt16(&ini, name, "broker_port", cfg->mqtt.broker_port, NULL); + iniSetInteger(&ini, name, "protocol_version", cfg->mqtt.protocol_version, NULL); iniSetInteger(&ini, name, "keepalive", cfg->mqtt.keepalive, NULL); iniSetInteger(&ini, name, "qos", cfg->mqtt.qos, NULL); + iniSetString(&ini, name, "username", cfg->mqtt.username, NULL); + iniSetString(&ini, name, "password", cfg->mqtt.password, NULL); } { -- GitLab