nginx-util: allow comments in begin of regex
authorPeter Stadler <peter.stadler@student.uibk.ac.at>
Thu, 23 Jan 2020 14:42:03 +0000 (15:42 +0100)
committerPeter Stadler <peter.stadler@student.uibk.ac.at>
Mon, 3 Feb 2020 16:18:09 +0000 (17:18 +0100)
Signed-off-by: Peter Stadler <peter.stadler@student.uibk.ac.at>
net/nginx-util/Makefile
net/nginx-util/src/nginx-ssl-util.cpp

index 289649fdfeea64bd6825fb15c4bba6910f5dcf0c..2224336bcf613efe7d00ae84cc302ee935d02d29 100644 (file)
@@ -1,8 +1,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nginx-util
-PKG_VERSION:=1.1
-PKG_RELEASE:=2
+PKG_VERSION:=1.2
+PKG_RELEASE:=1
 
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
@@ -23,17 +23,17 @@ define Package/nginx-ssl-util/default
   PROVIDES:=nginx-ssl-util
 endef
 
-define Package/nginx-ssl-util-nopcre
-  $(Package/nginx-ssl-util/default)
-  TITLE+= (using <regex>)
-endef
-
 define Package/nginx-ssl-util
   $(Package/nginx-ssl-util/default)
   TITLE+= (using PCRE)
   DEPENDS+= +libpcre
 endef
 
+define Package/nginx-ssl-util-nopcre
+  $(Package/nginx-ssl-util/default)
+  TITLE+= (using <regex>)
+endef
+
 define Package/nginx-util/description
   Utility that builds dynamically LAN listen directives for Nginx.
 endef
index fcd81a405ee1f47a92e830101f237b7d60735f53..7b268cbd437585ea1d6861cd72591bc08392c57c 100644 (file)
@@ -106,7 +106,7 @@ constexpr auto _begin = _Line{
 
     [](const std::string & /*param*/, const std::string & /*begin*/)
         -> std::string
-    { return R"([{;](\s*))"; }
+    { return R"([{;](?:\s*#[^\n]*(?=\n))*(\s*))"; }
 };
 
 
@@ -139,7 +139,7 @@ constexpr auto _end = _Line{
 
     [](const std::string & /*param*/, const std::string & /*begin*/)
         -> std::string
-    { return std::string{R"(\s*;)"}; }
+    { return std::string{R"(\s*;(?:[\t ]*#[^\n]*)?)"}; }
 };
 
 
@@ -256,7 +256,7 @@ auto get_if_missed(const std::string & conf, const Line & LINE,
          rgx::regex_search(pos, conf.end(), match, LINE.RGX());
          pos += match.position(0) + match.length(0))
     {
-        const std::string_view value = match.str(match.size() - 1);
+        const std::string value = match.str(match.size() - 1);
 
         if (value==val || value=="'"+val+"'" || value=='"'+val+'"') {
             return "";
@@ -278,13 +278,12 @@ auto delete_if(const std::string & conf, const rgx::regex & rgx,
          rgx::regex_search(pos, conf.end(), match, rgx);
          pos += match.position(0) + match.length(0))
     {
-        const std::string_view value = match.str(match.size() - 1);
-        
-        auto skip = 1; // one for delimiter!
+        const std::string value = match.str(match.size() - 1);
+        auto len = match.position(1);
         if (compare && value!=val && value!="'"+val+"'" && value!='"'+val+'"') {
-            skip = match.length(0);
+            len = match.position(0) + match.length(0);
         }
-        ret.append(pos, pos + match.position(0) + skip);
+        ret.append(pos, pos + len);
     }
 
     ret.append(pos, conf.end());
@@ -559,7 +558,7 @@ void del_ssl_directives_from(const std::string & name, const bool isdefault)
             get_if_missed(conf, NGX_INCLUDE_LAN_LISTEN, "", indent);
 
         if (adds.length() > 0) {
-            pos += match.position(0) + 1;
+            pos += match.position(1);
 
             conf = std::string(const_conf.begin(), pos) + adds
                     + std::string(pos, const_conf.end());
@@ -609,10 +608,9 @@ void del_ssl(const std::string & name)
 
             auto line = const_conf.substr(prev, curr-prev+1);
 
-            line = delete_if(line, CRON_CMD.RGX(), std::string{name}, true);
-
-            if (line.substr(0,line.size()-1)==CRON_INTERVAL) { changed = true; }
-            else { conf += line; }
+            if (line==delete_if(line,CRON_CMD.RGX(),std::string{name},true)) {
+                conf += line;
+            } else { changed = true; }
 
             prev = curr + 1;
         }