Re: [Dovecot] Wrong UIDs returned from mailbox_transaction_commit_get_uids()

2008-04-01 Thread Ron Avriel
> > 
> > It should be:
> > 
> > int mailbox_transaction_commit(struct mailbox_transaction_context **t)
> > {
> > uint32_t tmp1, tmp2, tmp3;
> > 
> > return mailbox_transaction_commit_get_uids(t, &tmp1, &tmp2, &tmp3);
> > }
> 
> How/where does this help? The tmp values are ignored in any case, so I
> don't think this is the right fix for it.
> 


The problem occurs if transaction_commit() is hooked.
In mail_log plugin I wanted to print the committed UIDs. I changed 
mail_log_transaction_commit()
to:
{
...
ret =  lbox->super.transaction_commit(t, uid_validity_r,
  first_saved_uid_r,
  last_saved_uid_r);
if (0 == ret) {
i_info("uid_validity=%u, first_uid=%u, last_uid=%u", 
*uid_validity_r, *first_saved_uid_r, *last_saved_uid_r);
}
return ret;
}

the result was:
Apr  1 14:59:37 ha-test1 deliver([EMAIL PROTECTED]): uid_validity=1202218363, 
first_uid=1202218363, last_uid=1202218363

These values are equal to the UID validity.

After changing mailbox_transaction_commit() as described above, I got correct 
values:
Apr  1 15:09:50 ha-test1 deliver([EMAIL PROTECTED]): uid_validity=1202218363, 
first_uid=139, last_uid=139

Ron



 


  

You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.  
http://tc.deals.yahoo.com/tc/blockbuster/text5.com



[Dovecot] Wrong UIDs returned from mailbox_transaction_commit_get_uids()

2008-03-31 Thread Ron Avriel
Hi,

Wrong UIDs are returned from mailbox_transaction_commit_get_uids() in 
dovecot-1.1.rc3.

The problem is in:

int mailbox_transaction_commit(struct mailbox_transaction_context **t)
{
uint32_t tmp;

return mailbox_transaction_commit_get_uids(t, &tmp, &tmp, &tmp);
}


It should be:

int mailbox_transaction_commit(struct mailbox_transaction_context **t)
{
uint32_t tmp1, tmp2, tmp3;

return mailbox_transaction_commit_get_uids(t, &tmp1, &tmp2, &tmp3);
}

After this fix it works OK.

Thanks,
Ron






  

You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.  
http://tc.deals.yahoo.com/tc/blockbuster/text5.com



[Dovecot] Flags can be changed in read-only mode

2008-03-30 Thread Ron Avriel
Hi,

It seems that IMAP flags can be changed in EXAMINE read-only mode. Luckily, 
messages cannot be expunged.
This happens in both dovecot 1.0.12 and 1.1.rc3:

* OK Dovecot ready.
1 login *** ***
1 OK Logged in.
2 examine inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1206865015] UIDs valid
* OK [UIDNEXT 2] Predicted next UID
2 OK [READ-ONLY] Select completed.
3 fetch 1:* flags
* 1 FETCH (FLAGS (\Recent))
3 OK Fetch completed.
4 store 1:* +flags (\Deleted)
* 1 FETCH (FLAGS (\Deleted \Recent))
4 OK Store completed.
5 fetch 1:* flags
* 1 FETCH (FLAGS (\Deleted \Recent))
5 OK Fetch completed.
6 expunge
6 OK Expunge completed.
7 fetch 1:* flags
* 1 FETCH (FLAGS (\Deleted \Recent))
7 OK Fetch completed.



Thanks,
Ron





  

Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ



Re: [Dovecot] Wrong message information reported shortly after delivery

2008-03-09 Thread Ron Avriel
> Thanks, in my previous tests I didn't use quota plugin with deliver
> which was needed to notice this. The problem is:
> 
> 1. deliver adds "message appended" to index file
> 2. quota plugin runs for a while
> 3. deliver updates filename<->uid mapping in dovecot-uidlist
> 


Thanks for the quick answer.

Why does it take four seconds (!) from the time dovecot first reports an 
invalid message information until the correct information is reported? 
The time is measured for the delivery of a 1KB message to an empty  mailbox on 
a completely idle system.

2008-03-09 17:00:41.449833 Sent 1011 bytes to [EMAIL PROTECTED]
2008-03-09 17:00:41.472034 No messages in INBOX. Waiting...
2008-03-09 17:00:42.480654 No messages in INBOX. Waiting...
2008-03-09 17:00:43.487617  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:44.494382  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:45.501444  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:46.550623  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:47.593704 Got valid RFC822.SIZE 1509: 1 (FLAGS (\Recent) 
INTERNALDATE "09-Mar-2008 17:00:41 +0200" RFC822.SIZE 1509 UID 63)


Thanks again,
Ron




  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs



Re: [Dovecot] Wrong message information reported shortly after delivery

2008-03-09 Thread Ron Avriel
> Can you reproduce it without your IMAP client? For example using  
> imaptest (http://imapwiki.org/ImapTest) as the client and running:
> 

Hi,

Here's some more information on how to easily reproduce the problem.
First, I'd like to describe my environment:
OS - RHEL4, FS - ext3, dovecot 1.0.12. See dovecot -n at end of message.
Messages are delivered via dovecot deliver invoked by postfix.
The problem is reproduced when the system is completely idle - 
no user is logged in, except the test user.

I wrote a short python script (attached) that reproduces the problem
very easily. The script sends an email via SMTP, then IMAP
fetches from inbox to check when message arrives.
Once it arrives it checks if the size is zero and reports it.
The script ends when dovecot reports a non-zero message size.
The script consistently reproduces the problem on every RHEL4
server I tested (weak and strong) and with any file size.

The script is run as ./send_fetch_test.py USER PASSWORD FILE [SERVER]

FILE - any file. Contents doesn't matter.
NOTE - The script initially deletes all messages from inbox just
to minimize output. The problem occurs also when other messages exist.

Here's a sample output:
2008-03-09 17:00:41.449833 Sent 1011 bytes to [EMAIL PROTECTED]
2008-03-09 17:00:41.472034 No messages in INBOX. Waiting...
2008-03-09 17:00:42.480654 No messages in INBOX. Waiting...
2008-03-09 17:00:43.487617  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:44.494382  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:45.501444  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:46.550623  ERROR: Got invalid RFC822.SIZE 0: 1 (FLAGS 
(\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" RFC822.SIZE 0 UID 63)
2008-03-09 17:00:47.593704 Got valid RFC822.SIZE 1509: 1 (FLAGS (\Recent) 
INTERNALDATE "09-Mar-2008 17:00:41 +0200" RFC822.SIZE 1509 UID 63)

For this output I attached also the IMAP network capture and a 
strace of the imap process.

dovecot -n:
# 1.0.12: /usr/local/etc/dovecot.conf
log_timestamp: “%Y-%m-%d %H:%M:%S ”
protocols: imap
listen: *:143
ssl_disable: yes
disable_plaintext_auth: no
login_dir: /usr/local/var/run/dovecot/login
login_executable: /usr/local/libexec/dovecot/imap-login
login_process_per_connection: no
first_valid_uid: 150
last_valid_uid: 150
dotlock_use_excl: yes
fsync_disable: yes
maildir_copy_with_hardlinks: yes
maildir_copy_preserve_filename: yes
mail_plugins: quota imap_quota
auth default:
  mechanisms: plain login
  user: nobody
  master_user_separator: *
  passdb:
driver: sql
args: /usr/local/etc/dovecot-sql.conf
  passdb:
driver: passwd-file
args: /usr/local/etc/dovecot.masterusers
master: yes
  userdb:
driver: prefetch
  userdb:
driver: sql
args: /usr/local/etc/dovecot-sql.conf
  socket:
type: listen
client:
  path: /var/spool/postfix/private/auth
  mode: 432
  user: postfix
  group: postfix
master:
  path: /var/run/dovecot/auth-master
  mode: 432
  user: vmail
  group: mail
plugin:
  quota: maildir:storage=1024


I hope this helps,
Thanks,
Ron




  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs

send_fetch_test.tgz
Description: application/compressed


Re: [Dovecot] Wrong message information reported shortly after delivery

2008-03-06 Thread Ron Avriel
> On Thu, 2008-03-06 at 08:21 -0800, Ron Avriel wrote:
> > If an IMAP fetch is issued some "short" time after a message was delivered
> > with dovecot deliver then dovecot reports wrong (zero) values
> > for that new message. Afterward, it reports the information OK.
> 
> What OS/filesystem do you use? I don't see how this is possible. The
> mails are first written to tmp/ directory and then they're atomically
> rename()d to the new/ or cur/ directory.
> 
> I also tested this myself, rapidly sending the same FETCH command 1000
> times/sec while delivering 40MB mails to the maildir. The size was
> always correct.


I'm using standard out of the box Redhat EL 4 with an ext3 filesystem.
Since I can reproduce it easily on different RHEL4 machines, tell me what 
additional information you'd like.

Thanks again,
Ron




  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs



[Dovecot] Wrong message information reported shortly after delivery

2008-03-06 Thread Ron Avriel
Hi,

If an IMAP fetch is issued some "short" time after a message was delivered
with dovecot deliver then dovecot reports wrong (zero) values
for that new message. Afterward, it reports the information OK.

This causes problems to our IMAP client.
The problem is easily reproduced with a large message on a slow machine.
I'm using dovecot 1.0.10

Here's a sample trace:

1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
1 OK Fetch completed.

 Here dovecot reports a new message (5) arrived 
1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
* 5 EXISTS
* 5 RECENT
1 OK Fetch completed.

 This is where dovecot reports wrong information about message 5 

1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
* 5 FETCH (FLAGS (\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" 
RFC822.SIZE 0 UID 5)
1 OK Fetch completed.

 The same wrong information is repeated 
1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
* 5 FETCH (FLAGS (\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" 
RFC822.SIZE 0 UID 5)
1 OK Fetch completed.

 The same wrong information is repeated several times 
1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
* 5 FETCH (FLAGS (\Recent) INTERNALDATE "01-Jan-1970 00:00:00 +" 
RFC822.SIZE 0 UID 5)
1 OK Fetch completed.

 Trace truncated here 

 Finally, correct information is reported 
1 uid fetch 1:* fast
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:20:50 +0200" 
RFC822.SIZE 3378380 UID 1)
* 2 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:21:40 +0200" 
RFC822.SIZE 3378380 UID 2)
* 3 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:23:38 +0200" 
RFC822.SIZE 3378380 UID 3)
* 4 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:40:06 +0200" 
RFC822.SIZE 3378380 UID 4)
* 5 FETCH (FLAGS (\Recent) INTERNALDATE "06-Mar-2008 17:41:07 +0200" 
RFC822.SIZE 3378380 UID 5)


dovecot -n:
# 1.0.10: /etc/dovecot.conf
log_timestamp: “%Y-%m-%d %H:%M:%S ”
protocols: imap
listen: *:143
ssl_disable: yes
login_dir: /var/run/dovecot/login
login_executable: /usr/libexec/dovecot/imap-login
login_process_per_connection: no
first_valid_uid: 150
last_valid_uid: 150
dotlock_use_excl: yes
fsync_disable: yes
maildir_copy_with_hardlinks: yes
maildir_copy_preserve_filename: yes
mail_plugins: quota imap_quota
auth default:
  mechanisms: plain login
  user: nobody
  master_user_separator: *
  passdb:
driver: sql
args: /etc/dovecot-sql.conf
  passdb:
driver: passwd-file
args: /etc/dovecot.masterusers
master: yes
  userdb:
driver: prefetch
  userdb:
driver: sql
args: /etc/dovecot-sql.conf
  socket:
type: listen
client:
  path: /var/spool/postfix/private/auth
  mode: 432
  user: postfix
  group: postfix
master:
  path: /var/run/dovecot/auth-master
  mode: 432
  user: vmail
  group: mail
plugin:
  quota: maildir:storage=1024


Thanks,
Ron





  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs



[Dovecot] Master user doesn't work with 'pass=yes'

2008-02-25 Thread Ron Avriel
Hi,

It seems that master user login does not work with the 'pass=yes' option
as recommended and documented.

I defined a master user passdb as documented. In addition, I have a passdb sql.
If 'pass=yes' is defined then it seems that dovecot recognizes the master 
login, 
verifies the master password but then attempts to verify the ***master*** 
password again with the ***user*** password (?) and fails.

If 'pass=yes' is not defined then master login works OK, but if the
user does not exist I get a "* BYE Internal login failure. Refer to 
server log for more information." instead of the usual "NO Authentication 
failed.".

In addition, I'd like to check the SQL users before the master user, because
most logins will be done by SQL users. If I place master passdb after
passdb SQL then dovecot fails to start with "Last passdb can't have pass=yes".

How can I use master password and "pass=yes"?

I'm using dovecot 1.0.10.
This is the configuration that fails master login:

dovecot.conf:
auth_master_user_separator=*
auth default {
passdb passwd-file {
args = /usr/local/etc/passwd.masterusers
master = yes
pass = yes
}
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
userdb prefetch {
}
userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
}

passwd.masterusers:
master:{SHA}aFAMsNWXTaL5dwGZWeeOhWhlTZA=

(password is 'masterpass')

log file:
Feb 18 17:44:27 ha-test1 dovecot: auth(default): client in: AUTH1PLAIN  
  service=IMAPsecuredlip=127.0.0.1rip=127.0.0.1
resp=AHVzZXIxQGV4YW1wbGUub3JnKm1hc3RlcgBtYXN0ZXJwYXNz
Feb 18 17:44:27 ha-test1 dovecot: auth(default): 
passwd-file(master,127.0.0.1,master): lookup: user=master 
file=/usr/local/etc/passwd.masterusers
Feb 18 17:44:27 ha-test1 dovecot: auth(default): 
passdb(master,127.0.0.1,master): Master user logging in as [EMAIL PROTECTED]
Feb 18 17:44:27 ha-test1 dovecot: auth-worker(default): sql([EMAIL 
PROTECTED],127.0.0.1): query: SELECT username as user, password, maildir as 
userdb_home, concat('maildir:', maildir) as userdb_mail, 150 as userdb_uid, 12 
as userdb_gid, concat('maildir:storage=', quota) AS userdb_quota FROM mailbox 
WHERE username = '[EMAIL PROTECTED]' AND active = '1'
Feb 18 17:44:27 ha-test1 dovecot: auth-worker(default): sql([EMAIL 
PROTECTED],127.0.0.1): Password mismatch

* Here 'masterpass' is compared to the **USER** password hash (?) 
***

Feb 18 17:44:27 ha-test1 dovecot: auth-worker(default): sql([EMAIL 
PROTECTED],127.0.0.1): PLAIN-MD5(masterpass) != 
'81dc9bdb52d04dc20036dbd8313ed055'

Feb 18 17:44:28 ha-test1 dovecot: auth(default): client out: FAIL1
[EMAIL PROTECTED]

Thanks,
Ron





  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs



[Dovecot] How to log uid and keywords of delivered mail?

2008-02-12 Thread Ron Avriel
Hi,

I’d like to extend the mail_log plugin to log the uid and keywords of a mail 
delivered by LDA. The keywords are set by the sieve plugin.
I added a mail_log_save_finish() function hook listed below. 
However, the uid of the mail is always zero and trying to get the keywords 
results in assertion failure, probably because the message is not committed yet:

Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): dest mail seq: 23, uid: 0
Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): file mail-index-view.c: 
line 217 (_view_lookup_full): assertion failed: (seq > 0 && seq <= 
mail_index_view_get_messages_count(view))
Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): Raw backtrace: 
/usr/local/libexec/dovecot/deliver(i_syslog_panic_handler+0x21) [0x80965d9] -> 
/usr/local/libexec/dovecot/deliver [0x8096443] -> 
/usr/local/libexec/dovecot/deliver [0x80821d0] -> 
/usr/local/libexec/dovecot/deliver [0x80827c3] -> 
/usr/local/libexec/dovecot/deliver(mail_index_lookup_keywords+0x32) [0x8082aae] 
-> /usr/local/libexec/dovecot/deliver(index_mail_get_keywords+0x6c) [0x806f038] 
-> /usr/local/lib/dovecot/lda/lib20_mail_log_plugin.so [0xcbdac8] -> 
/usr/local/libexec/dovecot/deliver(mail_storage_copy+0xa8) [0x808a600] -> 
/usr/local/libexec/dovecot/deliver(maildir_copy+0x3e) [0x805e252] -> 
/usr/local/lib/dovecot/lda/lib10_quota_plugin.so [0xfc9741] -> 
/usr/local/lib/dovecot/lda/lib20_mail_log_plugin.so [0xcbd48f] -> 
/usr/local/libexec/dovecot/deliver(deliver_save+0x192) [0x80559ea] -> 
/usr/local/lib/dovecot/lda/lib90_cmusieve_plugin.so [0xaa16bf] ->
 /usr/local/lib/dovecot/lda/lib90_cmusieve_plugin.so [0xaaea0d] -> 
/usr/local/lib/dovecot/lda/lib9

static int mail_log_save_finish(struct mail_save_context *ctx,
   struct mail *dest_mail)
{
struct mail_log_mailbox *lbox = MAIL_LOG_CONTEXT(ctx->transaction->box);
int ret;

ret = lbox->super.save_finish(ctx, dest_mail);
if (ret < 0) {
return ret;
}

if (dest_mail != NULL) {
const char *const *kw_list;

i_info("dest mail seq: %u, uid: %u", dest_mail->seq, dest_mail->uid);
kw_list = mail_get_keywords(dest_mail);
i_info("dest mail kw: %s", kw_list ? t_strarray_join(kw_list, ",") : 
"NONE");
}
return ret;
}

Some mail data, such as flags and headers, can be retrieved OK.
I'm using dovecot-1.0.10 and dovecot-sieve-1.0.2.
Any help in getting the uid and keywords by mail_log plugin will be 
greatly appreciated.

Thanks,
Ron
 





  

Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  
http://tools.search.yahoo.com/newsearch/category.php?category=shopping



[Dovecot] Segmentation fault in dovecot-sieve-1.1.2 + dovecot-1.1.beta13

2007-12-31 Thread Ron Avriel


Hi,


 


dovecot-sieve-1.1.2 + dovecot-1.1.beta13 segfaults with
the following sieve filter:


---


require ["imapflags"];


if header :contains "subject"
["test"]


{


 addflag
"$testflag";


}


---


 


when a message with a subject containing "test"
is delivered via dovecot lda.


 


The fault backtrace is:


 


(gdb) run


Starting program: /usr/local/libexec/dovecot/deliver -d
[EMAIL PROTECTED] < bad.txt


 


Program received signal SIGSEGV, Segmentation fault.


get_flags (sieve_flags=0xbfe7e438, flags_r=0xbfe7dee4,
keywords_r=0x2)


at
/root/dovecot-1.1.beta13/src/lib/array.h:145


145
*count_r = array->buffer->used / array->element_size;


(gdb) bt


#0  get_flags
(sieve_flags=0xbfe7e438, flags_r=0xbfe7dee4, keywords_r=0x2)


at
/root/dovecot-1.1.beta13/src/lib/array.h:145


#1  0x00f68744 in
sieve_keep (ac=0x2, ic=0x0, sc=0xbfe7f4e0, mc=0xbfe7f480,


   
errmsg=0xbfe7e3f0) at sieve-cmu.c:561


#2  0x00f779a5 in
do_sieve_error (ret=0, interp=0x92dbf18, script_context=0xbfe7f4e0,


   
message_context=0xbfe7f480, imapflags=0xbfe7e438, actions=0x92e42d8,
notify_list=0x0,


lastaction=8,
implicit_keep=1, actions_string=0xbfe7e440 "Action(s) taken:\n",


errmsg=0x0) at
script.c:627


#3  0x00f780d8 in
sieve_execute_bytecode (exe=0x92dcc58, interp=0x92dbf18,


   
script_context=0xbfe7f4e0, message_context=0xbfe7f480) at script.c:824


#4  0x00f69809 in
cmu_sieve_run (namespaces=0x92d5c70, storage_r=0xbfe7f6ac,


mail=0x92de358,
script_path=0x92d3c82 "/usr/local/etc/sieve_global.txt",


   
destaddr=0xbff3fbb9 "[EMAIL PROTECTED]", username=0x92d4b05
"[EMAIL PROTECTED]",


   
mailbox=0x80d0367 "INBOX") at sieve-cmu.c:971


#5  0x00f67752 in
cmusieve_deliver_mail (namespaces=0x92d5c70, storage_r=0xbfe7f6ac,


mail=0x92de358,
destaddr=0xbff3fbb9 "[EMAIL PROTECTED]", mailbox=0x80d0367
"INBOX")


at
cmusieve-plugin.c:76


#6  0x0805aa4f in
main (argc=3, argv=0xbfe7f794) at deliver.c:940


(gdb)


 


I managed to fix the problem with this patch to
sieve-cmu.c:


 


--- sieve-cmu.c.orig   
2007-12-31 10:21:54.0 +0200


+++ sieve-cmu.c 2007-12-31 10:24:18.0 +0200


@@ -495,6 +495,7 @@


   
ARRAY_DEFINE(keywords, const char *);


 const char
*name;


int i;


+unsigned
int count;


 


*flags_r = 0;


 


@@ -524,7 +525,7 @@


   
array_append(&keywords, &name, 1);


 


*keywords_r
= array_count(&keywords) == 1 ? NULL :


-  
array_get(&keywords, 0);


+  
array_get(&keywords, &count);


 }


 


 static int
sieve_fileinto(void *ac,


 


 


 


BTW, dovecot-sieve-1.0.2 + dovecot-1.0.9 work OK for the
above.


 


Happy New Year and thanks for a great product,


Ron


 






  

Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs