Commit Diff


commit - 568419b2c1f71620095acd9bf3be6aaa2bbe43ee
commit + ae6870fa3bf25561a3f6bd8465ba86307af5d5bb
blob - e4a5ff4006151dfd6ad11756657c4811ac086b7c
blob + d0d7cba7892bd86a5907b4ad29568b52e794ccaa
--- .gitignore
+++ .gitignore
@@ -31,3 +31,6 @@ regress/puny-test
 regress/*.o
 regress/gg
 regress/gmid.pid
+
+site/gmid.1.html
+site/gmid.1.txt
blob - /dev/null
blob + 77c7b22fb5ba30873a253a19d9c7de114d68b823 (mode 644)
--- /dev/null
+++ site/Makefile
@@ -0,0 +1,9 @@
+.PHONY: all
+
+all: gmid.1.html gmid.1.txt
+
+gmid.1.html: ../gmid.1
+	./mdoc2html.sh $? $@
+
+gmid.1.txt: ../gmid.1
+	MANWIDTH=72 man -Tutf8 -l $? | col -b > $@
blob - /dev/null
blob + 83650fee1a8ea3a4f9ad4f11608aaa3d644b3bf3 (mode 644)
--- /dev/null
+++ site/README.md
@@ -0,0 +1,3 @@
+# gmid website/capsule
+
+These are the sources for the gmid website and Gemini capsule.
blob - /dev/null
blob + 4f453a063285875b311a99210d6c815f88c6fe10 (mode 644)
--- /dev/null
+++ site/contrib.gmi
@@ -0,0 +1,66 @@
+=> / Home
+=> /gmid.1.txt docs
+
+# Contrib
+
+This directory is for additional contributed files which may be useful.
+
+## Dockerfile
+
+=> https://git.omarpolo.com/gmid/tree/contrib/Dockerfile contrib/Dockerfile
+
+A sample Dockerfile.  The resulting image is a classic alpine linux image with a statically linked gmid installed as /bin/gmid.
+To build the image:
+
+```instructions to build the image
+# docker build -f contrib/Dockerfile -t gmid .
+```
+and then run it with something along the lines of:
+```instruction to run the image
+# docker run --rm -it -p 1965:1965      \
+        -v gmid.conf:/etc/gmid.conf:ro  \
+        -v path/to/keys:/tls:ro         \
+        -v /var/gemini:/var/gemini:ro   \
+        gmid -c /etc/gmid.conf
+```
+
+## OpenBSD rc file
+
+=> https://git.omarpolo.com/gmid/tree/contrib/gmid contrib/gmid
+
+contrib/gmid is a sample service file for OpenBSD rc(8).  To install it:
+```command to install the rc file
+# cp contrib/gmid /etc/rc.d
+```
+then the usual ‘rcctl [start|stop|enable|restart] gmid’ are available.
+
+## Systemd unit file
+
+=> https://git.omarpolo.com/gmid/tree/contrib/gmid.service gmid.service
+
+A simple service file for systemd.  To install it
+```instructions to install the system file
+# cp contrib/gmid.service /lib/systemd/system/gmid.service
+```
+then the usual ‘systemctl [status|start|enable|stop] gmid’ commands can be used to manage the server.
+
+Some things to keep in mind:
+* the ExecStart path depends on the installation
+* decomment “User” and “Group” to start gmid without root priviledges.  It’s not needed, since gmid can lower its privileges, but may come in handy.
+
+## Vim syntax files
+
+=> https://git.omarpolo.com/gmid/tree/contrib/vim contrib/vim
+
+contrib/vim contains a syntax highlighting for vim.  To install it, just copy the files to ~/.vim or to /usr/share/vim/vimfiles, e.g.:
+```install the vim syntax highlight in your home
+$ mkdir -p ~/.vim
+$ cp -R contrib/vim/* ~/.vim/
+```
+
+To enable Syntastic checker, add to your vimrc:
+```
+let g:syntastic_gmid_checkers = ['gmid']
+```
+
+=> vim-screenshot.png Screenshot of vim editing gmid.conf
blob - /dev/null
blob + c9b5c2f01d0721ee1db02c32bb82c091593e53ae (mode 644)
--- /dev/null
+++ site/contrib.html
@@ -0,0 +1,210 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <title>gmid | contrib</title>
+    <meta charset="utf8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style>
+    body {
+      font-family: monospace;
+      font-size: 14px;
+      max-width: 780px;
+      margin: 0 auto;
+      padding: 20px;
+      padding-bottom: 80px;
+    }
+
+    h1::before {
+      content: "# ";
+    }
+
+    h2 {
+      margin-top: 40px;
+    }
+
+    h2::before {
+      content: "## ";
+    }
+
+    h3::before {
+      content: "### ";
+    }
+
+    blockquote {
+      margin: 0;
+      padding: 0;
+    }
+
+    blockquote::before {
+      content: "> ";
+    }
+
+    blockquote p {
+      font-style: italic;
+      display: inline;
+    }
+
+    p.link::before {
+      content: "→ ";
+    }
+
+    strong::before { content: "*" }
+    strong::after  { content: "*" }
+
+    hr {
+      border: 0;
+      height: 1px;
+      background-color: #222;
+      width: 100%;
+      display: block;
+      margin: 2em auto;
+    }
+
+    img {
+      border-radius: 5px;
+    }
+
+    pre {
+      overflow: auto;
+      padding: 1rem;
+      background-color: #f0f0f0;
+      border-radius: 3px;
+    }
+
+    pre.banner {
+      display: flex;
+      flex-direction: row;
+      justify-content: center;
+    }
+
+    code, kbd {
+      color: #9d109d;
+    }
+
+    img {
+      display: block;
+      margin: 0 auto;
+      max-width: 100%;
+    }
+
+    @media (prefers-color-scheme: dark) {
+      body {
+        background-color: #222;
+        color: white;
+      }
+
+      a {
+        color: aqua;
+      }
+
+      hr {
+        background-color: #ddd;
+      }
+
+      pre {
+        background-color: #353535;
+      }
+
+      code, kbd {
+        color: #ff4cff;
+      }
+    }
+
+    @media (max-width: 400px) {
+      pre.banner { font-size: 9px; }
+    }
+
+    @media (max-width: 500px) {
+      pre.banner { font-size: 10px; }
+    }
+    </style>
+  </head>
+  <body>
+    <header>
+      <nav>
+        <a href="/">Home</a> | contrib | <a href="gmid.1.html">docs</a>
+      </nav>
+    </header>
+    <h1>contrib</h1>
+    <p>
+      This directory is for additional contributed files which may be
+      useful.
+    </p>
+    <p>Contents:</p>
+    <ul>
+      <li><a href="#dockerfile">Dockerfile</a></li>
+      <li><a href="#openbsd-rc">OpenBSD rc file</a></li>
+      <li><a href="#systemd-unit-file">Systemd unit file</a></li>
+      <li><a href="#vim-syntax-files">Vim syntax files</a></li>
+    </ul>
+    <hr />
+    <h2 id="dockerfile">Dockerfile</h2>
+    <p>
+      <a href="https://git.omarpolo.com/gmid/tree/contrib/Dockerfile">
+        <code>contrib/Dockerfile</code></a>
+      is a simple Dockerfile.  The resulting image is a classic alpine
+      linux image with a statically linked gmid installed as
+      <code>/bin/gmid</code>.
+    </p>
+    <p>To build the image:</p>
+    <pre># docker build -f contrib/Dockerfile -t gmid .</pre>
+    <p>and then run it with something along the lines of:</p>
+    <pre># docker run --rm -it -p 1965:1965      \
+        -v gmid.conf:/etc/gmid.conf:ro  \
+        -v path/to/keys:/tls:ro         \
+        -v /var/gemini:/var/gemini:ro   \
+        gmid -c /etc/gmid.conf</pre>
+    <h2 id="openbsd-rc">OpenBSD rc file</h2>
+    <p>
+      <a href="https://git.omarpolo.com/gmid/tree/contrib/gmid">contrib/gmid</a>
+      is a sample service file for OpenBSD <code>rc(8)</code>.
+      To install it:
+    </p>
+    <pre># cp contrib/gmid /etc/rc.d</pre>
+    <p>
+      then the usual
+      <code>rcctl [start|stop|enable|restart] gmid</code>
+      are available.
+    </p>
+    <h2 id="systemd-unit-file">Systemd unit file</h2>
+    <p>
+      <a href="https://git.omarpolo.com/gmid/tree/contrib/gmid.service">
+        <code>contrib/gmid.service</code></a>
+      is a simple service file for
+      systemd.  To install it:
+    </p>
+    <pre># cp contrib/gmid.service /lib/systemd/system/gmid.service</pre>
+    <p>
+      then the usual
+      <code>systemctl [status|start|enable|stop] gmid</code>
+      commands can be used to manage the server.
+    </p>
+    <p>Some things to keep in mind:</p>
+    <ul>
+      <li>
+        the <code>ExecStart</code> path depends on the installation.
+      </li>
+      <li>
+        decomment <code>User</code> and <code>Group</code> to start
+        gmid without root priviledges.  It's not needed, since gmid
+        can lower its privileges, but may come in handy.
+      </li>
+    </ul>
+    <h2 id="vim-syntax-files">Vim syntax files</h2>
+    <p>
+      <a href="https://git.omarpolo.com/gmid/tree/contrib/vim">
+        <code>contrib/vim</code></a>
+      contains a syntax highlighting for vim.  To install it, just
+      copy the files to <code>~/.vim</code>
+      or <code>/usr/share/vim/vimfiles</code>, e.g.
+    </p>
+    <pre>$ mkdir -p ~/.vim
+$ cp -R contrib/vim/* ~/.vim/</pre>
+    <p>To enable Syntastic checker, add to your vimrc:</p>
+    <pre>let g:syntastic_gmid_checkers = ['gmid']</pre>
+    <p>The end result is something like this:</p>
+    <a href="vim-screenshot.png">
+      <img src="vim-screenshot.png" alt="Screenshot of vim editing gmid.conf with syntax highlighting" />
+    </a>
+  </body>
+</html>
blob - /dev/null
blob + bb7efef5c92cd99b8e422f5257857fe5bd168300 (mode 644)
--- /dev/null
+++ site/index.gmi
@@ -0,0 +1,165 @@
+=> contrib.gmi contrib
+=> /gmid.1.txt docs
+
+# gmid
+
+> A Gemini server
+
+## Features
+
+* sandboxed by default on OpenBSD, FreeBSD and Linux
+* able to reload the configuration on-the-fly without loosing connections
+* punycode and IRI support
+* CGI and FastCGI support
+* virtual hosts and per-location rules
+* low memory footprint
+* event-based asynchronous I/O model
+* rich configuration file
+
+=> gmid.1.txt Read the manpage.
+
+## Install
+
+Some distros provide a package — thanks to the maintainers!
+
+=> https://repology.org/project/gmid/versions	[https] Repology: packaging status for gmid
+
+Source code and precompiled binaries for linux are available:
+
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid-1.7.4.tar.gz	gmid-1.7.4.tar.gz
+
+=> https://git.omarpolo.com/gmid/		git repository
+=> gemini://git.omarpolo.com/gmid.git/		git repository via Gemini
+=> https://github.com/omar-polo/gmid		GitHub mirror
+
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid.linux.aarch64		gmid.linux.aarch64
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid.linux.amd64		gmid.linux.amd64
+
+When in doubt, compile from source: it’s easy and takes less than a minute on a raspberry pi 3.  The dependencies are:
+
+* libevent
+* OpenSSL/LibreSSL
+* libtls (from either LibreSSL or LibreTLS)
+* yacc or GNU bison
+
+Once all the dependencies are installed, building is as easy as:
+
+```Example of how to compile from source
+$ curl -LO https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid-1.7.4.tar.gz
+$ tar xzvf gmid-1.7.4.tar.gz
+$ cd gmid-1.7.4
+$ ./configure
+$ make
+$ sudo make install # eventually
+```
+
+A SHA256 file is available.  However, that only checks for accidental corruption: you can use signify (SHA256.sig and the public key gmid-1.7.pub) or GPG.  The hash of the signify public key is also included in the SHA256 file and thus signed with my GPG.  The signify public key for the next release ‘gmid-1.8.pub’ is also included.
+
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256	SHA256
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256	SHA256.gpg
+=> https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256.sig	SHA256.sig
+
+To verify the signatures with signify(1)
+
+```Example of how to verify the signature with signify
+$ signify -C -p gmid-1.7.pub -x SHA256.sig
+Signature Verified
+gmid-1.7.pub: OK
+gmid-1.7.4.tar.gz: OK
+gmid-1.8.pub: OK
+gmid.linux.aarch64: OK
+gmid.linux.amd64: OK
+```
+
+## Change log for the last versions
+
+
+1.7.4 “Space-dye Vest” fourth bugfix release — Released September 24, 2021
+
+This version incudes the following bugfix:
+
+* fix a possible out-of-bound access when handling a request for a non-existent file in the root directory of a vhost that's matched by the cgi option
+
+and the relative regression test.
+
+
+
+
+1.7.3 “Space-dye Vest” third bugfix release — Released September 19, 2021
+
+### Improvements
+
+* follows symlinks
+* improved documentation and added key generation example (thanks! Anna)
+
+### Bugfix
+
+* fix syslog logging on FreeBSD.  Reported by Karl Jeacle, thanks!
+* don't crash if ``-c'' is missing in configtest mode (-n).  Reported by heph, thanks!
+* allow fstat64 on linux (needed by glibc on aarch64).  Reported by pine, thanks!
+
+
+
+
+1.7.2 “Space-dye Vest” second bugfix release — Released July 19, 2021
+
+This version incudes the following bugfix:
+
+* an un-initialized field in the configless code path leads to a crash on the first request.
+
+and the relative regression test.
+
+
+
+1.7.1 “Space-dye Vest” bugfix release — Released July 11, 2021
+
+This version includes two bugfixes:
+* use ${MAKE} to recursively call make.
+* fix the misleading example in the manpage: macros may not be reserved words
+
+
+
+1.7 “Space-dye Vest” — Released July 10, 2021
+
+Starting from this version gmid doesn't depend on lex anymore, but yacc is still needed.
+
+### New features
+
+* initial fastcgi support!  (it's still young!)
+* added user-defined macros, either via ‘-Dname=val’ or directly in the configuration file.
+* new ‘include’ keyword to load additional configuration files.
+* new ‘env’ rule to define environment vars for CGI scripts.
+* new ‘alias’ rule to define hostname aliases for a server.
+* allow ‘root’ to be specified per-location block.
+* pidfile support with the new ‘-P’ cli flag.
+* define ‘TLS_VERSION’, ‘TLS_CIPHER’ and ‘TLS_CIPHER_STRENGTH’ for CGI scripts.
+
+### Improvements
+
+* remove limits on the number of virtual hosts and location blocks that can be defined.
+* print the datetime when logging to stderr.
+* use ‘text/x-patch’ for ‘.patch’ and ‘.diff’ files.
+* sort the auto index alphabetically.
+* various improvements to the log management.
+* drop the dependency on lex.
+* added ‘--help’ as synonym of ‘-h’ and ‘-V’/‘--version‘ to print the version.
+* c-like handling of strings in the configuration file: when two or more strings are next to each-others, are automatically joined into a single string.  This is particularly useful with $-macros.
+
+### Bug fixes
+
+* correctly handle CGI scripts that replies with the maxium header length allowed.
+* fixed the static target.
+* fixed recursive mkdirs for configless mode (i.e. create ‘~/.local/share/gmid’)
+* logs sent to syslog now have proper priority (before every message ended up as LOG_CRIT).  Found by Anna “CyberTailor”, thanks!
+* ensure ‘%p’ (path) is always absolute in ‘block return’ rules.
+* fix automatic certificate generation, it caused problems on some adroid devices.  Found by Gnuserland, thanks!
+* document the ‘log’ rule.
+* the seccomp filter was reworked and now it's known to work properly on a vast range of architectures (to be more specific: all the architectures supported by alpine linux), see github issue #4.  Prompted and tested by @begss, thanks!
+* various improvements to the configure script, notified and fixed by Anna “CyberTailor”, thanks!
+* added a timeout to the regression tests.
+
+### Breaking changes
+
+* if duplicate rules are found in the configuration file, an error is now raised instead of silently using only the last value.
+* (sort of) ‘gg’ moved to ‘regress’ as it's only used in the regression suite.
+* (notice) the “mime "mime-type" "extension"” rule was deprecated and replaced by the new “map "mime-type" to-ext "extension"”.  The ‘mime’ rule will be removed in a future version because its syntax is incompatible with the new string auto-concat mechanism.
blob - /dev/null
blob + c97b689c4a97599581fd355ff459afe012298e1f (mode 644)
--- /dev/null
+++ site/index.html
@@ -0,0 +1,367 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <title>gmid</title>
+    <meta charset="utf8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style>
+    body {
+      font-family: monospace;
+      font-size: 14px;
+      max-width: 780px;
+      margin: 0 auto;
+      padding: 20px;
+      padding-bottom: 80px;
+    }
+
+    h1::before {
+      content: "# ";
+    }
+
+    h2 {
+      margin-top: 40px;
+    }
+
+    h2::before {
+      content: "## ";
+    }
+
+    h3::before {
+      content: "### ";
+    }
+
+    blockquote {
+      margin: 0;
+      padding: 0;
+    }
+
+    blockquote::before {
+      content: "> ";
+    }
+
+    blockquote p {
+      font-style: italic;
+      display: inline;
+    }
+
+    p.link::before {
+      content: "→ ";
+    }
+
+    strong::before { content: "*" }
+    strong::after  { content: "*" }
+
+    hr {
+      border: 0;
+      height: 1px;
+      background-color: #222;
+      width: 100%;
+      display: block;
+      margin: 2em auto;
+    }
+
+    img {
+      border-radius: 5px;
+    }
+
+    pre {
+      overflow: auto;
+      padding: 1rem;
+      background-color: #f0f0f0;
+      border-radius: 3px;
+    }
+
+    pre.banner {
+      display: flex;
+      flex-direction: row;
+      justify-content: center;
+    }
+
+    code, kbd {
+      color: #9d109d;
+    }
+
+    img {
+      display: block;
+      margin: 0 auto;
+      max-width: 100%;
+    }
+
+    @media (prefers-color-scheme: dark) {
+      body {
+        background-color: #222;
+        color: white;
+      }
+
+      a {
+        color: aqua;
+      }
+
+      hr {
+        background-color: #ddd;
+      }
+
+      pre {
+        background-color: #353535;
+      }
+
+      code, kbd {
+        color: #ff4cff;
+      }
+    }
+
+    @media (max-width: 400px) {
+      pre.banner { font-size: 9px; }
+    }
+
+    @media (max-width: 500px) {
+      pre.banner { font-size: 10px; }
+    }
+    </style>
+  </head>
+  <body>
+    <header>
+      <nav>
+        Home | <a href="contrib.html">contrib</a> | <a href="gmid.1.html">docs</a>
+      </nav>
+    </header>
+    <h1>gmid</h1>
+    <blockquote>
+      <p>A Gemini server</p>
+    </blockquote>
+    <h2>Features</h2>
+    <ul>
+      <li>sandboxed by default on OpenBSD, FreeBSD and Linux</li>
+      <li>able to reload the configuration on-the-fly without loosing connections</li>
+      <li>punycode and IRI support</li>
+      <li>CGI and FastCGI support</li>
+      <li>virtual hosts and per-location rules</li>
+      <li>low memory footprint</li>
+      <li>event-based asynchronous I/O model</li>
+      <li>rich configuration file</li>
+    </ul>
+    <h2>Install</h2>
+    <p>Some distros provide a package — thanks to the maintainers!</p>
+    <p>
+      <a href="https://repology.org/project/gmid/versions">
+        <img src="https://repology.org/badge/vertical-allrepos/gmid.svg" alt="Packaging status">
+      </a>
+    </p>
+    <p>Source code and precompiled binaries for linux are available:</p>
+    <ul>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid-1.7.4.tar.gz">gmid-1.7.4.tar.gz</a>
+      </li>
+    </ul>
+    <ul>
+      <li>
+        <a href="https://git.omarpolo.com/gmid/">git repository</a>
+      </li>
+      <li>
+        <a href="gemini://git.omarpolo.com/gmid.git/">git repository via Gemini</a>
+      </li>
+      <li>
+        <a href="https://github.com/omar-polo/gmid">GitHub mirror</a>
+      </li>
+    </ul>
+    <ul>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid.linux.aarch64">gmid.linux.aarch64</a>
+      </li>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid.linux.amd64">gmid.linux.amd64</a>
+      </li>
+    </ul>
+    <p>
+      When in doubt, compile from source: it’s easy and takes less
+      than a minute on a raspberry pi 3.  The dependencies are:
+    </p>
+    <ul>
+      <li>libevent</li>
+      <li>OpenSSL/LibreSSL</li>
+      <li>libtls (from either LibreSSL or LibreTLS)</li>
+      <li>yacc or GNU bison</li>
+    </ul>
+    <p>Once all the dependencies are installed, building is as easy as:</p>
+    <pre>$ curl -LO https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid-1.7.4.tar.gz
+$ tar xzvf gmid-1.7.4.tar.gz
+$ cd gmid-1.7.4
+$ ./configure
+$ make
+$ sudo make install # eventually</pre>
+    <p>
+      A SHA256 file is available.  However, that only checks for
+      accidental corruption: you can use signify (SHA256.sig and the
+      public key gmid-1.7.pub) or GPG.  The hash of the signify public
+      key is also included in the SHA256 file and thus signed with my
+      GPG.  The signify public key for the next release ‘gmid-1.8.pub’
+      is also included.
+    </p>
+    <ul>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256">SHA256</a>
+      </li>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256.gpg">SHA256.gpg</a>
+      </li>
+      <li>
+        <a href="https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256.sig">SHA256.sig</a>
+      </li>
+    </ul>
+    <p>To verify the signatures with signify(1)</p>
+    <pre>$ signify -C -p gmid-1.7.pub -x SHA256.sig
+Signature Verified
+gmid-1.7.pub: OK
+gmid-1.7.4.tar.gz: OK
+gmid-1.8.pub: OK
+gmid.linux.aarch64: OK
+gmid.linux.amd64: OK</pre>
+    <h2>Changelog for the last versions</h2>
+    <p>1.7.4 “Space-dye Vest”  fourth bugfix release — Released September 24, 2021</p>
+    <p>This version includes the following bugfix:</p>
+    <ul>
+      <li>
+        fix a possible out-of-bound access when handling a request for
+        a non-existent file in the root directory of a vhost that's
+        matched by the cgi option
+      </li>
+    </ul>
+    <p>and the relative regression test.</p>
+    <hr />
+    <p>1.7.3 “Space-dye Vest” third bugfix release — Released September 18, 2021</p>
+    <h3>Improvements</h3>
+    <ul>
+      <li>follows symlinks</li>
+      <li>improved documentation and added key generation example (thanks! Anna)</li>
+    </ul>
+    <h3>Bugfix</h3>
+    <ul>
+      <li>fix syslog logging on FreeBSD.  Reported by Karl Jeacle, thanks!</li>
+      <li>don't crash if <code>-c</code> is missing in configtest mode (<code>-n</code>).  Reported by heph, thanks!</li>
+      <li>allow fstat64 on linux (needed by glibc on aarch64).  Reported by pine, thanks!</li>
+    </ul>
+    <hr />
+    <p>1.7.2 “Space-dye Vest” second bugfix release — Released July 19, 2021</p>
+    <p>This version includes the following bugfix:</p>
+    <ul>
+      <li>
+        An un-initialized field in the configless code path leads to a
+        crash on the first request.
+      </li>
+    </ul>
+    <p>and the relative regression test.</p>
+    <hr />
+    <p>1.7.1 “Space-dye Vest” bugfix release — Released July 11, 2021</p>
+    <p>This version includes two bugfixes:</p>
+    <ul>
+      <li>use <code>${MAKE}</code> to recursively call make.</li>
+      <li>
+        fix the misleading example in the manpage: macros name may not
+        be reserved words.
+      </li>
+    </ul>
+    <hr />
+    <p>1.7 “Space-dye Vest” — Released July 10, 2021</p>
+    <p>
+      Starting from this version gmid doesn't depend on lex anymore,
+      but yacc is still needed.
+    </p>
+    <h3>New Features</h3>
+    <ul>
+      <li>initial fastcgi support!  (it&#8217;s still young!)</li>
+      <li>
+        added user-defined macros, either via <code>-Dname=val</code> or
+        directly in the configuration file.
+      </li>
+      <li>new <code>include</code> keyword to load additional configuration files.</li>
+      <li>new <code>env</code> rule to define environment vars for CGI scripts.</li>
+      <li>new <code>alias</code> rule to define hostname aliases for a server.</li>
+      <li>allow <code>root</code> to be specified per-location block.</li>
+      <li>pidfile support with the new <code>-P</code> cli flag.</li>
+      <li>
+        define <code>TLS_VERSION</code>, <code>TLS_CIPHER</code> and
+        <code>TLS_CIPHER_STRENGTH</code> for CGI scripts.
+      </li>
+    </ul>
+    <h3>Improvements</h3>
+    <ul>
+      <li>
+        remove limits on the number of virtual hosts and location
+        blocks that can be defined.
+      </li>
+      <li>print the datetime when logging to stderr.</li>
+      <li>
+        use <code>text&#47;x-patch</code> for <code>.patch</code> and <code>.diff</code> files.
+      </li>
+      <li>sort the auto index alphabetically.</li>
+      <li>various improvements to the log management.</li>
+      <li>drop the dependency on lex.</li>
+      <li>
+        added <code>--help</code> as synonym of <code>-h</code> and
+        <code>-V</code>&#47;<code>--version</code> to print the version.
+      </li>
+      <li>
+        c-like handling of strings in the configuration file: when
+        two or more strings are next to each-others, are
+        automatically joined into a single string.  This is
+        particularly useful with <code>$</code>-macros.
+      </li>
+    </ul>
+    <h3>Bug fixes</h3>
+    <ul>
+      <li>
+        correctly handle CGI scripts that replies with the maxium
+        header length allowed.
+      </li>
+      <li>fixed the <code>static</code> target.</li>
+      <li>
+        fixed recursive mkdirs for configless mode (i.e. create
+        <code>~&#47;.local&#47;share&#47;gmid</code>)
+      </li>
+      <li>
+        logs sent to syslog now have proper priority (before every
+        message ended up as LOG_CRIT).  Found by Anna
+        &#8220;CyberTailor&#8221;, thanks!
+      </li>
+      <li>
+        ensure <code>%p</code> (path) is always absolute in
+        <code>block return</code> rules.
+      </li>
+      <li>
+        fix automatic certificate generation, it caused problems on
+        some adroid devices.  Found by Gnuserland, thanks!
+      </li>
+      <li>document the <code>log</code> rule.</li>
+      <li>
+        the seccomp filter was reworked and now it&#8217;s known to
+        work properly on a vast range of architectures (to be more
+        specific: all the architectures supported by alpine linux),
+        see github issue #4.  Prompted and tested by @begss, thanks!
+      </li>
+      <li>
+        various improvements to the configure script, notified and
+        fixed by Anna &#8220;CyberTailor&#8221;, thanks!
+      </li>
+      <li>added a timeout to the regression tests.</li>
+    </ul>
+    <h3>Breaking changes</h3>
+    <ul>
+      <li>
+        if duplicate rules are found in the configuration file, an
+        error is now raised instead of silently using only the last
+        value.
+      </li>
+      <li>
+        (sort of) <code>gg</code> moved to <code>regress</code> as
+        it's only used in the regression suite.
+      </li>
+      <li>
+        (notice) the <code>mime "mime-type" "extension"</code> rule was deprecated and
+        replaced by the new <code>map "mime-type" to-ext "extension"</code>.  The
+        <code>mime</code> rule will be removed in a future version
+        because its syntax is incompatible with the new string
+        auto-concat mechanism.
+      </li>
+    </ul>
+  </body>
+</html>
blob - /dev/null
blob + fae8467457c9a06fc1a4bcb090b88e82f9362eab (mode 755)
--- /dev/null
+++ site/mdoc2html.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# usage: mdoc2html.sh src out
+#
+# converts the manpage `src' to the HTML file `out', tweaking the
+# style
+
+set -e
+
+: ${1:?missing input file}
+: ${2:?missing output file}
+
+man -Thtml -l "$1" > "$2"
+
+exec ed "$2" <<EOF
+/<style>
+a
+    body { max-width: 960px; margin: 0 auto; }
+.
+wq
+EOF
blob - /dev/null
blob + 8cc182e49c306faf9dffaf5af06bdf1f6fbc5096 (mode 644)
Binary files /dev/null and site/vim-screenshot.png differ