Note: This document is from summer 1997 !

OSU/DECthreads HTTP-server

What is it ?

The OSU/DECthreads HTTP-server is a free HTTP server developed by David Jones at Ohio State University utilizing DECthreads, which has been part of VMS since 5.5/1.0.

There are 5 HTTP-server for VMS:

OSU/DECthreads the most widely used
CERN the first, but it is no longer being maintained/developed
Purveyor by Process, it has been promoted by Digital
Cheetah by TGV, which was bougth by Cisco, which sold the VMS stuff to Process
NetScape Digital says it exist
The OSU/DECthreads is by far the most used HTTP-server on VMS (I would estimate its share to be >75%), which means that f.ex. the number of available CGI-scripts for it is bigger than for the other.

What features is present ?

What features is missing ?

Where to get it ?

The server is available from http://kcgl1.eng.ohio-state.edu/www/doc/serverinfo.html.

The indexing and search engine kit is available from http://www.cerritos.edu/cerritos/kits/.

A long list of pointers to available scripts are available at http://www.hhs.dk/vms/cgiscripts.html.

How to install it ?

Create directory structure

I will recommend the following:

[HTTPD...]*.* server source + binaries
[INDEX...]*.* indexer & search engine source + binaries
[WWW...]*.* WWW tree
[WWW.DOC...]*.* documents
[WWW.SCRIPTS]*.* CGI-scripts
[WWW.INDEX]*.* searchable index

Unpack and build server

  1. SET DEF [HTTPD]
  2. unzip (or untar) the server kit
  3. SET DEF [HTTPD.BASE_CODE]
  4. @BUILD_tcpipvariant
  5. make sure that the username to run the server under has READ access to the whole [HTTPD...*.*]tree and WRITE access to the directories (so that it can create log-files)

Unpack and build indexer + search engine

  1. SET DEF [INDEX]
  2. unzip the kit
  3. @MAKE

Setup WWW tree

  1. make sure that the username to run the server under has READ access to the whole [WWW...]*.* tree
  2. COPY [HTTPD.SCRIPT_CODE]SCRIPTLIB.* [WWW.SCRIPTS]*.*
  3. COPY [HTTPD.SCRIPT_CODE]CGILIB.* [WWW.SCRIPTS]*.*
  4. COPY [HTTPD.SCRIPT_CODE]CGI_SYMBOLS.* [WWW.SCRIPTS]*.*
  5. COPY [INDEX]SET_DCL_ENV.* [WWW.SCRIPTS]*.*
  6. COPY [INDEX]WWWSEARCH.COM [WWW.SCRIPTS]*.*
  7. COPY [INDEX]USERSEARCH.* [WWW.SCRIPTS]*.*
  8. create a [HTTPD.SCRIPTS]BUILD.COM that builds CGI_SYMBOLS.EXE and SET_DCL_ENV.EXE (you will later also build your own scripts here)
  9. modify WWWSEARCH.COM and USERSEARCH.COM to point to the correct QUERY.EXE (see previous item) and [WWW.INDEX] directory and change display and behavioral parameters as you want.

Create username and startup

  1. create a username to run the server under - if you expect many hits then you must supply enough UAF quota to allow it to run many threads - the login-directory should be [HTTPD]
  2. setup proxies (the username to run the server under must have default proxy access to itself, the SYSTEM username should have proxy access to the the username to run the server under)
  3. modify SYSTARTUP_VMS.COM and SYLOGIN.COM

SYSTARTUP_VMS.COM

$ @diskx:[HTTPD.SYSTEM]HTTPD_STARTUP username "" - diskx:[HTTPD.SYSTEM]HTTP_SERVER.CONF 80

SYLOGIN.COM

$ htman :== $www_root:[base_code]privrequest.exe 931

How to configure it ?

Version 2.x of the server has a smart forms/scripts/macro-expansion based configuration system. But I have never used it and I am still using the old version 1.x configuration-files. They work fine.

There are 3 configurations files:

Below are some examples with comments, that IMHO would be a good basis for creating your own configuration-files. Some of the other options are doumented in the the configuration-files shipping with the server.

[HTTP.SYSTEM]HTTP_SERVER.CONF

# 3 files to search as "index"

Welcome index.htmlx

Welcome index.html

Welcome welcome.html

# display IP names instead of IP numbers in ACCESS.LOG

DNSLookup on

# various

EventCounter Clients

TraceLevel http_log_level

AccessLog access.log

#OK to display directories

DirAccess on

# imagemaps

mapimage /www

# map /~username to [username.WWW]

userdir www

# includes suffixes

include www_system:http_suffixes.conf

# authenticator to check protection

authenticator www_system:md5_authenticator

# search engine

search 0::diskx:[WWW.SCRIPTS]WWWSEARCH.COM

# scripts

exec /htbin/* 0::diskx:[WWW.SCRIPTS]

# management ports

manage port 931

# HTTP PUT upload (NetScape Navigator Gold)

method PUT wwwpost.com

# map URL's to files

map /* /diskx/www/doc/*

map /diskx/www/diskx/www/* /diskx/www/*

pass /diskx/www/doc/*

fail *

[HTTPD.SYSTEM]HTTP_DIRECTORY.CONF

# 3 files to search for as "index"

Welcome index.htmlx

Welcome index.html

Welcome welcome.html

# OK to display directories

DirAccess on

# display aaareadme.www in top of directory

DirReadMe TOP aaareadme.www

# display size and date

DirShowSize on

DirShowDate on

[HTTP.SYSTEM]HTTP_SUFFIXES.CONF

# define suffixes -> MIME type

suffix .aiff audio/x-aiff BINARY 0.8

suffix .gif image/gif BINARY 1.0

suffix .txt text/plain 8BIT 0.5

suffix .com text/plain 8BIT 0.5

suffix .htm text/html 8BIT 0.5

suffix .html text/html 8BIT 0.5

suffix .htmlx text/htmlx 8BIT 0.5

suffix .jpg image/jpeg BINARY

suffix .dat text/plain 8BIT 1.0

suffix .hlp text/plain 8BIT 1.0

suffix .ps application/postscript 8BIT 1.0

suffix .dvi application/x-dvi BINARY 1.0

suffix .pdf application/x-pdf BINARY 1.0

suffix .hlb vms/help BINARY

suffix .tlb vms/tlb BINARY

suffix .olb vms/olb BINARY

suffix .mlb vms/mlb BINARY

suffix .mpeg video/mpeg BINARY 1.0

suffix .exe vms/exe BINARY 1.0

suffix .zip application/zip BINARY 1.0

suffix .au audio/basic BINARY 1.0

suffix .bleep application/bleeper 8BIT 1.0

suffix .wav audio/x-wav BINARY 1.0

suffix .xbm image/x-xbm 7BIT

suffix .tar application/tar BINARY 1.0

suffix .imagemap application/imagemap 8BIT 1.0

suffix .class application/octet-stream BINARY 1.0

# do not touch this line

suffix *.* text/plain * 0.01

# preprocessing (server side includes)

presentation text/htmlx html_preproc.exe

# imagemaps

presentation application/imagemap www_root:[bin]mapimage

# directory

ThreadPool dsrv q_flag=1 limit=4 stack=162000

Service dirserv pool=dsrv dynamic=(dirserv,http_dirserv_mst) \ info=www_system:http_directory.conf

presentation text/file-directory %dirserv:

How to get support on it ?

It is free => you have no guarantee for support. But not quite end of story.

There is a mail-list VMS-Web-Daemon@kjsl.com (subscribe at mxserver@kjsl.com) dedicated to support this HTTP-server with the active participation of the author David Jones. The usual time from quetsion to answers is just a few hours, which is better support than most commercial vendors can offer !

There is documentation in the directory .

Also see the FAQ at http://http://kcgl1.eng.ohio-state.edu/www/doc/server_faq.html and Brian Reeds supplementarty documentation at http://http://kcgl1.eng.ohio-state.edu/tarserv/osu.tar/index.html.

Tips on forms and CGI-scripts !

Use CGI_SYMBOLS for simple scripts and SET_DCL_ENV for complex scripts.

The following two scripts are invaluable as debug-scripts for forms:

$ write net_link "<DNETRECMODE>"

$ mcr 'f$parse("cgi_symbols.exe;",f$environment("procedure"))' www_ form_

$ write net_link "content-type: text/html"

$ write net_link ""

$ write net_link "<HTML>"

$ write net_link "<HEAD>"

$ write net_link "<TITLE>Test</TITLE>"

$ write net_link "</HEAD>"

$ write net_link "<BODY>"

$ write net_link "<PRE>"

$ define sys$output net_link

$ show symbol www*

$ show symbol form*

$ deassign sys$output

$ write net_link "</PRE>"

$ write net_link "</BODY>"

$ write net_link "</HTML>"

$ exit

$ write net_link "<DNETRECMODE>"

$ run 'f$parse("set_dcl_env.exe;",f$environment("procedure"))'

$ write net_link "content-type: text/html"

$ write net_link ""

$ write net_link "<HTML>"

$ write net_link "<HEAD>"

$ write net_link "<TITLE>Test</TITLE>"

$ write net_link "</HEAD>"

$ write net_link "<BODY>"

$ write net_link "<PRE>"

$ define sys$output net_link

$ show symbol www*

$ deassign sys$output

$ write net_link "</PRE>"

$ write net_link "</BODY>"

$ write net_link "</HTML>"

$ exit

Tips on CGI-scripts and database interfaces !

I would recommend something like a DCL wrapper:

$ write net_link "<DNETRECMODE>"

$ mcr 'f$parse("cgi_symbols.exe;",f$environment("procedure"))' www_ form_

$ write net_link "content-type: text/html"

$ write net_link ""

$ write net_link "<HTML>"

$ write net_link "<HEAD>"

$ write net_link "<TITLE>foo bar</TITLE>"

$ write net_link "</HEAD>"

$ write net_link "<BODY>"

$ write net_link "<PRE>"

$ define sys$output net_link

$ run diskx:[diry]foobar.exe

$ deassign sys$output

$ write net_link "</PRE>"

$ write net_link "</BODY>"

$ write net_link "</HTML>"

$ exit

Because now the webmaster has created the wrapper with all HTML and CGI and the database programmer can now create the FOOBAR.EXE, which:

this means that the database programmer can test his program at the DCL prompt just be defining the symbols and running the program manually.