#!/bin/sh # Converts a uci config file into an appropriate mosquitto.conf snippet # expected to be used in an init file to generate a config file to run from # Karl Palsson 2012. # Considered to be released into the public domain TCONF=/tmp/mosquitto.generated.$$.conf while getopts "f:" o; do case $o in f) TCONF=$OPTARG ;; esac done if [ -e $TCONF ]; then echo "Odd, same temporary generated config file already existed: $TCONF" exit 1 fi echo "Generating mosquitto config file in $TCONF" NOW=$(date) echo "# mosquitto.conf file generated from UCI config." >>$TCONF echo "# Config snippet generated by $0 on $NOW" >>$TCONF echo "#" >> $TCONF QQ=$(uci -q get mosquitto.mosquitto.log_dest) if [ $? = 0 ]; then for dest in $QQ; do echo "log_dest $dest" >> $TCONF done fi QQ=$(uci -q get mosquitto.mosquitto.no_remote_access) if [ $? = 0 ]; then if [ "$QQ" -eq 1 ]; then echo "bind_address 127.0.0.1" >> $TCONF fi fi HATE_SECTION_COUNT=$(grep config /etc/config/mosquitto | grep bridge | wc -l) if [ $HATE_SECTION_COUNT -gt 0 ]; then for i in $(seq $HATE_SECTION_COUNT -1 1); do NN=$(uci -q get mosquitto.@bridge[-$i].connection) echo "" >> $TCONF echo "# Bridge connection from UCI section" >> $TCONF echo "connection $NN" >> $TCONF ADDR=$(uci -q get mosquitto.@bridge[-$i].address) echo "address $ADDR" >> $TCONF TOPICS=$(uci -q -d';' get mosquitto.@bridge[-$i].topic) # UGLY! just want to split on the ; :( echo $TOPICS | sed "s/^/topic /" | sed "s/;/\ntopic /g" >> $TCONF CS=$(uci -q get mosquitto.@bridge[-$i].cleansession) if [ $? -eq 0 ]; then if [ "$CS" -eq 1 ]; then echo "cleansession true" >> $TCONF fi else echo "cleansession false" >> $TCONF fi TRYPRIV=$(uci -q get mosquitto.@bridge[-$i].tryprivate) if [ $? -eq 0 ]; then if [ "$TRYPRIV" -eq 1 ]; then echo "try_private true" >> $TCONF else echo "try_private false" >> $TCONF fi else # Override default to avoid crashes with 0.15 brokers :( echo "try_private false" >> $TCONF fi CLIENTID=$(uci -q get mosquitto.@bridge[-$i].clientid) if [ $? -eq 0 ]; then echo "clientid $CLIENTID" >> $TCONF fi BRIDGEID=$(uci -q get mosquitto.@bridge[-$i].identity) if [ $? -eq 0 ]; then echo "bridge_identity $BRIDGEID" >> $TCONF fi BRIDGEPSK=$(uci -q get mosquitto.@bridge[-$i].psk) if [ $? -eq 0 ]; then echo "bridge_psk $BRIDGEPSK" >> $TCONF fi BRIDGETLSVERSION=$(uci -q get mosquitto.@bridge[-$i].tls_version) if [ $? -eq 0 ]; then echo "bridge_tls_version $BRIDGETLSVERSION" >> $TCONF fi done fi