annotate thesis/attic/old/4-CodeAnalysis.tex @ 375:91eb129dd695

rework in ch02 mainly
author meillo@marmaro.de
date Tue, 03 Feb 2009 12:35:04 +0100 (2009-02-03)
parents 2aad3d950640
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
89
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
1 \chapter{Code analysis}
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
2
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
3
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
4 \section{Architecture}
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
5 Like its anchestor \sendmail, \masqmail\ is a monolitic program. It consists of only one \emph{setuid root}\footnote{Runs as user root, no matter which user invoked it.}\index{setuid root} binary file, named \path{masqmail}. All functionality is included in it; of course some more comes from dynamic libraries linked.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
6
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
7
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
8
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
9 \subsection{Structure}
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
10 The \masqmail\ executable can be called under various names for \name{sendmail-compatibility} reasons. This is commonly organized by creating symbolic links with with different names to the \masqmail\ executable. These are \path{/usr/lib/sendmail} and \path{/usr/sbin/sendmail} because many programs expect a \mta\ to be located there. Further more \sendmail\ provides shortcuts by calling it with a different name instead of supplying command line arguments. The best known of it is \path{mailq}, which is equivilent to calling the \MTA\ with the argument \verb+-bq+. \masqmail\ reacts to the names \path{mailq}, \path{smtpd}, \path{mailrm}, \path{runq}, \path{rmail}, and \path{in.smtpd}. The last four are an addition to \sendmail. Not implemented is the name \path{newaliases} because it is not relevant to \masqmail. To provide the command nonetheless, one may write a shell script located at \path{/usr/bin/newaliases}, that simply invokes \verb+masqmail -bi+.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
11
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
12 %masqmail: mailq, mailrm, runq, rmail, smtpd/in.smtpd
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
13 %sendmail: hoststat, mailq, newaliases, purgestat, smtpd
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
14
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
15 \masqmail\ is written in the \NAME{C} programming language. The program, as of version 0.2.21, consists of 34 source code and eight header files, containing about 9,000 lines of code\footnote{Measured with \name{sloccount} by David A.\ Wheeler.}. Additionally, it includes a \name{base64} implementation (about 300 lines) and \name{md5} code (about 150 lines). For systems that do not provide \name{libident}, this library is distributed as well (circa 600 lines); an available shared library however has higher precedence in linking.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
16
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
17 The only mandatory dependency is \name{glib}---a cross-platform software utility library, originated in the \NAME{GTK+} project. It provides safer replacements for many standard library functions. (The unsafe \verb+sprintf()+ is one example.) Also it offers handy data containers, easy-to-use implementations of data structures, and much more.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
18
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
19 With \masqmail\ comes the small tool \path{mservdetect}; it helps setting up a configuration that uses the \name{mserver} system to detect the online state. Two other binaries get compiled for testing purposes: \path{readtest} and \path{smtpsend}. All three programms use \masqmail\ source code; they only add a file with a \verb+main()+ function each.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
20
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
21 \masqmail\ does not provide an interface for modules with additional functionality. There exists no add-on or module system. But the code is separated by function to the various source files, and some functional parts can be included or excluded by defining symbols. This means adding some argument (like \verb+--enable-maildir+) to the \verb+configure+ call. Thus the concerning code gets not removed by the preprocessor.
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
22
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
23
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
24
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
25
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
26 \section{Code quality}
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
27
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
28
3b5ba7331eb5 complete restructuring of whole document
meillo@marmaro.de
parents:
diff changeset
29 \section{Security}