popper -- POP protocol implementation


Syntax /etc/popper [ -a ] [ -b buildir ] [ -c ] [ -d ] [ -e login_delay=nn,expire=nn ] [ -k ] [-M ] [ -R ] [ -s ] [ -t trace-file ] [ -T timeout ]

Description popper is a POP3 server to enable POP3 clients to read and download mail. This server implements the POP protocol defined in RFC 1939 and the RFC 2449 extensions.

The server also enables clients to send mail using XTND XMIT, which is handed over to sendmail(ADMN).


-a Tells popper to allow access to users with a user ID number of 10 or less. popper normally disallows access to such users' mailboxes for security reasons.

-b bulldir Turns on the bulletin feature and specifies the bulletin directory path. The command line overrides the compiled value if it is defined. To enable bulletins by default and specify a default bulletin directory during compilation, include the --enable- bulletins=bull-directory flag when running ./configure. The usual bulletin directory is /var/spool/bulls.

A bulletin database can be used to track the bulletins instead of the users' home directory. This feature is enabled by including the --enable-bulldb=bull-directory flag when running ./configure. This also requires creating two blank files in the bulletin directory, called bulldb.pag and bulldb.dir.

-c Downcases user names. This permits users to configure their clients with user names in UPPER or MiXeD case, and still login, assuming their actual user name is all lower case.

-d Turns on debug logging if compiled (pass --enable- debugging to ./configure). All debugging information is saved using syslog(SLIB).

-e x=value,... Sets POP3 extensions. Sets x to the specified value. Used to announce a Login Delay and/or Expire response tags to the CAPA command.

Remember neither Expire nor Login Delay is enforced by popper; Sysadmins have to implement them by some other means. However, you can enforce EXPIRE 0 (no retention at all) by using the --enable-auto-delete flag with ./configure. This causes messages to be automatically deleted after they are downloaded.

-M Ignored without error, for compatibility with the popper supplied with SCO OpenServer Release 5.0.0 and SCO OpenServer Release 5.0.2.

-R Disables reverse lookups on client IP addresses.

-s Turns on statistics logging using syslog(SLIB)or trace- file. At the end of each popper session, the following information is logged: username, number of messages deleted, number of bytes deleted, number of message left on server, number of bytes left on server.

-T timeout option changes the default compiled value POP_TIMEOUT for terminating a session with a pop client.

When the server is waiting for a command to arrive from the client, it times out after the specified number of seconds and terminates the session. This avoids having popper processes hang forever waiting for command input from clients which have terminated abnormally or are hung.

A small value is ok for small to medium networks where the network delay is within a few seconds. In this case 15-30 seconds is not unreasonable. Networks with large delays in sending packets (e.g., SLIP links) may require a larger value. In this case 300 seconds (5 minutes) is not unreasonable.

-t trace-file Turns on debug logging if compiled (pass --enable- debugging to ./configure) and writes the trace information in trace-file using fprintf(S).

Processing Options are described below.

Processing Options Here are some options the values of which are announced to clients. Syntax of the options is:


This sets option opt to be value. Multiple options can be specified at one instance and are comma separated.

The following are the options supported: login_delay expire

Bulletins The bulletin feature gives system administrators a way to send important announcements to all POP users without having to do mass mailings.

The bulletin directory contains one file per bulletin. Each file contains a single mail message with a header and body in normal mailbox format. The first line of each such bulletin must be a "From " line. The easiest way for System Administrators to create such bulletins is to mail themselves a copy of the bulletin using the account to which they want replies to be sent, then use their mail program to save the message to a file in the bulletin directory in mailbox format. The bulletin directory must be world readable.

The name of each bulletin file begins with the bulletin number, and may optionally continue with any other characters. E.g., the file name of bulletin number 23 might be "23.pophost_down_sunday".

Popper creates a file named .popbull in the home directory of each user. This file contains a single line recording the highest numbered bulletin received by the user.

Each time a POP client connects to the server, any new bulletins which the user has not received previously are automatically appended to the user's mail.

When a bulletin is copied, the "To" header line is replaced by "To: username@thishost", and any "Status:" header lines are deleted. Otherwise, the bulletin is copied as is.

When a new user checks for mail the first time, popper creates the .popbull file in the user's home directory and seeds it with the current maximum bulletin number. Thus new users do not get old bulletins.

Bulletins can be enabled by default, and the bulletin directory specified, by including the --enable- bulletins=bull-directory flag when running ./configure.

To use a database instead of .popbull files in users' home directories for tracking the highest bulletin seen by a user, include the --enable-bulldb=bull-directory flag when running ./configure. You must also create two empty files in the bulletin directory, called bulldb.pag and bulldb.dir. When a bulletin database is used, popper checks for and uses any .popbull files in the user's home directory, to provide continuity.

To specify the maximum number of bulletins sent to new users, include the --with-new-bulls flag when running ./configure. For example, --with-new-bulls=10 says that new users get at most ten bulletins.

The POP Transaction Cycle The Qpopper server is a single program (called popper) that is launched by inetd (ADMN) when it gets a service request on the POP TCP port. (The official port number specified in RFC 1939 for POP version 3 is port 110. However, some POP3 clients attempt to contact the server at port 109, the POP version 2 port. Unless you are running both POP2 and POP3 servers, you can simply define both ports for use by the POP3 server. This is explained in the installation instructions later on.)

The popper program initializes and verifies that the peer IP address is registered in the local domain (unless the -R command-line option is used), logging a warning message when a connection is made with a client whose IP address does not have a canonical name. For systems using BSD 4.3 bind, it also checks to see if a canonical name lookup for the client returns the same peer IP address, logging a warning message if it does not.

The server enters the authorization state, during which the client must correctly identify itself by providing a valid Unix userid and password on the server's host machine (or successfully authenticate using APOP or AUTH). No other exchanges are allowed during this state (other than a request to quit.) If authentication fails, a warning message is logged and the session ends.

Once the user is identified, popper changes its user and group id's to match that of the user and enters the transaction state. The server makes a temporary copy of the user's maildrop which is used for all subsequent transactions (unless running in server mode ). These include the bulk of POP commands to retrieve mail, delete mail, undelete mail, and so forth.

When the client quits, the server enters the final update state, during which the network connection is terminated and the user's maildrop is updated with the (possibly) modified temporary maildrop.

Logging The POP server uses syslog to keep a record of its activities. The default log file is /usr/adm/syslog. This can be changed, if desired. Note that /etc/popper is compiled to use the LOCAL1 facility.

Debugging Qpopper logs debugging information when the -d parameter is specified after its invocation in the inetd.conf file. Care should be exercised in using this option since it generates considerable output in the syslog file. Alternatively, the "-t <file-name>" option places debugging information into file "<file-name>" using fprintf instead of syslog.

You can confirm that the POP server is running by telneting to port 110 (or 109 if you set it up that way). For example:

%telnet 110 Trying... Connected to Escape character is '^]'. +OK QPOP (version 3.0) at starting. quit +OK Pop server at signing off. Connection closed by foreign host.

Extentsions The server implements several extended commands.

XTND XMIT: Sends a mail message using /usr/lib/sendmail.

XTND XLIST header [num]: Extracts and returns the specified header line for the specified message number. If the "num" parameter is missing, returns the header line for all the messages which are not currently marked for deletion.

XMANGLE: Can be used as a modifier to the TOP, RETR, LIST commands. The result is to condense MIME messages into a single part. For example:

RETR 10 XMANGLE(text=html;headers=to:,cc:,from:,date:) results in transforming message 10 into a single part of content-type text/html with only those headers which were requested.

Qpopper also supports the "-no-mime" user name hack. As a way to enable MIME-mangling with clients that do not support XMANGLE, add "-no-mime" to the user name. For example, if the userid is "mary", enter it in the client as "mary-no- mime".

Files /usr/spool/mail mail files /etc/inetd.conf pop program invocation /etc/syslog.conf logging specifications ~/.popbull largest bulletin number seen by user

See Also inetd(ADMN), inetd.conf(SFF), sendmail(ADMN)

Authors Praveen Yaramada, Laurence Lundblade, Randall Gelles, Mark Erickson, Bob Campbell, Edward Moy, Austin Shelton, Marshall T Rose, and cast of thousands at Rand, UDel, UCI, QUALCOMM Incorporated and the Internet user community.

© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003