Preliminary classification of inn.conf parameters

Russ Allbery rra at stanford.edu
Wed Feb 6 03:13:11 UTC 2002


Towards the end of eventually splitting the inn.conf parameters into a
more manageable set, here's my initial breakdown and classification of
what currently can go into inn.conf:

/*  $Id$
**
**  Manage the global innconf struct.
*/

#include "config.h"
#include "clibrary.h"

enum type {
    TYPE_BOOLEAN,
    TYPE_NUMBER,
    TYPE_STRING
};

struct config {
    const char *name;
    void *location;
    enum type type;
    struct {
        bool boolean;
        long integer;
        const char *string;
    } default;
}

#define K(name)         (#name), (&innconf->name)

#define BOOL(def)       TYPE_BOOLEAN, { (def),     0,  NULL }
#define NUMBER(def)     TYPE_NUMBER,  {     0, (def),  NULL }
#define STRING(def)     TYPE_STRING,  {     0,     0, (def) }

const struct config config_table[] = {
    { K(domain),                STRING  (NULL) },
    { K(enableoverview),        BOOL    (true) },
    { K(fromhost),              STRING  (NULL) },
    { K(groupbaseexpiry),       BOOL    (true) },
    { K(innflags),              STRING  (NULL) },
    { K(mailcmd),               STRING  ("innmail") },
    { K(maxforks),              NUMBER  (10) },
    { K(mta),                   STRING  (NULL) },
    { K(nicekids),              NUMBER  (4) },
    { K(ovmethod),              STRING  (NULL) },
    { K(pathhost),              STRING  (NULL) },
    { K(rlimitnofile),          NUMBER  (256) },
    { K(server),                STRING  (NULL) },
    { K(sourceaddress),         STRING  (NULL) },
    { K(timer),                 NUMBER  (0) },

    { K(patharchive),           STRING  (NULL) },
    { K(patharticles),          STRING  (NULL) },
    { K(pathbin),               STRING  (NULL) },
    { K(pathcontrol),           STRING  (NULL) },
    { K(pathdb),                STRING  (NULL) },
    { K(pathetc),               STRING  (NULL) },
    { K(pathfilter),            STRING  (NULL) },
    { K(pathhttp),              STRING  (NULL) },
    { K(pathincoming),          STRING  (NULL) },
    { K(pathlog),               STRING  (NULL) },
    { K(pathnews),              STRING  (NULL) },
    { K(pathoutgoing),          STRING  (NULL) },
    { K(pathoverview),          STRING  (NULL) },
    { K(pathrun),               STRING  (NULL) },
    { K(pathspool),             STRING  (NULL) },
    { K(pathtmp),               STRING  (NULL) },

    /* The following settings are specific to innd. */
    { K(artcutoff),             NUMBER  (10) },
    { K(badiocount),            NUMBER  (5) },
    { K(bindaddress),           STRING  (NULL) },
    { K(blockbackoff),          NUMBER  (120) },
    { K(chaninacttime),         NUMBER  (600) },
    { K(chanretrytime),         NUMBER  (300) },
    { K(datamovethreshold),     NUMBER  (8192) },
    { K(dontrejectfiltered),    BOOL    (false) },
    { K(hiscachesize),          NUMBER  (0) },
    { K(icdsynccount),          NUMBER  (10) },
    { K(ignorenewsgroups),      BOOL    (false) },
    { K(linecountfuzz),         NUMBER  (0) },
    { K(logartsize),            BOOL    (true) },
    { K(logcancelcomm),         BOOL    (false) },
    { K(logipaddr),             BOOL    (true) },
    { K(logsitename),           BOOL    (true) },
    { K(maxartsize),            NUMBER  (1000000) },
    { K(maxconnections),        NUMBER  (50) },
    { K(mergetogroups),         BOOL    (false) },
    { K(nntpactsync),           NUMBER  (200) },
    { K(nntplinklog),           BOOL    (false) },
    { K(noreader),              BOOL    (false) },
    { K(pathalias),             STRING  (NULL) },
    { K(pauseretrytime),        NUMBER  (300) },
    { K(peertimeout),           NUMBER  (3600) },
    { K(pgpverify),             BOOL    (false) },
    { K(port),                  NUMBER  (119) },
    { K(readerswhenstopped),    BOOL    (false) },
    { K(refusecybercancels),    BOOL    (false) },
    { K(remembertrash),         BOOL    (true) },
    { K(stathist),              STRING  (NULL) },
    { K(status),                NUMBER  (0) },
    { K(verifycancels),         BOOL    (false) },
    { K(wanttrash),             BOOL    (false) },
    { K(wipcheck),              NUMBER  (5) },
    { K(wipexpire),             NUMBER  (10) },
    { K(xrefslave),             BOOL    (false) },

    /* The following settings are specific to nnrpd. */
    { K(addnntppostingdate),    BOOL    (true) },
    { K(addnntppostinghost),    BOOL    (true) },
    { K(allownewnews),          BOOL    (true) },
    { K(backoffauth),           BOOL    (false) },
    { K(backoffdb),             STRING  (NULL) },
    { K(backoffk),              NUMBER  (1) },
    { K(backoffpostfast),       NUMBER  (0) },
    { K(backoffpostslow),       NUMBER  (1) },
    { K(backofftrigger),        NUMBER  (10000) },
    { K(checkincludedtext),     BOOL    (false) },
    { K(clienttimeout),         NUMBER  (600) },
    { K(complaints),            STRING  (NULL) },
    { K(keyartlimit),           NUMBER  (100000) },
    { K(keylimit),              NUMBER  (512) },
    { K(keymaxwords),           NUMBER  (250) },
    { K(keywords),              BOOL    (false) },
    { K(localmaxartsize),       NUMBER  (1000000) },
    { K(maxcmdreadsize),        NUMBER  (BUFSIZ) },
    { K(moderatormailer),       STRING  (NULL) },
    { K(nicenewnews),           NUMBER  (0) },
    { K(nicennrpd),             NUMBER  (0) },
    { K(nnrpdauthsender),       BOOL    (false) },
    { K(nnrpdoverstats),        BOOL    (false) },
    { K(nnrpperlauth),          BOOL    (false) },
    { K(nnrppythonauth),        BOOL    (false) },
    { K(organization),          STRING  (NULL) },
    { K(readertrack),           BOOL    (false) },
    { K(spoolfirst),            BOOL    (false) },
    { K(strippostcc),           BOOL    (false) },

    /* The following settings are used by nnrpd and rnews. */
    { K(nnrpdposthost),         STRING  (NULL) },
    { K(nnrpdpostport),         NUMBER  (119) },

    /* The following settings are specific to the storage subsystem. */
    { K(articlemmap),           BOOL    (false) },
    { K(cnfscheckfudgesize),    NUMBER  (0) },
    { K(docnfsstat),            BOOL    (false) },
    { K(immediatecancel),       BOOL    (false) },
    { K(keepmmapedthreshold),   NUMBER  (1024) },
    { K(nnrpdcheckart),         BOOL    (true) },
    { K(overcachesize),         NUMBER  (15) },
    { K(ovgrouppat),            STRING  (NULL) },
    { K(storeonxref),           BOOL    (false) },
    { K(useoverchan),           BOOL    (false) },
    { K(wireformat),            BOOL    (false) },

    /* The following settings are specific to innwatch. */
    { K(doinnwatch),            BOOL    (true) },
    { K(innwatchbatchspace),    NUMBER  (800) },
    { K(innwatchlibspace),      NUMBER  (25000) },
    { K(innwatchloload),        NUMBER  (1000) },
    { K(innwatchhiload),        NUMBER  (2000) },
    { K(innwatchpauseload),     NUMBER  (1500) },
    { K(innwatchsleeptime),     NUMBER  (600) },
    { K(innwatchspoolnodes),    NUMBER  (200) },
    { K(innwatchspoolspace),    NUMBER  (8000) },

    /* The following settings are specific to scanlogs. */
    { K(logcycles),             NUMBER  (3) },
};

/* Special notes:

   checkincludedtext and localmaxartisize are used by both nnrpd and inews,
   but inews should probably just let nnrpd do that checking.

   organization is used by both nnrpd and inews.  Perhaps inews should just
   let nnrpd set it.

   mergetogroups is currently used by nnrpd for permission checking on
   posting.  I think the check should always be performed based on the
   newsgroup to which the user is actually posting, and nnrpd should let
   innd do the merging.

   useoverchan is only used in innd and overchan.  It should probably be
   something the storage system knows.  Ideally, the storage system would
   handle overchan itself, but that would require a lot of infrastructure;
   in the interim, it could be something that programs could ask the
   overview subsystem about.

   doinnwatch and docnfsstat are used by rc.news currently, but really
   should be grouped with the appropriate subsystem.

   newsrequeue also uses nntplinklog, but the parameter should go away
   completely anyway.

   timer is currently used in various places, but it may be best to replace
   it with individual settings for innd and innfeed, and any other code that
   wants to use it.

   maxforks is used by rnews and nnrpd.  I'm not sure this is that useful of
   a setting to have.
*/

-- 
Russ Allbery (rra at stanford.edu)             <http://www.eyrie.org/~eagle/>


More information about the inn-workers mailing list