# Courier-IMAP FAQ

    $Id: FAQ.html,v 1.16 2003/07/24 23:04:54 mrsam Exp $

## Table of contents

- Configuration script fails on Solaris in the `waitlib` subdirectory
- Compiling Courier-IMAP on OS/X
- Netscape Messenger displays an error message when new mail arrives
- I can't create any top-level folders, only subfolders of INBOX
- I don't know how to build binary RPMs as non-root
- I have OpenLDAP, or OpenSSL, or MySQL installed, but Courier-IMAP does not see it
- Configuration script reports the following error, and stops: "Cannot find either the gdbm or the db library"
- Configuration script fails in the `gdbmobj` or `bdbobj` subdirectory.
- `gmake check` fails on Compaq Tru64 UNIX
- Asking for help on the courier-users mailing list

## Configuration script fails on Solaris in the`waitlib` subdirectory

This is a self-test check failing. A script tests the semantics of the wait() system call, and fails. Apparently something in Solaris's wait() logic is not working the way I expect it to work. This may or may not be a problem. I don't know yet. You can use the `--with-waitfunc=wait3` option to the `configure` script to bypass this test, but you're own your own.

UPDATE: 5/3/2000, there's a Solaris bug ID that is fixed by a recent kernel update:

          4220394 wait3  library function fails after 248 days

Try installing this update to see if it fixes the problem. Some people reported that this kernel update fixes the configuration failure, but some people reported that the problem still exists.

## Compiling Courier-IMAP on OS/X

Set the RANLIB environment variable before running the `configure` script, as follows:

>     RANLIB="ranlib -c"
>     export RANLIB
>     ./configure [ options ]

## Netscape Messenger displays an error message when new mail arrives

Use `--enable-workarounds-for-imap-client-bugs` option to the `configure` script.

## I can't create any top-level folders, only subfolders of INBOX

This is a configuration issue with your mail client. IMAP servers are free to use any folder namespace arrangement that's technically convenient for them. Courier-IMAP uses "INBOX." as the namespace for private folders, and "shared." as the namespace for public, shared, folders. The IMAP NAMESPACE extension (see `http://www.rfc-editor.org/rfc/rfc2342.txt`) allows IMAP clients to automatically discover where the server creates folders, and your IMAP client should implement it.

This should be completely transparent to you, if your IMAP client properly uses the `NAMESPACE` extension. If your IMAP client were to automatically take advantage of self-configuration features offered by RFC 2060 and RFC 2342, it would automatically discover, without any additional configuration from the user, that:

1. The folder namespace hierarchy separator is the . character
2. Private folders are stored underneath the "`INBOX.`" hierarchy
3. Public folders are stored underneath the "`shared.`" hierarchy

If you have to explicitly create folders that are subfolders of INBOX, or if you explicitly have to name that "`INBOX.foldername`", this is due to your IMAP client not being able to configure itself accordingly.

## I don't know how to build binary RPMs as non-root

If you're going to build stuff with RPM, then you should really go out and get a copy of the "Maximum RPM" book. It's very out of date, but if you learn the basics, you'll be able to figure the rest out by yourself. The following instructions are applicable to RPM 3.0.4, or higher.

First, you need to create a mirror image of the main RPM directory in your account:

        mkdir $HOME/rpm
        mkdir $HOME/rpm/SOURCES
        mkdir $HOME/rpm/SPECS
        mkdir $HOME/rpm/BUILD
        mkdir $HOME/rpm/SRPMS
        mkdir $HOME/rpm/RPMS
        mkdir $HOME/rpm/RPMS/i386

Use `sparc`, or `alpha`, or whatever's appropriate. Finally:

        echo "%_topdir    $HOME/rpm" >> $HOME/.rpmmacros

That's it, now you can build your RPMs:

        rpm -ta courier-imap-0.34.tar.gz

## I have OpenLDAP, or OpenSSL, or MySQL installed, but Courier-IMAP does not see it

Courier-IMAP has optional features that use external libraries and products, such as OpenLDAP, MySQL, or OpenSSL. If available, Courier-IMAP can authenticate against an accounts database stored in a MySQL database or an LDAP directory. If OpenSSL is available Courier-IMAP can provide secure IMAP access.

Normally, if the configuration scripts detects that any one of these external libraries is installed, the appropriate code will be automatically compiled and installed. However, for an external library to be detected, it must be installed wherever the C or the C++ compiler looks for libraries.

Courier-IMAP relies on the C or the C++ compiler to detect the availability of a particular library. If, for example, OpenSSL is installed in the directory `/usr/local/ssl` chances are that the C or the C++ compiler does not usually search this directory for libraries or include files. Most C and C++ search only the directories `/lib`, `/usr/lib`, and `/usr/include` (for include files).

All C and C++ compiler allow you to specify any additional directories to search, beside the default ones. The configuration script uses the environment variables `CPPFLAGS`, `CFLAGS`, and `LDFLAGS` to pass extra options to the compiler's preprocessor, the compiler itself, and the linker.

For example, if OpenSSL's include files are installed in the directory `/usr/local/ssl/include`, and OpenSSL libraries are installed in `/usr/local/ssl/lib`, the `gcc` compiler needs to have the `-I/usr/local/ssl/include` option for the preprocessor, and the `-L/usr/local/ssl/lib` option for the linker. So, to have the configuration script detect OpenSSL, use the following commands:

    CPPFLAGS="-I/usr/local/ssl/include"
    LDFLAGS="-L/usr/local/ssl/lib"
    export CPPFLAGS
    export LDFLAGS
    ./configure [ options ]

The same applies for OpenLDAP, MySQL, and any other library. The configuration script does not maintain a list of all the non-standard locations where various libraries get installed by default, because that's subject to change at any time. The configuration script will expect that either the optional libraries (runtime and development) are installed in the default locations that are searched by the compiler, or that additional flags are explicitly specified by the installer.

## Configuration script reports the following error, and stops: "Cannot find either the gdbm or the db library"

Courier-IMAP requires either the GDBM library or the Berkeley DB library to be installed. If you have the library installed, it is possible that it is installed in a non-standard location. See the "I have OpenLDAP, or OpenSSL, or MySQL installed" question for how to resolve this situation.

## Configuration script fails in the `gdbmobj` or `bdbobj` subdirectory.

There are two possible causes of this error:

- A C++ compiler is not installed.
- The corresponding library is installed in a non-standard location.

Although Courier-IMAP is written in C, some self-test scripts are written in C++. It is necessary to have a working C++ compiler and libraries installed in order to compile Courier-IMAP

Another reason for this error is that the GDBM or the Berkeley DB library is not installed in a directory that is searched by the C and C++ compilers, by default. See the "I have OpenLDAP, or OpenSSL, or MySQL installed" question for how to resolve this situation.

### `gmake check` fails on Compaq Tru64 UNIX

A patchkit for Tru64 5.x that fixes this problem is scheduled to be released by Compaq in early spring 2002. Tru64 4.x is not affected by this problem.

### Asking for help on the courier-users mailing list

A: The courier-users mailing list should be the first place to look for assistance with resolving any issues. You only need to observe a few simple rules in order to increase your chances of getting a quick and helpful response:

1. Subscribe to the mailing list before you ask any questions. If you are not subscribed, you will not receive any replies that are mailed to the list only.
2. Do not send HTML E-mail messages, unless you want many people to automatically delete them, unread. If you are using MS-Outlook, turn off HTML formatting before sending mail to the list.
3. Before sending a question, check it to make sure that your message does not contain the words "doesn't work." Saying only that something doesn't work is not very useful in trying to analyze the problem. If something isn't working correctly, merely stating it will not make much progress. Be sure to always include in your messages:
   - The contents of any related configuration files.
   - What happens, exactly, that makes you think that something isn't working right.
   - The contents of your system log file (syslog, or `/var/log/messages`).
   - Be sure to describe any non-standard modifications to the operating system you're using, such as a kernel hacked with one of several varieties of the OpenWall patch, or filesystema mounted with a no-suid option. Many problems turn out to be unintentional conflicts with various unexpected side-effects of these custom modifications (but not after wasting a great deal of time chasing ghosts).
4. Do not send large attachments (over 10K bytes is a rule of thumb), to the list. Put it somewhere - on the web or on a FTP server - and include a link in your message instead.
5. Always mention what you've already tried to do in order to fix the problem. People are more likely to help you if they know that you've made some effort to figure it out by yourself, and you are only asking for help after running into a dead end.
6. If you do not get an answer in one hour, don't resend your message. If people open their mailbox and see five copies of the same message, they'll be ignored. Have patience. Either wait some more, or accept it as a fact of life. Try again to figure out the answer on your own. You can certainly ask again after you've tried to figure it out once more, and still didn't get anywhere. Don't just write again, and simply say that it still doesn't work. Provide some additional information, showing what else you've tried to do, to no avail.