From 9de1728850bf14aba043b23c895f815a3ab0c64f Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Wed, 18 Sep 2019 20:35:23 -0500 Subject: [PATCH] ipropd-slave: don't send I_HAVE in response to AYT ipropd-master sends AYT messages often as a result of a possibly- transient error, but if the slave responds to such an AYT with I_HAVE, then the same code path that failed will be executed on the master, and if the error wasn't transient then we'll loop hard. So don't send an I_HAVE in response to an AYT. --- lib/kadm5/ipropd_slave.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/kadm5/ipropd_slave.c b/lib/kadm5/ipropd_slave.c index 75ac5a225..9f0b38d0a 100644 --- a/lib/kadm5/ipropd_slave.c +++ b/lib/kadm5/ipropd_slave.c @@ -1023,11 +1023,14 @@ main(int argc, char **argv) if (verbose) krb5_warnx(context, "master sent us a ping"); is_up_to_date(context, status_file, server_context); - ret = ihave(context, auth_context, master_fd, - server_context->log_context.version); - if (ret) - connected = FALSE; - + /* + * We used to send an I_HAVE here. But the master may send + * ARE_YOU_THERE messages in response to local, possibly- + * transient errors, and if that happens and we respond with an + * I_HAVE then we'll loop hard if the error was not transient. + * + * So we don't ihave() here. + */ send_im_here(context, master_fd, auth_context); break; case YOU_HAVE_LAST_VERSION: