[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Mandating PERL for ZMailer system ??



Hi,
  So far I have tried to do all scripting in SH, if not coding things
  outright in C.

  Now I am considering (re)writing  newdb  utility in PERL  so that I
  can include there all manner of security related issues about database
  compilation controls.

  This relates to  proto/db/dbases.conf  file I have introduced to
  ZMailer CVS tree a few months ago in order of having a simpler way
  to manage all databases in the system.  And among other things, to
  have unified call interface spanning multiple backend files in sequence,
  e.g.:

#|Security sensitive ones ("dbpriv" must be defined!)
#| aliases         $DBTYPE  root:0:644   -la $MAILVAR/db/aliases      -lm
#| aliases         $DBTYPE  someuser:somegroup:664 -la $MAILVAR/db/aliases-2 -lm
#| fqdnaliases     $DBTYPE  root:0:644 -la $MAILVAR/db/fqdnaliases    -lm
#| userdb          $DBTYPE  root:0:644 -la $MAILVAR/db/userdb         -lm
#|
#|Security insensitive ones ("dbpriv" need not be defined!)
#| routesdb        $DBTYPE  -    -l  $MAILVAR/db/routes         -lm
#| thishost        $DBTYPE  -    -l  $MAILVAR/db/localnames     -lm
#| thishost        unordered -   -   $MAILVAR/db/localnames     -l
#| thishost        bind,mxlocal - -  -                          -l


	As an example, the two "aliases" lines translate to following:
	(Or rather, their uncommented counterparts at my workstation)

$ cat /opt/mail/db/aliases.zmsh 
# ZMSH init script for relation: aliases

# ---boilerplate head
        relation -lm -t $DBTYPE -f $MAILVAR/db/aliases$DBEXT aliases_1
        relation -lm -t $DBTYPE -f $MAILVAR/db/aliases-2$DBEXT aliases_2
# boilerplate tail---

aliases(key) {
    local a
        if a="$(aliases_1 "$key")"; then
            priv="$(filepriv -M 644 $MAILVAR/db/aliases$DBEXTtest \
                            $(db owner aliases_1))" &&
            return "$a"
        fi
        if a="$(aliases_2 "$key")"; then
            priv="$(filepriv -M 664 $MAILVAR/db/aliases-2$DBEXTtest \
                            $(db owner aliases_2))" &&
            return "$a"
        fi
    return 1
}
------------------------------------

	However during generation of this DB, a "newdb" process
	must be run, and that needs to switch to use appropriate
	UID and GID, plus UMASK so that the new DB files can be
	generated.

	The example above is semi fabricated, but not entirely false..
	One would perhaps need to allow group-write access to the
	$MAILVAR/db/ directory, which isn't a very nice thing to do..
	On the other hand, nobody prevents system from using some
	other (preferrably in local filesystem) directory for the
	"aliases-2" database.

-- 
/Matti Aarnio	<mea@nic.funet.fi>