summaryrefslogtreecommitdiff
path: root/net/nginx-util/src/nginx-util.cpp
diff options
context:
space:
mode:
authorPeter Stadler <peter.stadler@student.uibk.ac.at>2020-02-04 13:10:00 +0100
committerPeter Stadler <peter.stadler@student.uibk.ac.at>2020-02-09 13:02:54 +0100
commite247efa254599f0a2cf9178b2ef16b5ac6cc8fb8 (patch)
tree6df72a3c49077843ae491d2619df390c8fd9ea59 /net/nginx-util/src/nginx-util.cpp
parentfed1b3b11bf9361dbbd158a1018c701d8180e49b (diff)
nginx-util: add tests, clean up and fix issues
Add tests for nginx-ssl-util and nginx-ssl-util-nopcre using (fake)chroot. Clean the code up making nginx-ssl-util a header file. Both changes are for better (future) code quality only. There are minor functional improvements: * fix compiler error of gcc7 by using std=c++17 * fix error if there is no lan/loopback interface * notice instead of error message if there is no default server * add ipv6-prefix-assignment.*.local-address.address for LAN * add CONFLICTS in Makefile for choosing the right version * add cast to release of unique_ptr to avoid warning * add version message to help message Signed-off-by: Peter Stadler <peter.stadler@student.uibk.ac.at>
Diffstat (limited to 'net/nginx-util/src/nginx-util.cpp')
-rw-r--r--net/nginx-util/src/nginx-util.cpp97
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