Change log

V 2.0.9 - release - 21 march 2006

New features:

  • New variable for accepting only authorized senders:
    if the variable exists, then messages are accepted only if RELAYCLIENT is set.
    If defined, it works always despite CHKUSER being ON/OFF
    This feature can be used for a "submission port" (see RFC 2476)
  • Improved checking of MySQL server availability (if MySQL is used as vpopmail user's DB)
  • Introduction of a new variable for disabling chkuser on the fly: CHKUSER_DISABLE_VARIABLE (can be used for single IP or defined as "RELAYCLIENT" for all authorized e-mail clients)
  • Improved starting variables checking sequence
    CHKUSER_ALWAYS_ON and CHKUSER_STARTING_VARIABLE cannot be defined together and in such a case a fatal error is displayed; (in previous versions CHKUSER_ALWAYS_ON would automatically disable CHKUSER_STARTING_VARIABLE definition).
    CHKUSER_DISABLE_VARIABLE is always evaluated after CHKUSER_ALWAYS_ON is set or CHKUSER_STARTING_VARIABLE is evaluated, so CHKUSER_ALWAYS_ON or CHKUSER_STARTING_VARIABLE can set the general behaviour, while CHKUSER_DISABLE_VARIABLE should be invoked to handle exceptions.
  • New variable for accepting qmail doublebounces: CHKUSER_ENABLE_DOUBLEBOUNCE_VARIABLE Sender "#@[]" will be accepted.
    It is used by qmail for doublebounces, and should be enabled for selected IP senders.

Updated features:

  • define CHKUSER_ENABLE_VAUTH_OPEN has been substituted by CHKUSER_VAUTH_OPEN_CALL: this new define must contain the name of the call used to open the auth DB
  • checking for ezmlm mailing list is now done looking for file "editor" within mailing-list directory
  • defines for allowed character within sender and rcpt addresses increased up to CHKUSER_ALLOW_SENDER_CHAR_10 and CHKUSER_ALLOW_RCPT_CHAR_10
  • updated SMTP error strings; more exact and detailed error codes; this should allow Outlook/Eudora to understand codes for rejected recipients (thanks to Olivier Dony and Dane Thorsen)
  • logging of valid rcpt. If CHKUSER_LOG_VALID_RCPT is defined then all valid recipients are logged, even if domain does not want bouncing or chkuser is disabled
  • logging senders. If CHKUSER_LOG_VALID_SENDER is defined then all valid senders are logged.

Bugs corrected:

  • negative checking of backend DB connection did not report DB unavailability in some situations (thanks to Matt Brookings of Inter7)
  • in check_rcpt_address_format format checking was done using defines reserved for senders

V 2.0.8b - release - 8 december 2004

Bugs corrected:

  • in qmail-smtpd.c, only when using Shupp Toaster and deleting -DTLS from conf-cc, chkuser.h was not included

V 2.0.8a - release - 8 december 2004

Bugs corrected

  • Corrects a typo error, that gives compile error with CHKUSER_STARTING_VARIABLE enabled.
if (strýcasecmp(starting_string, "ALWAYS") == 0) {

has been corrected in

if (strcasecmp(starting_string, "ALWAYS") == 0) {

V 2.0.8 - release - 7 december 2004


  • Freeze of new features of 2.0.7, except null senders behaviour.
  • CHKUSER_ENABLE_NULL_SENDER is no more available.
  • NULL SENDERS are now always accepted. No option is available to disable this behaviour. Previous chkuser versions broke RFC compatibility on null senders, and complicated real life e-mailing.
  • Logging of null senders <> is now available.

Bugs corrected

  • Sender controls were not executed if CHKUSER_STARTING_VARIABLE was defined (thanks to Charles Sprickman).
  • Domains not in control/virtualdomains are now explicitely excluded from following cascade checks; in previous versions following cascade checks were done using fake domains paths.
  • vget_assign is now handled correctly (a domain in rcpthosts but not in virtualdomains could have an incorrect path)

Defaults changed

  • CHKUSER_RCPT_FORMAT is now undefined as default
  • CHKUSER_RCPT_MX is now undefined as default
  • CHKUSER_SENDER_FORMAT is now undefined as default
  • CHKUSER_SENDER_MX is now undefined as default
  • CHKUSER_ERROR_DELAY_INCREASE new default is 300 milliseconds

V 2.0.7 - devel - 25 october 2004

New features:

  • added vclose() of DB auth connection, overriding qmail-smtpd _exit call
  • improved MX checking; now SOFT failure is handled as temporary error
  • added handling of mailman mailing lists (and related #define CHKUSER_ENABLE_MAILMAN_LISTS)
  • changed order of checking for recipients:
    1 - valias
    2 - alias
    3 - alias extensions
    4 - users
    5 - users extensions
    6 - lists
  • added #define CHKUSER_ACCEPT_NULL_SENDER (default defined)
  • added #define CHKUSER_ENABLE_ALIAS_DEFAULT (default not defined) enables checking of .qmail-alias-default
  • added #define CHKUSER_IDENTIFY_REMOTE_VARIABLE "CHKUSER_IDENTIFY" in order to allow a easy identification of remote IP (substitutes RELAYCLIENT in chkuser logging)
  • added #define CHKUSER_ALLOW_RCPT_SRS enable usage of "#" and "+" characters within rcpt address
  • added #define CHKUSER_ALLOW_RCPT_CHAR_1 '$'
  • added #define CHKUSER_ALLOW_RCPT_CHAR_2 '%'
  • added #define CHKUSER_ALLOW_RCPT_CHAR_3 '£'
  • added #define CHKUSER_ALLOW_RCPT_CHAR_4 '?'
  • added #define CHKUSER_ALLOW_RCPT_CHAR_5 '*'
  • #define CHKUSER_USERS_DASH substitutes #define CHKUSER_EXTENSION_DASH

Bugs solved:

  • Bugs sender address "name@" could cause a crash. Corrected (Thanks to Dmitry Petukhov)
  • Corrected Makefile: now qmail-smtpd.c recompiles if chkuser.h changes
  • Corrected a bug in #endif sequence related to #define CHKUSER_RCPT_FORMAT (thanks to Alex Plainer)
  • Corrected a bug in chkuser_sender; now is not executed when chkuser is disabled
  • Corrected check of format for domains: "xn--" admitted as leading string
  • Deleted correction over usage of RELAYCLIENT variable.
    Previous correction could damage a special feature of RELAYCLIENT (thanks to Alex Pleiner)

Default settings changed:

  • #define CHKUSER_ENABLE_NULL_SENDER_WITH_TCPREMOTEHOST (default is now undefined)

V 2.0.6 - update - 25 september 2004

No bugs, just doc updates and an empty patch file corrected

  • #define CHKUSER_ENABLE_VGET_REAL_DOMAIN was existing and working in code, but not reported both in docs and inside chkuser_settings.h (default is commented, but this #define is important)
  • patch for toaster-0.6-1 was empty. Now the correct one is provided

V 2.0.5 - release - 21 september 2004

This is the first public release.

  • added #define CHKUSER_ALLOW_SENDER_CHAR_1 (default not defined)
  • added #define CHKUSER_ALLOW_SENDER_CHAR_2 (default not defined)
  • added #define CHKUSER_ALLOW_SENDER_CHAR_3 (default not defined)
  • added #define CHKUSER_ALLOW_SENDER_CHAR_4 (default not defined)
  • added #define CHKUSER_ALLOW_SENDER_CHAR_5 (default not defined)
  • added #define CHKUSER_MIN_DOMAIN_LEN (default defined 4) - Previously it was hard coded as 5. Juergen Kendzorra showed me some existing names long only 4 chars.
  • added #define CHKUSER_LOG_VALID_SENDER (default defined)

V 2.0.4 - 15 september 2004

  • added #define CHKUSER_SENDER_NOCHECK_VARIABLE (default not defined)
  • added #define CHKUSER_DEBUG_STDERR (default not defined)
  • added #define CHKUSER_ALLOW_SENDER_SRS (default not defined)
  • cleaned some typos in code and documentation (thanks to Juergen Kendzorra -

V 2.0.3 - 8 september 2004

This is the first version released outside, for wider testing.

  • Tested Makefile for netqmail 1.05
  • Added Makefiles for applying over other patches

V 2.0.0 - july 2004

chkuser 2.0.0 starts here, and is a private internal release. Version 2.0 is much more modular than previous one (named chkusr), and has been designed with the goal of enabling more features and simplifying installations and upgrades of the patch himself.

  • chkusr changes his name, to reflect a deep change of the patch.

Chkusr 1.0 received a lot of feedbacks and suggestions. The most of these suggestions are now inside version 2.0.

  • Marcelo Coelho (marcelo at, signaled me some unseen minor bugs of chkusr 1.0 (minor but very annoying to my pride) and suggested some very interesting features (some of them are now in chkuser 2.0).
  • Iulian Margarintescu (http::// suggested a workable way of introducing quota check on recipients (now in chkuser 2.0).
  • Installation of 1.0 would have been much easier if a vpopmail dependencies file were available. I complained about such a lack with Jeremy Kitchen, so he enlightened me showing something that has already been existing since years: vpopmail's etc/lib_deps. Thanks Jeremy!