# CGI with Awk on OpenBSD httpd
-------------------------------

Last edited: $Date: 2020/01/04 20:27:46 $


Remember that for httpd OpenBSD chroots to /var/www.

To run an Awk CGI-script on  OpenBSD httpd:

- set up configurations file(s)
- put your script in /var/www/cgi-bin/
- populatie the chroot (meaning: /var/www/) with the needed
 binaries and libraries.


## Prepare /etc/httpd

Below follows some content for  /etc/httpd, with some lines for SSL
certificate through the acme-client. For security, we included some
simple basic authentication with htpasswd.

   ext_ip = "10.0.0.4"

   server "www.example.com" {
           listen on $ext_ip port 80
           listen on $ext_ip tls port 443
           root "/htdocs/www.example.com/"
           directory { index "index.html" }
           location "/.well-known/acme-challenge/*" {
                   root "/acme"
                   request strip 2
           }
           location "/cgi-bin/*" {
                   authenticate MySecretRealm with "/data/htpasswd"
                   fastcgi
                   root "/"
           }
           tls {
                   certificate     "/etc/ssl/www.example.com.crt"
                   key             "/etc/ssl/private/www.example.com.key"
           }
   }

Check the file for syntax errors with: httpd -n

Off course you  can start with http only. leaving  out the port 443
and the tls-part.


## Setup htpasswd

   mkdir /var/www/data
   htpasswd /var/www/data/htpasswd UserName
   chown -R :www /var/www/data


## Create a CGI-script

Here is a nice example script:

   #!/bin/awk -f

   BEGIN {
       printf("Status: 200 OK\n");
       printf("Content-type: text/plain\n\n");

       for ( key in ENVIRON ) {
           print key " : " ENVIRON[key];
       }
   }

Put this script in /var/www/cgi-bin/test.awk


## Populate the chroot

Create a subdirectory  for bin and lib files Use  ldd to determine.
which lib files are needed.

   mkdir -p /var/www/usr/{bin,lib,libexec}
   cd /var/www/usr/bin/
   cp /usr/bin/awk .
   ldd /var/www/usr/bin/awk

And copy the lib files

   cp /usr/lib/libm.so* /var/www/usr/lib/
   cp /usr/lib/libc.so* /var/www/usr/lib/
   cp /usr/libexec/ld.so /var/www/usr/libexec/ld.so


## Enable and start slowcgi and httpd

   rcctl enable slowcgi
   rcctl enable httpd
   rcctl start slowcgi
   rcctl start httpd

Now, point your browser to:

- http://www.example.com/cgi-bin/test.awk
- http://www.example.com/cgi-bin/test.awk?abc=123

and enjoy :)

When  in trouble,  look  for  error messages  in  your logfiles  in
/var/www/logs/.

Another possibility is to run /usr/sbin/httpd -dvvv and see if this
turns up some helpful messages.


$Id: cgi_with_awk_on_openbsd_httpd.txt,v 1.4 2020/01/04 20:27:46 matto Exp matto $