The quota parameter to verify_user() is quota_t, not long.
Solaris 10 with bundled GCC 3.4.3 wasn't doing type promotion correctly. (long)(-1) becomes (long long int)(4294967295), which is >= 0.
Consequently IGNOREQUOTA had no effect. -- David Carter Email: david.car...@ucs.cam.ac.uk University Computing Service, Phone: (01223) 334502 New Museums Site, Pembroke Street, Fax: (01223) 334679 Cambridge UK. CB2 3QH. Index: imap/lmtpengine.c =================================================================== RCS file: /data/ucvs/hermes/src/cyrus-imapd/imap/lmtpengine.c,v retrieving revision 1.1.1.1 diff -u -d -r1.1.1.1 lmtpengine.c --- imap/lmtpengine.c 25 Mar 2009 17:02:48 -0000 1.1.1.1 +++ imap/lmtpengine.c 22 Apr 2009 13:48:05 -0000 @@ -809,7 +809,7 @@ static int process_recipient(char *addr, struct namespace *namespace, int ignorequota, int (*verify_user)(const char *, const char *, - char *, long, + char *, quota_t, struct auth_state *), message_data_t *msg) { @@ -898,7 +898,7 @@ ret->user = NULL; r = verify_user(ret->user, ret->domain, ret->mailbox, - ignorequota ? -1 : msg->size, msg->authstate); + (quota_t)(ignorequota ? -1 : msg->size), msg->authstate); if (r) { /* we lost */ free(ret->all);