If that worked, try adding exit(0); as the first statement in src/auth/main.c's main() function to see if it returns 53 before or after it reaches that far.
I put some information output to the code (i do not have a debbuger running yet ;-) )
static void auth_process_input(void *context) { ... switch (i_stream_read(process->input)) { ... case -1: /* disconnected */ i_info("DIE 2"); auth_process_destroy(process); return; case -2: /* buffer full */ ... i_info("DIE 3"); auth_process_destroy(process); return; } The log is, >>> dovecot: Nov 21 02:52:09 Info: DIE 2 <<< dovecot: Nov 21 02:52:09 Error: Auth process died too early - shutting down dovecot: Nov 21 02:52:09 Error: child 1300 (auth) returned error 53