kick_mupdate error message

Wesley Craig wes at
Wed Dec 28 22:35:32 EST 2011

The short answer is that "kick_mupdate()" makes no sense on a backend in the configuration you're talking about.  The long answer is that calls to kick_mupdate() are liberally sprinkled through the code, primarily involving calls that manipulate mailboxes or acls (xfer does both, naturally).  Some of those calls are protected by a configuration check, others by a different configuration check, and some not protected at all.

kick_mupdate() is supposed to talk to the locally running mupdate (there isn't one running on the backend in your configuration, hence the error) to force a NOOP to be sent the mupdate master.  The NOOP will cause the mupdate master to flush any pending mailbox list updates to the NOOP-ing host -- a frontend.  Backends don't participate in the streaming of mailbox list updates in the standard murder configuration, because (!) the are the source of the mailbox list updates.  Hence no need to check with the mupdate master to see if they have all the right bits.


On 28 Dec 2011, at 13:38, Andrew Morgan wrote:
> I moved a test mailbox from one cyrus backend (v2.3.16) to another backend 
> (2.4.13beta1).  The move succeeded with the following log entry on the new 
> backend:
> Dec 28 10:22:20 cyrus-be1 imap[4802]: login: [] cyr_proxy PLAIN User logged in
> Dec 28 10:22:20 cyrus-be1 imap[4802]: kick_mupdate: can't connect to target: No such file or directory
> Dec 28 10:22:20 cyrus-be1 imap[4802]: Index upgrade: user.morgana (10 -> 12)
> Dec 28 10:22:21 cyrus-be1 imap[4802]: USAGE cyr_proxy user: 0.004000 sys: 0.028001
> The kick_mupdate message comes from the kick_mupdate() function in 
> imap/mupdate-client.c:
>     strlcpy(buf, config_dir, sizeof(buf));
>     strlcat(buf, FNAME_MUPDATE_TARGET_SOCK, sizeof(buf));
>     memset((char *)&srvaddr, 0, sizeof(srvaddr));
>     srvaddr.sun_family = AF_UNIX;
>     strcpy(srvaddr.sun_path, buf);
>     len = sizeof(srvaddr.sun_family) + strlen(srvaddr.sun_path) + 1;
>     r = connect(s, (struct sockaddr *)&srvaddr, len);
>     if (r == -1) {
>         syslog(LOG_ERR, "kick_mupdate: can't connect to target: %m");
>         goto done;
>     }
> How is this supposed to work?  mupdated is running on another host, so why 
> is it trying to connect via a unix socket?

More information about the Info-cyrus mailing list