Para saber donde están ubicados físicamente los mensajes de un usuario de Zimbra tenemos que consultar el mysql de Zimbra.
Nos conectamos al mysql y miramos que esquemas tenemos y luego miramos la lista de buzones:
# su - zimbra # mysql mysql> show databases; mysql> select comment, group_id from zimbra.mailbox order by comment +--------------------------------+----------+ comment group_id +--------------------------------+----------+ xxxxx@yyyyyy.com 1 zzzz@yyyyyyy.com 4 X rows in set (0.00 sec)El el campo group_id tenemos el ID del grupo de mailboxes al que pertenece el usuario. Por tanto si pertenece al group_id=4 querrá decir que habrá un esquema dentro del mysql que se llamará mboxgroup4.
mysql> use mboxgroup4; mysql> show tables;Dado que sólo podemos tener 100 grupos de mailboxes (segun la wiki de zimbra) si nos dá que group_id=1023 entonces el ID del grupo de mailbox será 1024 mod 100 = 24. Debe existir el esquema mboxgroup24.
El ID del grupo de mailbox también se puede conseguir con el comando zmprov.
# zmprov getMailboxInfo miusuario@midominio.com mailboxId: 1023 quotaUsed: 651627Veamos ahora un listado de todos los mails que hay dentro del grupo mailbox 4. Si tenemos más de 100 usuarios puede ser que dentro de este grupo de mailbox haya correo de varias cuentas. En la tabla mail_items tenemos los mails y tambien tenemos los contactos de la libreta de direcciones. Aun no sé como distingue lo que es un mail de una contacto en la libreta de direcciones.
mysql> select * from mboxgroup4.mail_item where id>26000 and mailbox_id=4 \G *************************** 1. row *************************** mailbox_id: 4 id: 26001 type: 5 parent_id: NULL folder_id: 2 index_id: 26001 imap_id: 26001 date: 1182380903 size: 95842 volume_id: 1 blob_digest: rbrw+fj0tvyvTPt2haxssued7,A= unread: 1 flags: 2 tags: 0 sender: miusuario@midominio.com subject: Un mensaje name: NULL metadata: d1:f147:This message...1:p8:Re: SF: 1:s21:miurusio@midominio.com1:vi10e mod_metadata: 30102 change_date: 1182380905 mod_content: 30102 1 row in set (0.00 sec)El campo volume_id=1 indica la carpeta donde estan almacenados todos los grupos de mailbox. Normalmente será /opt/zimbra/store. Veamos si esto es cierto:
mysql> select id, name, path from zimbra.volume; +----+----------+-------------------+ id name path +----+----------+-------------------+ 1 message1 /opt/zimbra/store 2 index1 /opt/zimbra/index +----+----------+-------------------+ 2 rows in set (0.00 sec)Luego tenemos que el mailbox_id=4 y el id=26001. Ahora según Zimbra tenemos que hacer una operació a nivel de bits y mover 12bits:
# perl -e 'print 4 >> 12 ; print "\n"' 0 # perl -e 'print 26001 >> 12 ; print "\n"' 6Nos da como resultado 0 y 6.
Portanto el mensaje que buscamos está en:
0 comentarios:
hacer un comentario en esta entrada