Hi, I've been lurking on this list for a while. We are still using UW-IMAP and Qualcomm popper, but I'm thinking of changing to dovecot this summer after the students disappear.
In UW-IMAP, I needed this feature so I modified the code to basically touch a dot file in the user's homedir. This way I can go look for this file and check the date to see the last time they used IMAP. Here is my hack lifted straight out of my patchfile for UW-IMAP; the same idea could be hacked into dovecot:
touchfile = (char *) fs_get (strlen (home) + 15);
sprintf(touchfile,"%s/.imapd.last",home);
fd = open(touchfile,O_WRONLY|O_CREAT|O_TRUNC,0600);
if(fd < 0)
r(errno));syslog (LOG_NOTICE|LOG_AUTH,"touchfile failed for %s:%s",user,strerro
else
close(fd);
fs_give((void **) &touchfile);
Note that fs_get and fs_give are UW's wrapper around malloc() and free(). Build the path to the file, open the file, close the file, complain to syslog if the open failed.
Jeff Earickson Colby College (back to lurking)
On Mon, 25 Apr 2005, Del Stoliker wrote:
Date: Mon, 25 Apr 2005 17:07:13 -0600 From: Del Stoliker dstoliker@alphagraphics.com To: dovecot@dovecot.org Subject: RE: [Dovecot] Track when user last checked mail
First off I've just got to say thanks. We just upgraded from UW to Dovecot migrating from mbox to maildir. Wow, what a difference! Load average used to hang around 5.0 during business hours and could get up to 20+ on a bad day. Now we rarely break 1.0!
I'm wondering if there's a way to keep track of the last time a user checked their email and whether they checked it using POP or IMAP. We're trying to gather statistics on what protocols our users use and find accounts that haven't been checked for a long time. We used to be able to do some of this with the finger command and the user's mbox. I found a script called "mfinger" that works better with Maildir, but it's designed for Courier.
You don't say how you wish to access this information, but this works:
egrep "(pop|imap)-login: Login:" /var/log/mail.log | grep USERNAME| tail -1
Assuming you run it before you rotate your logs, or you could miss out.
Another way is to modify Dovecot a little and have it record whatever activity details you want directly into a Database, ie: SQLite / MySQL. This should be simple to do for some inclined developer (if this is a commercial project).
Thanks for the suggestions. I guess I could have articulated my question a little better.
Ideally, I'd like to have the user's protocol and timestamp recorded when they check mail into a database. I'd rather not modify dovecot itself - seems like that would be a project itself just to maintain.
The only idea I'm coming up with so far is to grep the logfile for each user in the manner you suggest on cron job (late at night while the server is bored), parse the results, and record them into a database. The downfall is that it's not real time.
I can't help but wonder if I'm reinventing the wheel here. Is someone else doing something like this?