diff options
Diffstat (limited to 'net/nginx-util/src/nginx-util.cpp')
| -rw-r--r-- | net/nginx-util/src/nginx-util.cpp | 97 |
1 files changed, 62 insertions, 35 deletions
diff --git a/net/nginx-util/src/nginx-util.cpp b/net/nginx-util/src/nginx-util.cpp index acce1e723..02aa7013a 100644 --- a/net/nginx-util/src/nginx-util.cpp +++ b/net/nginx-util/src/nginx-util.cpp @@ -1,9 +1,9 @@ -// This file is included in nginx-ssl-util.cpp, which defines NGINX_OPENSSL. -#ifndef __NGINX_UTIL_C -#define __NGINX_UTIL_C - #include "nginx-util.hpp" +#ifndef NO_SSL +#include "nginx-ssl-util.hpp" +#endif + void create_lan_listen() { @@ -13,9 +13,8 @@ void create_lan_listen() std::string ssl_listen = listen; std::string ssl_listen_default = listen; -#ifndef NO_UBUS auto add_listen = [&listen, &listen_default -#ifdef NGINX_OPENSSL +#ifndef NO_SSL ,&ssl_listen, &ssl_listen_default #endif ] @@ -26,36 +25,49 @@ void create_lan_listen() const std::string val = pre + ip + suf; listen += "\tlisten " + val + ":80;\n"; listen_default += "\tlisten " + val + ":80 default_server;\n"; -#ifdef NGINX_OPENSSL +#ifndef NO_SSL ssl_listen += "\tlisten " + val + ":443 ssl;\n"; ssl_listen_default += "\tlisten " + val + ":443 ssl default_server;\n"; #endif }; - auto loopback_status = ubus::call("network.interface.loopback", "status"); +#ifndef NO_UBUS + try { + auto loopback_status=ubus::call("network.interface.loopback", "status"); - for (auto ip : loopback_status.filter("ipv4-address", "", "address")) { - add_listen("", static_cast<const char *>(blobmsg_data(ip)), ""); - } + for (auto ip : loopback_status.filter("ipv4-address", "", "address")) { + add_listen("", static_cast<const char *>(blobmsg_data(ip)), ""); + } - for (auto ip : loopback_status.filter("ipv6-address", "", "address")) { - add_listen("[", static_cast<const char *>(blobmsg_data(ip)), "]"); - } + for (auto ip : loopback_status.filter("ipv6-address", "", "address")) { + add_listen("[", static_cast<const char *>(blobmsg_data(ip)), "]"); + } + } catch (const std::runtime_error &) { /* do nothing about it */ } - auto lan_status = ubus::call("network.interface.lan", "status"); + try { + auto lan_status = ubus::call("network.interface.lan", "status"); - for (auto ip : lan_status.filter("ipv4-address", "", "address")) { - add_listen("", static_cast<const char *>(blobmsg_data(ip)), ""); - } + for (auto ip : lan_status.filter("ipv4-address", "", "address")) { + add_listen("", static_cast<const char *>(blobmsg_data(ip)), ""); + } - for (auto ip : lan_status.filter("ipv6-address", "", "address")) { - add_listen("[", static_cast<const char *>(blobmsg_data(ip)), "]"); - } + for (auto ip : lan_status.filter("ipv6-address", "", "address")) { + add_listen("[", static_cast<const char *>(blobmsg_data(ip)), "]"); + } + + for (auto ip : lan_status.filter("ipv6-prefix-assignment", "", + "local-address", "address")) + { + add_listen("[", static_cast<const char *>(blobmsg_data(ip)), "]"); + } + } catch (const std::runtime_error &) { /* do nothing about it */ } +#else + add_listen("", "127.0.0.1", ""); #endif write_file(LAN_LISTEN, listen); write_file(LAN_LISTEN_DEFAULT, listen_default); -#ifdef NGINX_OPENSSL +#ifndef NO_SSL write_file(LAN_SSL_LISTEN, ssl_listen); write_file(LAN_SSL_LISTEN_DEFAULT, ssl_listen_default); #endif @@ -66,23 +78,23 @@ void init_lan() { std::exception_ptr ex; -#ifdef NGINX_OPENSSL - auto thrd = std::thread([&ex]{ - try { add_ssl_if_needed(std::string{LAN_NAME}); } +#ifndef NO_SSL + auto thrd = std::thread([]{ //&ex + try { add_ssl_if_needed(std::string{LAN_NAME}); } catch (...) { - std::cerr<<"init_lan error: cannot add SSL for "<<LAN_NAME<<std::endl; - ex = std::current_exception(); + std::cerr<<"init_lan notice: no server named "<<LAN_NAME<<std::endl; + // not: ex = std::current_exception(); } }); #endif try { create_lan_listen(); } catch (...) { - std::cerr<<"init_lan error: cannot create LAN listen directives"<<std::endl; + std::cerr<<"init_lan error: cannot create LAN listen files"<<std::endl; ex = std::current_exception(); } -#ifdef NGINX_OPENSSL +#ifndef NO_SSL thrd.join(); #endif @@ -96,7 +108,7 @@ void get_env() std::cout<<"CONF_DIR="<<"'"<<CONF_DIR<<"'"<<std::endl; std::cout<<"LAN_NAME="<<"'"<<LAN_NAME<<"'"<<std::endl; std::cout<<"LAN_LISTEN="<<"'"<<LAN_LISTEN<<"'"<<std::endl; -#ifdef NGINX_OPENSSL +#ifndef NO_SSL std::cout<<"LAN_SSL_LISTEN="<<"'"<<LAN_SSL_LISTEN<<"'"<<std::endl; std::cout<<"SSL_SESSION_CACHE_ARG="<<"'"<<SSL_SESSION_CACHE_ARG(LAN_NAME)<< "'"<<std::endl; @@ -114,7 +126,7 @@ auto main(int argc, char * argv[]) -> int auto cmds = std::array{ std::array<std::string_view, 2>{"init_lan", ""}, std::array<std::string_view, 2>{"get_env", ""}, -#ifdef NGINX_OPENSSL +#ifndef NO_SSL std::array<std::string_view, 2>{ADD_SSL_FCT, " server_name" }, std::array<std::string_view, 2>{"del_ssl", " server_name" }, #endif @@ -126,7 +138,7 @@ auto main(int argc, char * argv[]) -> int else if (argc==2 && args[1]==cmds[1][0]) { get_env(); } -#ifdef NGINX_OPENSSL +#ifndef NO_SSL else if (argc==3 && args[1]==cmds[2][0]) { add_ssl_if_needed(std::string{args[2]});} @@ -138,13 +150,30 @@ auto main(int argc, char * argv[]) -> int #endif else { + std::cerr<<"Tool for creating Nginx configuration files ("; +#ifdef VERSION + std::cerr<<"version "<<VERSION<<" "; +#endif + std::cerr<<"with "; +#ifndef NO_UBUS + std::cerr<<"ubus, "; +#endif +#ifndef NO_SSL + std::cerr<<"libopenssl, "; +#ifdef NO_PCRE + std::cerr<<"std::regex, "; +#else + std::cerr<<"PCRE, "; +#endif +#endif + std::cerr<<"pthread and libstdcpp)."<<std::endl; + auto usage = std::string{"usage: "} + *argv + " ["; for (auto cmd : cmds) { usage += std::string{cmd[0]}; usage += std::string{cmd[1]} + "|"; } usage[usage.size()-1] = ']'; - std::cerr<<usage<<std::endl; throw std::runtime_error("main error: argument not recognized"); @@ -161,5 +190,3 @@ auto main(int argc, char * argv[]) -> int return 1; } - -#endif |
