summaryrefslogtreecommitdiffstats
path: root/http/ashd/DETAILS
blob: 8751d2149a89add5030ec7cca3e354d9d970416c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
           SPELL=ashd
if [[ $ASHD_SCM == y ]]; then
if [[ $ASH_SCM_AUTO == y ]]; then
         VERSION=$(date +%Y%m%d)
else
         VERSION=scm
fi
          SOURCE=${SPELL}-scm.tar.bz2
   SOURCE_URL[0]=git://git.dolda2000.com/ashd:ashd-scm
   SOURCE_IGNORE=volatile
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-scm"
else
         VERSION=0.7
          SOURCE="${SPELL}-${VERSION}.tar.gz"
   SOURCE_URL[0]=http://www.dolda2000.com/~fredrik/${SPELL}/${SOURCE}
     SOURCE_HASH=sha512:a8ddbdb391eb3b601a65527a3fde8eef8f815e51a5004f5c7dd48950d689f3a670bbed78c39f21f68887df82e193343a682fe8e8e3a9aec8e59ef67a8859d9b7
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-${VERSION}"
fi
        WEB_SITE="http://www.dolda2000.com/~fredrik/ashd/"
      LICENSE[0]="GPLv3"
         ENTERED=20101010
        KEYWORDS="http server"
           SHORT="A Sane HTTP Daemon"
cat << EOF
Ashd is a modular HTTP server based on a multi-program architecture. Whereas
most other HTTP servers are monolithic programs with, perhaps, loadable
modules, Ashd is composed of several different programs, each of which
handles requests in different ways, passing requests to each other over a
simple protocol (not unlike Unix pipelines). The design of Ashd brings it
a number of nice properties, the following being the most noteworthy ones.

Sanity of design The separation of concerns between different, independent
programs is an example of standard Unix philosophy – each program
does one thing only, but does it well (I hope). The clean delineation of
functions allows each program to be very small and simple – currently,
each of the programs in the collection (including even the core HTTP parser
program, htparser, as long as one does not count its, quite optional, SSL
implementation) is implemented in less than 1,000 lines of C code (and most
are considerably smaller than that), allowing them to be easily studied and
understood.  Security Since each program runs in a process of its own, it can
be assigned proper permissions. Most noteworthy of all, the userplex program
ensures that serving of user home directories (/~user/ URLs, if you will)
only happens by code that is actually logged in as the user in question;
and the htparser program, being the only program which speaks directly
with the clients, can run perfectly well as a non-user (like nobody)
and be chroot'ed into an empty directory.  Configuration sanity Again,
since each program only handles a simple task, its configuration can be
made quite simple. There is no need for the dirplex program, which handles
only service from physical directories, to care about virtual directories,
virtual hosts, HTTP protocol parameters or authentication; just as there is
no need for the patplex pattern matcher to know about file types or directory
hierarchies. Each program's configuration file format can be kept as simple as
possible, and most programs are configured simply with command-line options.
Persistence Though Ashd is a multi-process program, it is not in the same
sense as e.g. Apache. Each request handler continues to run indefinitely
and does not spawn multiple copies of itself, meaning that all process
state persists between requests – session data can be kept in memory,
connections to back-end services can be kept open, and so on.
EOF