主题: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

mysql> select lastlogindate,lastloginipv4,lastloginprotocol from mailbox limit 10;
+---------------------+---------------+-------------------+
| lastlogindate       | lastloginipv4 | lastloginprotocol |
+---------------------+---------------+-------------------+
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 |                   |
+---------------------+---------------+-------------------+

这此字段在何时由什么组件来进行更新的,是否是在升级的过程中给落下什么配置?

谢谢!

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

由 dovecot 的 post-login 功能更新。所有 iRedMail 版本默认都没有设置 last-login 跟踪,所以都是空的。

http://www.iredmail.org/faq.html 搜索 'last login' 即可找到 dovecot last login 相关文档。

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

/usr/bin/trackLastLogin.sh

echo "$(date +%Y.%m.%d-%H:%M:%S), $USER, $IP, ${1}" >> /tmp/tracking.log 2>&1

# ------------------------------------------------------------------
# Update to MySQL database.
# Note: ${MYSQL_USER} must have SELECT and UPDATE privileges.
# ------------------------------------------------------------------
MYSQL_USER='sa'
PASSWD='sa-password'
VMAIL_DB_NAME='vmail'
#
if [ X"${USER}" != X"dump-capability" ]; then
   mysql -u${MYSQL_USER} -p${PASSWD} ${VMAIL_DB_NAME} >/dev/null 2>&1 <<EOF
       UPDATE mailbox SET \
       lastloginipv4="INET_ATON('$IP')", \
       lastlogindate="NOW()", \
       lastloginprotocol="${1}" \
       WHERE username='$USER';
EOF
fi

最近从0.6.1->0.7.0后,一直在研究更新lastloginipv4、lastlogindate、lastloginprotocol这3个字段,按FAQ中的文档如上内容修改后,发现记录在文本文件中没有问题,但是更新mailbox表中的字段时,现只能更新lastloginprotocol这个字段,其他两个均未更新,觉得SQL没有问题,不知什么地方可以调试,感谢提示!
/etc/dovecot.conf

# IMAP configuration
protocol imap {
    mail_drop_priv_before_exec=yes
    mail_executable = /usr/bin/trackLastLogin.sh imap

    mail_plugins = quota imap_quota autocreate

    imap_client_workarounds = tb-extra-mailbox-sep

    # number of connections per-user per-IP
    #mail_max_userip_connections = 10
}

# POP3 configuration
protocol pop3 {
    mail_drop_priv_before_exec=yes
    mail_executable = /usr/bin/trackLastLogin.sh imap

    mail_plugins = quota
    pop3_uidl_format = %08Xu%08Xv
    pop3_client_workarounds = outlook-no-nuls oe-ns-eoh

    # number of connections per-user per-IP
    #mail_max_userip_connections = 10
}



这个现象在0.6.1和0.7.0中均测试,问题存在且相同。

mysql> select lastlogindate,lastloginipv4,lastloginprotocol from mailbox;
+---------------------+---------------+-------------------+
| lastlogindate       | lastloginipv4 | lastloginprotocol |
+---------------------+---------------+-------------------+
| 0000-00-00 00:00:00 |             0 |                   |
| 0000-00-00 00:00:00 |             0 | imap              |
| 0000-00-00 00:00:00 |             0 |                   |
+---------------------+---------------+-------------------+
3 rows in set (0.00 sec)

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

查看 mysql 的日志,看看具体执行的是什么命令。

5 最后由 sdaniel (2011-04-20 08:40:27) 编辑

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

修改了文件:/etc/dovecot.conf中的调试选项如下:

#
# Debug options.
#
mail_debug = yes
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

没有看到/var/log/dovecot.log中关于mysql的update命令执行!
查看日志如下:

[root@tmail log]# cat dovecot.log |grep UPDATE
[root@tmail log]# cat dovecot.log |grep update
[root@tmail log]#

/tmp/tracking.log

2011.04.20-07:13:00, username@example.com.cn, 127.0.0.1, imap
2011.04.20-07:13:00, username@example.com.cn, 127.0.0.1, imap

查看 mysql 的日志,看看具体执行的是什么命令。

在/var/log/mysql.log中没有相关的日志!

我认为其配置主要来自dovecot的配置文件,其执行日志应该记录在:/var/log/dovecot.log中呀,我还能在其他什么地方可以查看日志吗?

谢谢指点!

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

凡是执行的 MYSQL 命令,mysql server 都可以记录下来。
在 mysql 的配置文件 /etc/my.cnf 里加入 "log = /tmp/mysql.log" 即可将所有 mysql 命令都记录下来。

[mysqld]
log = /tmp/mysql.log

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

之前的SQL语句:
UPDATE mailbox SET lastloginipv4="INET_ATON('127.0.0.1')", lastlogindate="NOW()", lastloginprotocol="imap" WHERE username='username@example.com.cn'
修改后的SQL语句:
DATE mailbox SET lastloginipv4=INET_ATON('127.0.0.1'), lastlogindate=NOW(), lastloginprotocol="imap" WHERE username='username@example.com.cn'

修改后执行成功,感谢!

回复: 在检查mail数据库时,lastlogindate、lastloginipv4、lastloginprotocol 没有更新

多谢反馈。已提交修改:
http://code.google.com/p/iredmail/sourc … 872e7c4567