summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2023-11-08 03:31:54 +0000
committerLaurent Bercot <ska@appnovation.com>2023-11-08 03:31:54 +0000
commit0cab505405d61922e07096f97159838584d3787d (patch)
treefbec9a665cda492949d5f44b46f7e20e0ef6b483 /src
parent4eda14316376fb1e657ac2da269533e2422d2399 (diff)
downloadtipidee-0cab505405d61922e07096f97159838584d3787d.tar.gz
tipidee-0cab505405d61922e07096f97159838584d3787d.tar.xz
tipidee-0cab505405d61922e07096f97159838584d3787d.zip
Prepare for 0.0.2.0. Add global executable_means_cgi config directive.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src')
-rw-r--r--src/config/defaults.c3
-rw-r--r--src/config/lexparse.c3
-rw-r--r--src/tipideed/tipideed-internal.h4
-rw-r--r--src/tipideed/tipideed.c2
4 files changed, 9 insertions, 3 deletions
diff --git a/src/config/defaults.c b/src/config/defaults.c
index dfc13f2..7dbab8a 100644
--- a/src/config/defaults.c
+++ b/src/config/defaults.c
@@ -23,8 +23,9 @@ static struct defaults_s const defaults[] =
   RECU32("G:cgi_timeout", 0),
   RECU32("G:max_request_body_length", 8192),
   RECU32("G:max_cgi_body_length", 4194304),
-  RECS("G:index-file", "index.html"),
   RECU32("G:logv", TIPIDEE_LOG_DEFAULT),
+  RECU32("G:executable_means_cgi", 0),
+  RECS("G:index-file", "index.html"),
 
   RECS("T:html", "text/html"),
   RECS("T:htm", "text/html"),
diff --git a/src/config/lexparse.c b/src/config/lexparse.c
index afd22a5..799b17f 100644
--- a/src/config/lexparse.c
+++ b/src/config/lexparse.c
@@ -98,6 +98,7 @@ static inline void parse_global (char const *s, size_t const *word, size_t n, md
   static char const *const globalkeys[] =
   {
     "cgi_timeout",
+    "executable_means_cgi",
     "max_cgi_body_length",
     "max_request_body_length",
     "read_timeout",
@@ -536,7 +537,7 @@ static inline char next (buffer *b, mdt const *md)
 
 void conf_lexparse (buffer *b, char const *ifile)
 {
-  static uint8_t const table[4][5] =  /* see PARSING.txt */
+  static uint8_t const table[4][5] =  /* see PARSING-config.txt */
   {
     { 0x04, 0x02, 0x01, 0x80, 0x33 },
     { 0x04, 0x01, 0x01, 0x80, 0x01 },
diff --git a/src/tipideed/tipideed-internal.h b/src/tipideed/tipideed-internal.h
index 1efe291..8b0e114 100644
--- a/src/tipideed/tipideed-internal.h
+++ b/src/tipideed/tipideed-internal.h
@@ -40,6 +40,7 @@ struct global_s
   uint16_t indexn : 4 ;
   uint16_t cont : 2 ;
   uint16_t ssl : 1 ;
+  uint16_t xiscgi : 1 ;
 } ;
 #define GLOBAL_ZERO \
 { \
@@ -62,7 +63,8 @@ struct global_s
   .defaultport = 0, \
   .indexn = 0, \
   .cont = 1, \
-  .ssl = 0 \
+  .ssl = 0, \
+  .xiscgi = 0 \
 }
 
 extern struct global_s g ;
diff --git a/src/tipideed/tipideed.c b/src/tipideed/tipideed.c
index 56ef46c..1c07cf3 100644
--- a/src/tipideed/tipideed.c
+++ b/src/tipideed/tipideed.c
@@ -277,6 +277,7 @@ static inline int serve (tipidee_rql *rql, char const *docroot, char *uribuf, ti
   }
   tipidee_log_debug(g.logv, "serve: docroot ", docroot, " file ", fn, " infopath ", infopath ? infopath : "(none)") ;
 
+  if (g.xiscgi && st.st_mode & S_IXOTH) ra.flags |= TIPIDEE_RA_FLAG_CGI ;
   get_resattr(rql, docroot, fn, &ra) ;
 
   if (!ra.flags & TIPIDEE_RA_FLAG_CGI)
@@ -351,6 +352,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
   g.maxrqbody = get_uint32("G:max_request_body_length") ;
   g.maxcgibody = get_uint32("G:max_cgi_body_length") ;
   g.logv = get_uint32("G:logv") ;
+  g.xiscgi = !!get_uint32("G:executable_means_cgi") ;
   n = tipidee_conf_get_argv(&g.conf, "G:index-file", g.indexnames, 16, &g.indexlen) ;
   if (!n) strerr_dief3x(102, "bad", " config value for ", "G:index_file") ;
   g.indexn = n-1 ;