new release of postal

Today I have released a significant new version of my mail server benchmark Postal! The list of changes is below:

  • Added new program bhm to listen on port 25 and send mail to /dev/null. This allows testing mail relay systems.
  • Fixed a minor bug in reporting when compiled without SSL.
  • Made postal write the date header in correct RFC2822 format.
  • Removed the name-expansion feature, it confused many people and is not needed now that desktop machines typically have 1G of RAM. Now postal and rabid can have the same user-list file.
  • Moved postal-list into the bin directory.
  • Changed the thread stack size to 32K (used to be the default of 10M) to save virtual memory size (not that this makes much difference to anything other than the maximum number of threads on i386).
  • Added a minimum message size option to Postal (now you can use fixed sizes).
  • Added a Postal option to specify a list of sender addresses separately to the list of recipient addresses.
  • Removed some unnecessary error messages.
  • Handle EINTR to allow ^Z and “bg” from the command line. I probably don’t handle all cases, but now that I agree that failure to handle ^Z is an error I expect bug reports.
  • Made the test programs display output on the minute, previously they displayed once per minute (EG 11:10:35) while now it will be 11:10:00. This also means that the first minute reported will have something less than 60 seconds of data – this does not matter as a mail server takes longer than that to get up to speed.
  • Added support for GNUTLS and made the Debian package build with it. Note that BHM doesn’t yet work correctly with TLS.
  • Made the programs exit cleanly.

Thanks to Inumbers for sponsoring the development of Postal.

I presented a paper on mail server performance at OSDC 2006 that was based on the now-released version of Postal.

I’ve been replying to a number of email messages in my Postal backlog, some dating back to 2001. Some of the people had changed email address during that time so I’ll answer their questions in my blog instead.

/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
In file included from /usr/include/openssl/ssl.h:179

One problem reported by a couple of people is having the above error when compiling on an older Red Hat release (RHL or RHEL3). Running ./configure –disable-ssl should work-around that problem (at the cost
of losing SSL support). As RHEL3 is still in support I plan to fix this bug eventually.

There was a question about how to get detailed information on what Postal does. All three programs support the options -z and -Z to log details of what they do. This isn’t convenient if you only want a small portion of the data but can be used to obtain any information you desire.

One user reported that options such as -p5 were not accepted. Apparently their system had a broken implementation of the getopt(3) library call used to parse command-line parameters.

2 comments to new release of postal

  • Frank

    postal-0.67 fails to compile on RHEL 4, Fedora 7 and also Fedora Core 4. Error from RHEL 4 is:

    g++ -O2 -g -Wall -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wcast-qual -Woverloaded-virtual -pedantic -ffor-scope rabid.cpp userlist.o thread.o results.o address.o tcp.o cmd5.o mutex.o logit.o expand.o client.o -o rabid -lstdc++ -lssl -lcrypto -lpthread
    g++ -O2 -g -Wall -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wcast-qual -Woverloaded-virtual -pedantic -ffor-scope -c basictcp.cpp
    basictcp.cpp:17: error: `int base_tcp::m_init_dh_params’ is not a static member of `class base_tcp’
    basictcp.cpp:18: error: `gnutls_dh_params_t’ does not name a type
    basictcp.cpp:18: error: extra `;’
    make: *** [basictcp.o] Error 1

    Any hints?

  • Nik

    I have the same compile errors on RHEL4:
    basictcp.cpp:17: error: `int base_tcp::m_init_dh_params’ is not a static member of `class base_tcp’
    basictcp.cpp:18: error: `gnutls_dh_params_t’ does not name a type
    basictcp.cpp:18: error: extra `;’
    basictcp.cpp:206: error: no `int base_tcp::disconnect()’ member function declared in class `base_tcp’
    make: *** [basictcp.o] Error 1

    This is a bug! If someone fix it, please, tel me how.