Debug Dovecot Plugin (shared library)

Timo Sirainen tss at iki.fi
Thu Dec 24 17:35:09 UTC 2015


On 24 Dec 2015, at 14:26, David Becher <becher.david at googlemail.com> wrote:
> 
> Hey!
> 
> I was just wondering what would be the best way to debug a plugin I am currently writing for dovecot.
> The plugin basically registers a new IMAP capability and I want to set a breakpoint to the "cmd_handle_new_capability" function (thats just a function name for better explaining purposes).
> 
> Right now I have opened a connection via openssl ('openssl s_client -connect example:143 -starttls imap') to be able to mess around with the my server. Then I am able to login into the server via 'a login "username" "password"' and feed the server with my self created IMAP capability command.
> 
> I know that I can start gdb and attach to an already running process via its PID. But how do I know which process I have to attach to? Looking at the output of 'top' it seems to be an instance of the 'imap' command
> 
> PID		USER	PR	NI	VIRT	RES		SHR	S	%CPU	%MEM	TIME+	COMMAND
> 13413	vmail	20	0	21004	1844	1524	S	0.0		0.0		0:00.00	Iman
> 
> But its only started the exact moment I issue my IMAP command towards the server, so of course I am not fast enough to track down the PID before the function has returned, so the process handling the command seems to be up only for the short period of time to handle the command, there is no process before which I can attach to.
> 
> My current workaround is that I put a tail onto /var/log/mail.log and from within my shared library function (cmd_handle_new_capability) I log the PID of the current process, then sleep(10) for 10 seconds, which gives me enough time to have a look at mail.log to get to know the PID which I then can attach to. But isn't there a better way to do this? Maybe attach to the process which originally creates the new process handling the IMAP command and then stepping into it?

If you need to actually login the normal way, that's pretty much the only way. Otherwise you could just run:

gdb --args /usr/libexec/dovecot/imap -u user at domain



More information about the dovecot mailing list