GOPHERSPACE.DE - P H O X Y
gophering on box.matto.nl
# 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 $