On Thu, Aug 30, 2007 at 12:27:39PM -0400, Ken Murchison wrote: > David Carter wrote: >> On Wed, 29 Aug 2007, David Carter wrote: >>> mboxname_isusermailbox() works on internal mailbox names. I don't think >>> that it needs to worry about IMAPOPT_UNIXHIERARCHYSEP. >> Here's a trivial patch to remove the IMAPOPT_UNIXHIERARCHYSEP stuff. >> Otherwise mboxname_isusermailbox() is broken when unixhierarchysep is set. > > I've modified your patch further, to make it look closer to the original > code. But I'm now wondering what the 'isdel' clause is trying to do. Once > we've stripped the deletedprefix and found "user.", we shouldn't care about > any timestamp, because a deleted Inbox, isn't an Inbox anymore. Correct? > Actually, can any deleted mailbox be considered a user mailbox since only > the admin can see them? > > if (!strncmp(start, "user.", 5) && (!isinbox || !strchr(start+5, '.')) > || (isdel && (p = strchr(start+5, '.')) && !strchr(p+1, '.'))) > return (char*) start+5;
Actually, that's buggy. Here's the corrected version (full patch attached) /* starts with "user." AND * we don't care if it's an inbox OR * there's no dots after the username OR * it's deleted and there's only one more dot */ if (strlen(start) > 5 && !strncmp(start, "user", 4) && start[4] == '.' && (!isinbox || !strchr(start+5, '.') || (isdel && (p = strchr(start+5, '.')) && !strchr(p+1, '.')) )) return (char*) start+5; /* could have trailing bits if isinbox+isdel */ Basically, a user's inbox looks like: domain.com!user.username a deleted inbox looks like: domain.com!DELETED.user.username.46D16085 (or whatever timestamp) So if isinbox, we want to check that either there's no more dots if it's not deleted, or one more dot if it is deleted. Bron.