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--