Hi,

I decided to make a stack trace from imapd which finally resolved the segmentation 
fault issue (indirectly):

#0  prot_printf (s=0x0, fmt=0x8081f99 "* BYE Fatal error: %s\r\n") at prot.c:616
616         assert(s->write);
(gdb) bt
#0  prot_printf (s=0x0, fmt=0x8081f99 "* BYE Fatal error: %s\r\n") at prot.c:616
#1  0x0804d4c3 in fatal (s=0x8086500 "configdirectory option not specified in 
configuration file", code=75) at imapd.c:638
#2  0x0806da2c in config_init (alt_config=0x0, ident=0xbffffa4c "service-imap") at 
config.c:103
#3  0x0804b9dc in main (argc=1, argv=0xbffffaf4, envp=0xbffffafc) at service.c:174
#4  0x401e068d in __libc_start_main (main=0x804b904 <main>, argc=1, ubp_av=0xbffffaf4, 
init=0x804a9e4 <_init>, fini=0x8080fe0 <_fini>,
    rtld_fini=0x4000b8b4 <_dl_fini>, stack_end=0xbffffaec) at 
../sysdeps/generic/libc-start.c:129

So it seems to complain about the configurationfile and crashed because it fails to 
print the errormessage due to the NULL-pointer.
After I had a closer look at my config file I found that I had made a little typo:
cpnfigdirectory: /var/imap

After fxing the config file and rerunning the mkimap script cyrus started up normally.
I looked into the source to find out why s is null but I couldn't find any errors:

void fatal(const char *s, int code)
{
    static int recurse_code = 0;
    if (recurse_code) {
        /* We were called recursively. Just give up */
        proc_cleanup();
        snmp_increment(ACTIVE_CONNECTIONS, -1);
        exit(recurse_code);
    }
    recurse_code = code;
    prot_printf(imapd_out, "* BYE Fatal error: %s\r\n", s);
    prot_flush(imapd_out);
    shut_down(code);
}

Why is s == 0 when it is passed to prot_printf()?

Regards, Georg

--
Vote against Spam!
http://www.politik-digital.de/spam/de/
The European Coalition Against Unsolicited Commercial Email:
http://www.euro.cauce.org//

Reply via email to