Re: SNI on STARTTLS in mailfront

Giam Teck Choon <[email protected]> Sun, 10 Feb 2019 21:03:36 +0800
Newsgroups gmane.comp.sysutils.bgware
Message-ID <[email protected]>
--=_600ce5adb8843ffe7ef5dc8ca7a64883
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII;
 format=flowed

Hi John,

Many thanks for your kind assistance and precious time.

I have made the SNI work by using 
gnutls_handshake_set_post_client_hello_function() instead.  Attached is 
my modified starttls-gnutls.c for your review and comments (if any).

Greatly appreciated!

Once again, thanks.

Kindest regards,
Giam Teck Choon


On 2019-02-08 09:27, Giam Teck Choon wrote:
> Hi John,
> 
> Thanks a lot for taking time to reply.
> 
> On 2019-02-08 09:08, John R. Levine wrote:
>> Hard to say.  It works fine on my FreeBSD system, and I can't think of
>> any obvious differences between BSD and Centos.  I assume you've
>> checked the directory and file permissions, and your mailfront daemon
>> can read both the .crt and the .key files?
> 
> There is no permission and/or ownership issues related to those
> .crt/.key files as one of my testing is to set
> TLS_CERTFILE/TLS_KEYFILE to the same SNI cert/keyfile.
> 
> Once again, thanks.
> 
> Kindest regards,
> Giam Teck Choon
> 
>> 
>>> I used your starttls-gnutls.c and encountered problems when 
>>> TLS_CERTDIR is set and regardless SNI cert/key file exists will show 
>>> the following errors:
>>> 
>>> The below error suppose to use the default TLS_CERTFILE and 
>>> TLS_KEYFILE when SNI cert/key files not found:
>>> 
>>> @ 400000005c5bdf89185de07c mailfront[20072]: Starting TLS handshake
>>> @ 400000005c5bdf89185df7ec mailfront[20072]: No SNI in request, using 
>>> default certificate
>>> @ 400000005c5bdf89185dffbc mailfront[20072]: TLS handshake failed: 
>>> Could not negotiate a supported cipher suite.
>>> 
>>> The below error suppose to use the SNI cert/key files (when exists) 
>>> when TLS_CERTDIR is set. I patched your starttls-gnutls.c to show the 
>>> SNI key/cert files:
>>> 
>>> @ 400000005c5bdf91377adf8c mailfront[20075]: Starting TLS handshake
>>> @ 400000005c5bdf9137d23ad4 mailfront[20075]: Using SNI cert/key file 
>>> for rat.choon.net
>>> @ 400000005c5bdf9137d24a74 mailfront[20075]: SNI certfile 
>>> /var/qmail/ssl/rat.choon.net/rat.choon.net.crt for rat.choon.net
>>> @ 400000005c5bdf9137d25244 mailfront[20075]: SNI keyfile 
>>> /var/qmail/ssl/rat.choon.net/rat.choon.net.key for rat.choon.net
>>> @ 400000005c5bdf9137d25a14 mailfront[20075]: TLS handshake failed: 
>>> Could not negotiate a supported cipher suite.
>>> 
>>> If TLS_CERTDIR not set then everything working to use TLS_CERTFILE 
>>> and TLS_KEYFILE.
>>> 
>>> System is CentOS 7. openssl version/release is 1.0.2k-16.el7 and 
>>> gnutls version/release is 3.3.29-8.el7.
>>> 
>>> Thanks for file and any suggestions I can get to make SNI work in my 
>>> system.
>>> 
>>> Kindest regards,
>>> Giam Teck Choon
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 
>>> 
>>> 
>> 
>> Regards,
>> John Levine, [email protected], Primary Perpetrator of "The Internet for 
>> Dummies",
>> Please consider the environment before reading this e-mail. 
>> https://jl.ly
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]

--=_600ce5adb8843ffe7ef5dc8ca7a64883
Content-Transfer-Encoding: base64
Content-Type: text/x-c;
 name=starttls-gnutls.c
Content-Disposition: attachment;
 filename=starttls-gnutls.c;
 size=7974

I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx1bmlzdGQu
aD4KI2luY2x1ZGUgPGJnbGlicy9pb2J1Zi5oPgojaW5jbHVkZSA8YmdsaWJzL21zZy5oPgojaW5j
bHVkZSA8YmdsaWJzL3N0ci5oPgojaW5jbHVkZSA8YmdsaWJzL3dyYXAuaD4KCiNpbmNsdWRlIDxl
cnJuby5oPgojaW5jbHVkZSA8Z251dGxzL2dudXRscy5oPgoKI2luY2x1ZGUgIm1haWxmcm9udC5o
IgojaW5jbHVkZSAic3RhcnR0bHMuaCIKCnN0YXRpYyBnbnV0bHNfc2Vzc2lvbl90IGdzZXNzaW9u
OwpzdGF0aWMgZ251dGxzX2NlcnRpZmljYXRlX2NyZWRlbnRpYWxzX3QgeDUwOV9jcmVkOwpzdGF0
aWMgY2hhciAqY2VydGZpbGUsICprZXlmaWxlLCAqY2VydGRpcjsKCnN0YXRpYyBpbnQgdGxzX2F2
YWlsYWJsZSA9IDA7CgpzdGF0aWMgaWJ1ZiByZWFsaW5idWY7CQkJLyogdW5kZXJseWluZyBpbnB1
dCBzdHJlYW0gKi8Kc3RhdGljIG9idWYgcmVhbG91dGJ1ZjsJCQkvKiB1bmRlcmx5aW5nIG91dHB1
dCBzdHJlYW0gKi8KCi8qCiAqIFRMUyByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbnMgZm9yIGJnbGli
LCB0byBmYWtlIG91dCB0aGUgcmVzdCBvZgogKiBtYWlsZnJvbnQKICovCgpzdGF0aWMgaW50IHRs
c3JlYWQoaW50IG4sIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBsZW4pCnsKICBzc2l6ZV90IHJl
dDsKCiAgZm9yKDs7KSB7CiAgICByZXQgPSBnbnV0bHNfcmVjb3JkX3JlY3YoZ3Nlc3Npb24sIHB0
ciwgKHNpemVfdClsZW4pOwogICAgaWYgKHJldCA+PSAwKSByZXR1cm4gcmV0OwogICAgaWYgKHJl
dCA9PSBHTlVUTFNfRV9BR0FJTiB8fCByZXQgPT0gR05VVExTX0VfSU5URVJSVVBURUQpIGNvbnRp
bnVlOwogICAgaWYgKHJldCA9PSBHTlVUTFNfRV9QUkVNQVRVUkVfVEVSTUlOQVRJT04pIHJldHVy
biAwOwogICAgbXNnZigie1RMUyBlcnJvciB9ZCIsIHJldCk7CiAgICByZXR1cm4gMDsKICB9CiAg
KHZvaWQpbjsKfQoKLyogd3JpdGUgaW4gYXMgbWFueSBjaHVua3MgYXMgbmVlZGVkICovCnN0YXRp
YyBpbnQgdGxzd3JpdGUoaW50IG4sIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBsZW4pCnsKICBz
aXplX3QgcmV0OwogIHNpemVfdCB0cmV0ID0gMDsKCiAgZm9yKDs7KSB7CiAgICByZXQgPSBnbnV0
bHNfcmVjb3JkX3NlbmQoZ3Nlc3Npb24sIHB0ciwgKHNpemVfdClsZW4pOwogICAgaWYgKHJldCA8
PSAwKQogICAgICByZXR1cm4gcmV0OwogICAgdHJldCArPSByZXQ7CiAgICBpZiAocmV0ID49IGxl
bikKICAgICAgcmV0dXJuIHRyZXQ7CiAgICBsZW4gLT0gcmV0OwogICAgcHRyID0gKGNoYXIgKilw
dHIgKyByZXQ7CiAgfQogICh2b2lkKW47Cn0KCi8qCiAqIGxvdy1sZXZlbCByZWFkIGFuZCB3cml0
ZSBmdW5jdGlvbnMgZm9yIGdudXRscwogKiByZWFkIHJldHVybnMgYXQgbGVhc3Qgb25lIGNoYXIs
IG1vcmUgaWYgdGhleSdyZSBpbiB0aGUgYnVmZmVyCiAqLwpzdGF0aWMgc3NpemVfdCBsbHJlYWQo
Z251dGxzX3RyYW5zcG9ydF9wdHJfdCBwLCB2b2lkKiBidWYsIHNpemVfdCBzaXplKQp7CiAgaW50
IG47CiAgc2l6ZV90IHIgPSAxOwoKICBuID0gaWJ1Zl9nZXRjKCZyZWFsaW5idWYsIGJ1ZisrKTsK
ICBpZiAoIW4pIHJldHVybiAwOwogIHdoaWxlIChyIDwgc2l6ZSAmJiByZWFsaW5idWYuaW8uYnVm
c3RhcnQgPCByZWFsaW5idWYuaW8uYnVmbGVuKSB7CiAgICBuID0gaWJ1Zl9nZXRjKCZyZWFsaW5i
dWYsIGJ1ZisrKTsKICAgIGlmICghbikgcmV0dXJuIDA7CiAgICByKys7CiAgfQogIHJldHVybiBy
OwogICh2b2lkKXA7Cn0KCnN0YXRpYyBzc2l6ZV90IGxsd3JpdGUoZ251dGxzX3RyYW5zcG9ydF9w
dHJfdCBwLCB2b2lkKiBidWYsIHNpemVfdCBzaXplKQp7CiAgaW50IG47CgogIG4gPSBvYnVmX3dy
aXRlKCZyZWFsb3V0YnVmLCBidWYsIHNpemUpOwogIG9idWZfZmx1c2goJnJlYWxvdXRidWYpOwog
IGlmIChuKSByZXR1cm4gc2l6ZTsKICByZXR1cm4gcmVhbG91dGJ1Zi5jb3VudDsJLyogYWN0dWFs
IGFtb3VudCB3cml0dGVuICovCiAgKHZvaWQpcDsKfQoKLyoKICogQ2FsbGVkIGFmdGVyIGNsaWVu
dCBoZWxsbywgc2hvdWxkIGhhbmRsZSBTTkkgd29yay4KICogU2hvdWxkIGJlIHJlZ2lzdGVyZWQg
d2l0aAogKiAgZ251dGxzX2hhbmRzaGFrZV9zZXRfcG9zdF9jbGllbnRfaGVsbG9fZnVuY3Rpb24o
KQogKgogKiBUaGlzIGNhbGxiYWNrIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcyBvciBhIGdudXRs
cyBlcnJvciBjb2RlIHRvIHRlcm1pbmF0ZQogKiB0aGUgaGFuZHNoYWtlLgogKiBGb3IgaW5hYmls
aXR5IHRvIGdldCBTTkkgaW5mb3JtYXRpb24sIHdlIHJldHVybiAwLgogKiBXZSBvbmx5IHJldHVy
biBub24temVybyBpZiByZS1zZXR1cCBmYWlsZWQuCiAqIE9ubHkgdXNlZCBmb3Igc2VydmVyLXNp
ZGUgVExTLgogKi8Kc3RhdGljIGludCBzbmlfaGFuZGxpbmdfY2IoZ251dGxzX3Nlc3Npb25fdCBz
ZXNzaW9uKQp7CiAgY2hhciBzbmlfbmFtZVsyNTZdOwogIHNpemVfdCBkYXRhX2xlbiA9IHNpemVv
ZihzbmlfbmFtZSk7CiAgdW5zaWduZWQgaW50IHNuaV90eXBlOwogIGludCByYzsKCiAgcmMgPSBn
bnV0bHNfc2VydmVyX25hbWVfZ2V0KHNlc3Npb24sIHNuaV9uYW1lLCAmZGF0YV9sZW4sICZzbmlf
dHlwZSwgMCk7CiAgaWYgKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgIGlmIChyYyA9PSBH
TlVUTFNfRV9SRVFVRVNURURfREFUQV9OT1RfQVZBSUxBQkxFKSB7CiAgICAgIG1zZzEoIlRMUzog
bm8gU05JIHByZXNlbnRlZCBpbiBoYW5kc2hha2UuIik7CiAgICB9IGVsc2UgewogICAgICBtc2dm
KCJ7VExTIGZhaWx1cmU6IGdudXRsc19zZXJ2ZXJfbmFtZV9nZXQoKTogfXN7IFt9ZHtdfSIsIGdu
dXRsc19zdHJlcnJvcihyYyksIHJjKTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KICBpZiAoc25p
X3R5cGUgIT0gR05VVExTX05BTUVfRE5TKSB7CiAgICBtc2dmKCJ7VExTOiBpZ25vcmluZyBTTkkg
b2YgdW5oYW5kbGVkIHR5cGUgfXUiLCBzbmlfdHlwZSk7CiAgICByZXR1cm4gMDsKICB9CgogIHN0
ciBzbmljZXJ0ZmlsZSA9IHswfTsKICBzdHIgc25pa2V5ZmlsZSA9IHswfTsKICBzdHIgc25pZG5z
ID0gezB9OwoKICB3cmFwX3N0cihzdHJfY29weXMoJnNuaWRucywgc25pX25hbWUpKTsKICBzdHJf
bG93ZXIoJnNuaWRucyk7CS8qIG1ha2UgYWxsIGxvd2VyIGNhc2UgKi8KCiAgd3JhcF9zdHIoc3Ry
X2NvcHlmKCZzbmljZXJ0ZmlsZSwgInN7L31Tey99U3suY3J0fSIsIGNlcnRkaXIsICZzbmlkbnMs
ICZzbmlkbnMpKTsKICB3cmFwX3N0cihzdHJfY29weWYoJnNuaWtleWZpbGUsICJzey99U3svfVN7
LmtleX0iLCBjZXJ0ZGlyLCAmc25pZG5zLCAmc25pZG5zKSk7CiAgaWYgKCFhY2Nlc3Moc25pY2Vy
dGZpbGUucywgUl9PSykpIHsKICAgIGlmIChhY2Nlc3Moc25pa2V5ZmlsZS5zLCBSX09LKSkKICAg
ICAgd3JhcF9zdHIoc3RyX2NvcHkoJnNuaWtleWZpbGUsICZzbmljZXJ0ZmlsZSkpOwkvKiBkZWZh
dWx0IGlzIHNhbWUgZmlsZSAqLwoKICAgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5
X2tleV9maWxlKHg1MDlfY3JlZCwgc25pY2VydGZpbGUucywgc25pa2V5ZmlsZS5zLCBHTlVUTFNf
WDUwOV9GTVRfUEVNKTsKICAgIG1zZ2YoIntVc2luZyBTTkkgY2VydCBmaWxlIGZvciB9UyIsICZz
bmlkbnMpOwogICAgc2Vzc2lvbl9zZXRzdHIoInRsc19zbmkiLCBzbmlkbnMucyk7CiAgfSBlbHNl
IHsKICAgIG1zZ2YoIntObyBTTkkgY2VydCBmb3IgfVN7LCB1c2luZyBkZWZhdWx0fSIsICZzbmlk
bnMpOwogICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfa2V5X2ZpbGUoeDUwOV9j
cmVkLCBjZXJ0ZmlsZSwga2V5ZmlsZSwgR05VVExTX1g1MDlfRk1UX1BFTSk7CiAgfQogIHN0cl9m
cmVlKCZzbmlkbnMpOwoKICBpZiAocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgbXNnMigi
U05JIFRMUyBjZXJ0aWZpY2F0ZSBpbml0IGZhaWxlZDogIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7
CiAgfQogIHJldHVybiByYzsKfQoKY29uc3QgcmVzcG9uc2UqIHN0YXJ0dGxzX2luaXQodm9pZCkK
ewogIGludCByZXQ7CiAgZ251dGxzX2RoX3BhcmFtc190IGRoX3BhcmFtczsKICBjb25zdCBjaGFy
ICpteV9wcmlvcml0eSA9IGdldGVudigiVExTX1BSSU9SSVRZIik7CiAgY29uc3QgY2hhciAqZGhm
aWxlID0gZ2V0ZW52KCJUTFNfREhfUEFSQU1TIik7CiAgY2VydGZpbGUgPSBnZXRlbnYoIlRMU19D
RVJURklMRSIpOwogIGtleWZpbGUgPSBnZXRlbnYoIlRMU19LRVlGSUxFIik7CiAgY2VydGRpciA9
IGdldGVudigiVExTX0NFUlRESVIiKTsKCiAgaWYgKGtleWZpbGUgPT0gTlVMTCkKICAgIGtleWZp
bGUgPSBjZXJ0ZmlsZTsKCiAgaWYgKGNlcnRmaWxlID09IE5VTEwgfHwgKmNlcnRmaWxlID09IDAg
fHwga2V5ZmlsZSA9PSBOVUxMIHx8ICprZXlmaWxlID09IDApCiAgICByZXR1cm4gTlVMTDsKCiAg
Z251dGxzX2dsb2JhbF9pbml0KCk7CgogIGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVk
ZW50aWFscygmeDUwOV9jcmVkKTsKCiAgcmV0ID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5
X2tleV9maWxlKHg1MDlfY3JlZCwgY2VydGZpbGUsIGtleWZpbGUsIEdOVVRMU19YNTA5X0ZNVF9Q
RU0pOwogIGlmIChyZXQgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgbXNnMigiVExTIGluaXQg
ZmFpbGVkOiAiLCBnbnV0bHNfc3RyZXJyb3IocmV0KSk7CiAgICByZXR1cm4gMDsKICB9CgogIGdu
dXRsc19pbml0KCZnc2Vzc2lvbiwgR05VVExTX1NFUlZFUik7CgogIGlmIChjZXJ0ZGlyICYmICpj
ZXJ0ZGlyKSB7CiAgICBnbnV0bHNfaGFuZHNoYWtlX3NldF9wb3N0X2NsaWVudF9oZWxsb19mdW5j
dGlvbihnc2Vzc2lvbiwgc25pX2hhbmRsaW5nX2NiKTsKICB9CgogIGlmICghbXlfcHJpb3JpdHkp
CiAgICBteV9wcmlvcml0eSA9ICJOT1JNQUwiOwogIHJldCA9IGdudXRsc19wcmlvcml0eV9zZXRf
ZGlyZWN0KGdzZXNzaW9uLCBteV9wcmlvcml0eSwgTlVMTCk7CiAgaWYgKHJldCAhPSBHTlVUTFNf
RV9TVUNDRVNTKSB7CiAgICBtc2cyKCJUTFMgcHJpb3JpdHkgZXJyb3I6ICIsIGdudXRsc19zdHJl
cnJvcihyZXQpKTsKICAgIHJldHVybiAwOwogIH0KCiAgaWYgKGRoZmlsZSAhPSBOVUxMKSB7CiAg
ICBzdHIgZGF0YSA9IHswfTsKICAgIGdudXRsc19kYXR1bV90IHBhcmFtczsKICAgIGlmICghaWJ1
Zl9vcGVucmVhZGNsb3NlKGRoZmlsZSwgJmRhdGEpKSB7CiAgICAgIG1zZzIoIlRMUyBlcnJvciBy
ZWFkaW5nIERIIHBhcmFtczogIiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgcmV0dXJuIE5VTEw7
CiAgICB9CiAgICBwYXJhbXMuZGF0YSA9ICh1bnNpZ25lZCBjaGFyKilkYXRhLnM7CiAgICBwYXJh
bXMuc2l6ZSA9IGRhdGEubGVuOwogICAgZ251dGxzX2RoX3BhcmFtc19pbml0KCZkaF9wYXJhbXMp
OwogICAgaWYgKChyZXQgPSBnbnV0bHNfZGhfcGFyYW1zX2ltcG9ydF9wa2NzMyhkaF9wYXJhbXMs
ICZwYXJhbXMsIEdOVVRMU19YNTA5X0ZNVF9QRU0pKSA8IDApIHsKICAgICAgbXNnMigiVExTIGVy
cm9yIHBhcnNpbmcgREggcGFyYW1zOiAiLCBnbnV0bHNfc3RyZXJyb3IocmV0KSk7CiAgICAgIHJl
dHVybiBOVUxMOwogICAgfQogICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF9kaF9wYXJhbXMoeDUw
OV9jcmVkLCBkaF9wYXJhbXMpOwogICAgLyogRG9uJ3QgZGVpbml0IHRoZSBkaF9wYXJhbXMsIHNp
bmNlIHRoZSBhYm92ZSBvbmx5IHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIHBhcmFtcy4gKi8KICB9
CgogIGdudXRsc19jcmVkZW50aWFsc19zZXQoZ3Nlc3Npb24sIEdOVVRMU19DUkRfQ0VSVElGSUNB
VEUsIHg1MDlfY3JlZCk7CgogIGlmIChnZXRlbnYoIlRMU19DT01QQVQiKSAhPSBOVUxMKSB7CiAg
ICAvKiBTZXQgbWF4aW11bSBjb21wYXRpYmlsaXR5IG1vZGUuICovCiAgICBnbnV0bHNfc2Vzc2lv
bl9lbmFibGVfY29tcGF0aWJpbGl0eV9tb2RlKGdzZXNzaW9uKTsKICB9CgogIHRsc19hdmFpbGFi
bGUgPSAxOwoKICBpZiAoZ2V0ZW52KCJUTFNfSU1NRURJQVRFIikpIHsKICAgIGlmICghc3RhcnR0
bHNfc3RhcnQoKSkKICAgICAgZXhpdCgxKTsJCS8qIG5vdCBtdWNoIGVsc2UgdG8gZG8gKi8KICB9
CiAgcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyB2b2lkIHNldF90bHNwYXJhbXModm9pZCkKewogIGNv
bnN0IGNoYXIgKnByb3RvY29sID0gZ251dGxzX3Byb3RvY29sX2dldF9uYW1lKGdudXRsc19wcm90
b2NvbF9nZXRfdmVyc2lvbihnc2Vzc2lvbikpOwogIGNvbnN0IGNoYXIgKmtleWV4ID0gZ251dGxz
X2t4X2dldF9uYW1lKGdudXRsc19reF9nZXQoZ3Nlc3Npb24pKTsKICBjb25zdCBjaGFyICpjaXBo
ZXIgPSBnbnV0bHNfY2lwaGVyX2dldF9uYW1lKGdudXRsc19jaXBoZXJfZ2V0KGdzZXNzaW9uKSk7
CiAgY29uc3QgY2hhciAqbWFjID0gZ251dGxzX21hY19nZXRfbmFtZShnbnV0bHNfbWFjX2dldChn
c2Vzc2lvbikpOwogIHN0ciB0bHNwYXJhbXMgPSB7MH07CiAgd3JhcF9zdHIoc3RyX2NvcHlmKCZ0
bHNwYXJhbXMsICJzeyB9c3sgfXN7IH1zIiwgcHJvdG9jb2wsIGtleWV4LCBjaXBoZXIsIG1hYykp
OwogIG1zZzIoIlRMUyBoYW5kc2hha2U6ICIsIHRsc3BhcmFtcy5zKTsKICBzZXNzaW9uX3NldHN0
cigidGxzX3BhcmFtcyIsIHRsc3BhcmFtcy5zKTsKICBzdHJfZnJlZSgmdGxzcGFyYW1zKTsKICBz
ZXNzaW9uX3NldHN0cigidGxzX3Byb3RvY29sIiwgcHJvdG9jb2wpOwogIHNlc3Npb25fc2V0c3Ry
KCJ0bHNfa2V5ZXgiLCBrZXlleCk7CiAgc2Vzc2lvbl9zZXRzdHIoInRsc19jaXBoZXIiLCBjaXBo
ZXIpOwogIHNlc3Npb25fc2V0c3RyKCJ0bHNfbWFjIiwgbWFjKTsKfQoKaW50IHN0YXJ0dGxzX3N0
YXJ0KHZvaWQpCnsKICBzdGF0aWMgaW50IGRpZHN0YXJ0dGxzID0gMDsKICBpbnQgcmV0OwoKICAv
KiBTVEFSVFRMUyBtdXN0IGJlIHRoZSBsYXN0IGNvbW1hbmQgaW4gYSBwaXBlbGluZSwgYnV0IHRv
byBiYWQuCiAgICogSSBkb24ndCB0aGluayBDVkUtMjAxMS0wNDExIGFwcGxpZXMgc2luY2UgdGhl
IFRMUyBoYW5kc2hha2UKICAgKiBjb25zdW1lcyB3aHRhdGV2ZXIgZm9sbG93cyB0aGUgU1RBUlRU
TFMgY29tbWFuZCAgKi8KCiAgaWYgKGRpZHN0YXJ0dGxzKSB7CiAgICBtc2cyKCJhbHJlYWR5IGNh
bGxlZCIsICJnbnV0bHMgZ2xvYmFsIGluaXQiKTsKICAgIHJldHVybiAwOwogIH0KICBkaWRzdGFy
dHRscyA9IDE7CgogIC8qIHNhdmUgaW5wdXQgYW5kIG91dHB1dCB0byBmZWVkIGludG8gVExTIGVu
Z2luZSB2aWEgbGxyZWFkIGFuZCBsbHdyaXRlICovCiAgcmVhbGluYnVmID0gaW5idWY7CiAgcmVh
bG91dGJ1ZiA9IG91dGJ1ZjsKCiAgLyogUmUtaW5pdGlhbGl6ZSBpbnB1dCBhbmQgb3V0cHV0IHRv
IHVzZSBvdXIgbG9jYWwgVExTLWl6ZWQgSS9PICovCiAgaWJ1Zl9pbml0KCZpbmJ1ZiwgLTEsIChp
YnVmX2ZuKSp0bHNyZWFkLCAwLCAwKTsKICBvYnVmX2luaXQoJm91dGJ1ZiwtMSwgKG9idWZfZm4p
KnRsc3dyaXRlLCAwLCAwKTsKCiAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihn
c2Vzc2lvbiwgKGdudXRsc19wdWxsX2Z1bmMpbGxyZWFkKTsKICBnbnV0bHNfdHJhbnNwb3J0X3Nl
dF9wdXNoX2Z1bmN0aW9uKGdzZXNzaW9uLCAoZ251dGxzX3B1c2hfZnVuYylsbHdyaXRlKTsKCiAg
bXNnMSgiU3RhcnRpbmcgVExTIGhhbmRzaGFrZSIpOwoKICByZXQgPSBnbnV0bHNfaGFuZHNoYWtl
KGdzZXNzaW9uKTsKICBpZiAocmV0IDwgMCkgewogICAgbXNnMigiVExTIGhhbmRzaGFrZSBmYWls
ZWQ6ICIsIGdudXRsc19zdHJlcnJvcihyZXQpKTsKICAgIGdudXRsc19kZWluaXQoZ3Nlc3Npb24p
OwogICAgcmV0dXJuIDA7CiAgfQogIHNldF90bHNwYXJhbXMoKTsKICByZXR1cm4gMTsKfQoKaW50
IHN0YXJ0dGxzX2F2YWlsYWJsZSh2b2lkKQp7CiAgcmV0dXJuIHRsc19hdmFpbGFibGU7Cn0KCnZv
aWQgc3RhcnR0bHNfZGlzYWJsZSh2b2lkKQp7CiAgdGxzX2F2YWlsYWJsZSA9IDA7Cn0K

--=_600ce5adb8843ffe7ef5dc8ca7a64883
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--=_600ce5adb8843ffe7ef5dc8ca7a64883--