Re: (1) dumping twoskip file and (2) getting folder UIDs

Michael Menge <[email protected]> Tue, 30 Jun 2026 18:58:14 +0200
Newsgroups gmane.mail.imap.cyrus
Message-ID <20260630185814.Horde.JLc4hWwZxzzMvv2dvNeYX56@webmail.uni-tuebingen.de>
------------=_1782840073-5541-0
Content-Type: multipart/signed; boundary="=_jZ0VCyeLfHj7ju1VtN8ueFa";
 micalg=sha-256; protocol="application/pkcs7-signature"
Content-Transfer-Encoding: 7bit


--=_jZ0VCyeLfHj7ju1VtN8ueFa
Content-Type: text/plain; charset=utf-8; format=flowed; DelSp=Yes
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi,

an alternative solution, if you have delayed expunge mode and auditlogs,
is to restore the deleted mails with unexpunge, and finde the UID in logs
with  "grep $username | grep "auditlog: touched " | grep "sysflags=3D.*SE.*"

Kind regards

    Michael Menge

Quoting Jay Sekora <[email protected]>:

> Hi!  I have a user who accidentally marked all her mail as "read" and
> needs read state of her messages restored from backups.  At the same
> time, she also accidentally deleted a bunch of messages, but also has
> gotten lots of new mail since then.
>
> So I think what I need to do is restore her old inbox as of just before
> this happened to a new folder location (that part is easy), and then get
> a copy of her $username.seen file from the same backup, extract the
> seen/unseen data from the .seen file, and apply seen/unseen state to
> the corresponding messages in the new (restored) folder location.
>
> So the two pieces of this that I don't know how to do are (1) dumping
> the twoskip file to a text format that I can get the seen/unseen message
> UIDs out of, and (2) correlating the folder IDs in the twoskip file with
> folder names I can select in `cyradm`.  (If there's an easier way to do
> this I'd love to hear it!)
>
> So, (1) is there a script available somewhere to dump twoskip files to
> a text format?  And (2) how can I get a list of folder names and
> corresponding folder IDs as found (apparently) in the twoskip file?
> (2) seems like something I ought to know, but I don't. :-)
>
> (Running `strings` on the twoskip file suggests the folders are stored
> as IDs like "xhz89kuj0c4m8w0ey4tafenk1" rather than folder names like
> "user.so-and-so".  But presumably the output of `strings` might include
> values that are deleted or superceded, and in any case it looks like
> the actual message UIDs are in binary rather than textual format in
> the twoskip file.)
>
> Jay
>
> PS -- This is on Ubuntu 22.04 with Cyrus 3.4.3 as packaged by Ubuntu.
> But I can't imagine the package maintainers broke the twoskip file
> format. :-)
>
> PPS -- I found
> https://github.com/cyrusimap/cyrus-imapd/blob/master/lib/cyrusdb_twoskip.c
> but my C is pretty rusty and I don't feel confident trying to convert that
> to perl or python or something on my own.  The other way I've thought
> of to do this is to bring up an entire second IMAP server, restore the
> user's inbox and .seen file to it as of a consistent date, and use
> `imapsync` to synchronize seen/unseen state from the restore with the
> production IMAP server =E2=80=94 assuming the folder ID is actually stored
> *in* the folder directory itself.  That sounds even worse than trying
> to parse the twoskip file.
>
> ------------------------------------------
> Cyrus: Info
> Permalink:=20=20
> https://cyrus.topicbox.com/groups/info/T643419685ae5113c-Mf5c7c089518c1a2=
ec60f8bc2
> Delivery options: https://cyrus.topicbox.com/groups/info/subscription



--=20
---------------------------------------------------------------------------=
-----
Michael Menge                          Tel.: (49) 7071 / 29-70316
Universit=C3=A4t T=C3=BCbingen                   Fax.: (49) 7071 / 29-5912
Zentrum f=C3=BCr Datenverarbeitung          mail: michael.menge@uni-tuebing=
en.de
W=C3=A4chterstra=C3=9Fe 76
72074 T=C3=BCbingen

--=_jZ0VCyeLfHj7ju1VtN8ueFa
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Description: S/MIME-Signatur
Content-Disposition: attachment; filename=smime.p7s
Content-Transfer-Encoding: base64

MIIQPwYJKoZIhvcNAQcCoIIQMDCCECwCAQExDzANBglghkgBZQMEAgEFADAL
BgkqhkiG9w0BBwGgggx6MIIGLjCCBJagAwIBAgIQUGJgCwI1Ze+WMny7JuKB
RTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVs
bGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDQTEb
MBkGA1UEAwwSR0VBTlQgUy9NSU1FIFJTQSAxMB4XDTI1MDUyNjA5MDE0M1oX
DTI3MDUyNjA5MDE0M1owLzEtMCsGCSqGSIb3DQEJARYebWljaGFlbC5tZW5n
ZUB1bmktdHVlYmluZ2VuLmRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAzoKOaeu+6aYRfHW/SYJ/Wuqxu58BV9WTis2N8XzM+gbVh31H5N0S
8hbjT2tdqeU6TDrmjvynKS4dA/BNfF32AdvNUVZUrkMEstaZTBi50RbxrwW0
aGAi1gyiQIMe/0qrh6rLzu3RRfbu6ep180fAB6OMKi23w6MzUeOwuAgdQqiQ
JRE1Pu89SGqyG3cNJYGct9S8+jQV0m3OQwWFpxv/645TdJ7ja2K0K+Aw3N3r
wps8a+xS1fJ3/GI7Zb9CN4qaZLdHbwkTXF14EcxbNASvqmZF+bfR+bodGvMA
md9IbmvjjscIC8xgmPoTygQFbMPZcAyXTXn/8eRR4CxyRA2jJaPDSzJwCqOe
MEklnyAIhZnnmoBzpNFO1Z2PaL/A9hYK4+05GkWNbWnTBuyEBLEBCxyBW118
Z06O+HYH13cKS8I8nIkYSuGlS75RIFu2z2cCADxqWLui2Xsr9c5CqRcwKEBs
HtmvoiQpMQGnj1ZkXxqr5Hbcgn6DU9xHyZwecwve2xjZAy7vOpUH/t1OFziT
igNnA4hvId7dIOSzqdfeTVI9yNZ8OkRNGNnsV1J5VQGyCUOJr4kCcWxoQ+3x
p8AvEWwogCxnJjcQNNDvmEbWeZp/ARK3NFpL7A/LQOvYr2NH+ag4khmQI2sC
zLYXZsl045hmUzrr7uehwXyFDBwKoMECAwEAAaOCAZAwggGMMB8GA1UdIwQY
MBaAFOuyLzv9rgLMKkQGXSXNHRIiaLBHMEoGCCsGAQUFBwEBBD4wPDA6Bggr
BgEFBQcwAoYuaHR0cDovL2NydC5oYXJpY2EuZ3IvSEFSSUNBLUdFQU5ULVNN
SU1FLVIxLmNlcjApBgNVHREEIjAggR5taWNoYWVsLm1lbmdlQHVuaS10dWVi
aW5nZW4uZGUwYwYDVR0gBFwwWjAJBgdngQwBBQECMAgGBgQAj3oBAzBDBg0r
BgEEAYHPEQEBAgECMDIwMAYIKwYBBQUHAgEWJGh0dHBzOi8vcmVwby5oYXJp
Y2EuZ3IvZG9jdW1lbnRzL0NQUzAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB
BQUHAwQwPwYDVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NybC5oYXJpY2EuZ3Iv
SEFSSUNBLUdFQU5ULVNNSU1FLVIxLmNybDAdBgNVHQ4EFgQUE1scxVoArjDj
o5Ffz4XMDYczLbwwDgYDVR0PAQH/BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IB
gQCqt6f4F+g3xnfxRYExJWVSTaCfTHsP0VvD741X8PlOAYKRKOFpfOE/hVe1
ecGkpfWKEzB8OK0k53IUgxGPO5VSFuGA54/KBCcW5eO2IKaVY9PzFMnLb7fM
e2k6uTqvUXDWFR7TO1wRIdhQH+bHekB7UxkChJPEMoKtdf0yRh6rUyXgKy2j
8J24iTSWLRQqQmzYphlZrRV/huFJnUTZRMT0RdzvuEe0GIlM8BczMcJxDXrF
jghbun7MaWS244I8Sa18DPJGSinDb1OgAoGlcF7Z+TfuqYNWrHLLrLNIJSxS
XlrPfJk0EGEQb1A9lXlfu1+EG5/GUBe71UANit7b3nzCkBQ6I+MHGwxrukxr
BF6I/FWS4+ipm6L7KZ62tzp57XrmV37ZJXm0mgBxzVW1YYgS7GFXH6gUIE00
GoWaGShM3WT8FVWnc7mWBN24WixqHAIUseB67WejV1lfUn9t6jT73SfS6sj1
Jxk1fLQD5tz2jImFzY3KXhy2GBmlTta7tlYwggZEMIIELKADAgECAhAV+a5s
qo0u1NNveH8e3HsBMA0GCSqGSIb3DQEBCwUAMG8xCzAJBgNVBAYTAkdSMTcw
NQYDVQQKDC5IZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0
dXRpb25zIENBMScwJQYDVQQDDB5IQVJJQ0EgQ2xpZW50IFJTQSBSb290IENB
IDIwMjEwHhcNMjUwMTAzMTExMzA4WhcNMzkxMjMxMTExMzA3WjBjMQswCQYD
VQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh
cmNoIEluc3RpdHV0aW9ucyBDQTEbMBkGA1UEAwwSR0VBTlQgUy9NSU1FIFJT
QSAxMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAq7hur/5vIqMe
jblfPfZgGY75auSZz5SZ9x1dIIjvJrDBT0lIwQcAAoABJomkuv0kDK362UH+
uf9JrOdLBjiKkEh99HQPmT+d1+Ijnnd1aAjiL+2Q4aU16P/snITYJL2ROU46
zqmDkdoOnCqMCEKSN74gHKDmApYfqXO8wmjmNA62wYHarp7lxgrBr0sk4BxH
yKq52z0sWyxsdIy5V1K5OOkCNwYupZ9b74LRhelYP5SieNDqU0S6IpQOasVz
5IS0vDnqVi2ni67Gbgtb8dBKzH6gbAwGppHoeEFDcvJ042Oxtxt6BGolkUmg
uyfAgeisRqDjhQi+NfNgkDH81OLBV0eV07twS9axwNvJAtH2SgGiWKrYeuBg
VCzs1DFT7sws1KHyLrOdZU0hJQSDfoz/8jwFmXhWoPvQQuWEoo3uvH6LsHAo
53aDF1aAUmGQ/JC72j7zZH16leJFuWj+t2TK/7YEVHtWluA9TOdx2Lz/SHh0
/+pAVicD4N/QUWPuBhzPAgMBAAGjggFmMIIBYjASBgNVHRMBAf8ECDAGAQH/
AgEAMB8GA1UdIwQYMBaAFKDWBz1eJPd7oEQuJFINGaorBJGnMFAGCCsGAQUF
BwEBBEQwQjBABggrBgEFBQcwAoY0aHR0cDovL2NydC5oYXJpY2EuZ3IvSEFS
SUNBLUNsaWVudC1Sb290LTIwMjEtUlNBLmNlcjBEBgNVHSAEPTA7MDkGBFUd
IAAwMTAvBggrBgEFBQcCARYjaHR0cDovL3JlcG8uaGFyaWNhLmdyL2RvY3Vt
ZW50cy9DUFMwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMEUGA1Ud
HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwuaGFyaWNhLmdyL0hBUklDQS1DbGll
bnQtUm9vdC0yMDIxLVJTQS5jcmwwHQYDVR0OBBYEFOuyLzv9rgLMKkQGXSXN
HRIiaLBHMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAO964
RfbcPCuTKAq2wXsOZxMaaLxITbSOYkt7RMxPw3CzU2qmkTQALKbVqC1jUiNQ
WbkxZpsb8hy9FOHywH1xFmANAypks0Iuh+ovhqP90oFcfhvAfYxV2M0cGga9
mTKFHP+QET7HW9pZdyWFZAw5fmdW9Ex+IQmJii0w/sozzwhpVn0OQYkkRV+2
ydRa68JZS2NqAPpdaWoseM2X4u5+Jn+H2UO9paobX+ht91K2Ch8xzfREv4RL
qBgpHBmkIDVygXNdXsKfDHy2hOXxtF6oI1d7ErPGWoBxFc86aUqQlC6pEjb3
ug24w+eg1kJj7IufHJ3iRm67Rdw5M1OlWMzxu+DwAKqFJhqes0OL/NOJOTuD
Cb0bIfVfjl8U0Y0QWCkhoCmNPZQQu6QM6Y/XxnALgRB4drA8kip98wSZQmbq
ptE8oac2ZzLKCHiJlTdBuREsundnpBXdahMSrJ/mYv2pMZLpYkbrkvyhorDV
eH9t0a5UgPIFqGl8/ZzakJ3RQfr7HvdGur0YWU6KNWvY5BK8qHMRM0b3XtK9
xREIGEychAVReodDIhjrR4fWmjpa006r/UrmSk4bpKrVFVzTYsSK3jy4ri1E
xVQp6RI6Ou4ZdbfwOYCuI9wweMjpVBuqNzRKrVU/Pvp57gUzm4u+JJRkdioM
OoxZrwsUiYr2KIojwTcxggOJMIIDhQIBATB3MGMxCzAJBgNVBAYTAkdSMTcw
NQYDVQQKDC5IZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0
dXRpb25zIENBMRswGQYDVQQDDBJHRUFOVCBTL01JTUUgUlNBIDECEFBiYAsC
NWXvljJ8uybigUUwDQYJYIZIAWUDBAIBBQCggeQwGAYJKoZIhvcNAQkDMQsG
CSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjYwNjMwMTY1ODE0WjAvBgkq
hkiG9w0BCQQxIgQgMjqgWva5ZdWiAFPIh/E220TA99A+EjYXffqCPQR4Dcww
eQYJKoZIhvcNAQkPMWwwajALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsG
CWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZI
hvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwDQYJKoZIhvcNAQEB
BQAEggIAbtskeXhJVCU76K/gpUhByB8uDSK4uSuWvEg6o8xf3nfom0IyiGy2
5+fqCk7Z1FnmjWkAdfpNQxYRQX5gmGKvwtI+glp2niLiaoRU9oj4xnot2NJ7
qu08mhnBFTPmZ5srPyM4CO8zN/zu4W6WO/ea1gr4yWE04TRi7ejaKSmo6i4R
+C2fRxgktjPFOx77a7Ss0ZLqE4cEomEG0y7gYBPEORwSwxtBwh3jxhoNUF1P
pMSlROs53I1yzT5oalmrQSI6d/hcS01iWQzzyWkg2Tdby7wyrG9J/tFOcDh7
1eM+U+5bEz3IDlncyEkQEKzDRv4t/Q4GBA/McsWDHm5o67SwGTv7ZWWcbo+L
BKMgux+eSrzQlfRr2DhejWgnlOm66hyVOtPQBefUOPCcXRAV8WId++3PZApn
fZEBFYWqdqSw0garJkjhoNIYZaH3JXzyv+VBY5F4pxc+qQVBEhlGF3nDO3Fa
fpJkJ90wt6uS6RKUaKP+J1RwTct/DmejnrqJ+qzX4s2Vr8c0G2/c1qRG7KxS
V6BUS4pXL3wWfj4Q/nJFX4Kp8W8DZ04G0ZoL+TlvW6ChkWLshW9HlTGAUD9p
lfDY9bxUVxikfq9GvxiTP18FkS1YD1g0t2SDS4c3vTiPFv+uYNjrs17jVBxr
go55K2MV/btz9GhvsIB6bRUc6uXjTls=

--=_jZ0VCyeLfHj7ju1VtN8ueFa--

------------=_1782840073-5541-0
Content-Type: text/plain; charset=UTF-8; delsp=Yes; format=flowed
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.510 (Entity 5.510)


------------------------------------------
Cyrus: Info
Permalink: https://cyrus.topicbox.com/groups/info/T643419685ae5113c-M0fa1d2=
7ac033528390a1ab53
Delivery options: https://cyrus.topicbox.com/groups/info/subscription

------------=_1782840073-5541-0--