[17422] in Kerberos_V5_Development
ACL support in KDC management of AS_REQ and TGS_REQ
daemon@ATHENA.MIT.EDU (Matthieu Hautreux)
Wed Nov 30 18:01:08 2011
MIME-Version: 1.0
Date: Thu, 1 Dec 2011 00:01:04 +0100
Message-ID: <CAChPGiDxyObLNyNPM8fDhcuBMs=aivY2ZkmSVV07r7My-Dbc-g@mail.gmail.com>
From: Matthieu Hautreux <matthieu.hautreux@gmail.com>
To: krbdev@mit.edu
Content-Type: multipart/mixed; boundary=20cf307ac009e1ee2f04b2fbb50e
Errors-To: krbdev-bounces@mit.edu
--20cf307ac009e1ee2f04b2fbb50e
Content-Type: text/plain; charset=ISO-8859-1
Hi,
looking at a way to filter incoming requests on a KDC based on IP
source addrs, we worked on a patch to add a new ACL mechanism to
allow/deny particular requests on the KDC side.
The main goal was to enforce that AS_REQ where only possible from a
subset of nodes instead of the whole infrastructure. The ACL concept
was then extended to the TGS_REQ, as it was not really difficult to
add that feature once the initial logic is added.
I am wondering if it is something that could be useful for other users
of MIT kerberos. You will find enclosed a preliminar version for
krb5-1.9.1. As well as a few notes below explaining the way it works.
Let me know if it is something that you would be interested to add in
a future version of the product. I would try in that case to work to
provide something including docs and regression tests. (I based the
acl file parsing logic on the one used for kadmin.acl)
Regards,
Matthieu
Notes :
The KDC acl support is configured using a kdc_acl pragma in the
kdcdefaults section ok kdc.conf pointing to the ACL file :
[root@leaf ~]# grep -B 4 kdc_acl /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
kdc_acl = /var/kerberos/krb5kdc/kdc.acl
[root@leaf ~]#
The KDC acl file enables to filter AS and TGS request to only serves a subset
of the incoming requests. The format of the ACL file is the following :
* For AS_REQ filtering :
AS_REQ: allow|deny regexp1 from regexp2
where regexp1 correspond to the list of principals and regexp2 to the
list of source IP addresses of requests that will match the rule.
* For TGS_REQ filtering :
TGS_REQ: allow|deny regexp1 from regexp2 for regexp3
where regexp1 correspond to the list of target principals, regexp2 to
the list of source IP addresses and regexp3 to the client principal of
requests that will match the rule.
Here is an example of a configuration file :
#-------------
AS_REQ: allow ^(host/.*@EXAMPLE.ORG|admin/.*@EXAMPLE.ORG)$ \
from ^(192\.168\.0\.1)|(192\.168\.0\.2)$
AS_REQ: allow ^hautreux@EXAMPLE\.ORG$ \
from ^(10\.0\.0\.1)$
AS_REQ: deny * from *
TGS_REQ: deny ^(admin/.*@EXAMPLE.ORG)$ \
from ^(10\.0\.0\.1)$ \
for ^hautreux@EXAMPLE\.ORG$
TGS_REQ: allow * from * for *
#-------------
--20cf307ac009e1ee2f04b2fbb50e
Content-Type: text/x-patch; charset=US-ASCII; name="krb5-1.9.1-kdc_acl.patch"
Content-Disposition: attachment; filename="krb5-1.9.1-kdc_acl.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gvmxyz960
ZGlmZiAtTmF1ciBrcmI1LTEuOS4xLm9yaS9zcmMva2RjL2RvX2FzX3JlcS5jIGtyYjUtMS45LjEv
c3JjL2tkYy9kb19hc19yZXEuYwotLS0ga3JiNS0xLjkuMS5vcmkvc3JjL2tkYy9kb19hc19yZXEu
YwkyMDExLTAzLTE2IDAwOjI2OjUzLjAwMDAwMDAwMCArMDEwMAorKysga3JiNS0xLjkuMS9zcmMv
a2RjL2RvX2FzX3JlcS5jCTIwMTEtMTEtMzAgMTE6MzI6MzkuODQ3OTI1MDIzICswMTAwCkBAIC03
Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAicG9saWN5LmgiCiAjaW5jbHVkZSAiYWRtLmgiCiAjaW5j
bHVkZSAiYWRtX3Byb3RvLmgiCisjaW5jbHVkZSAia2RjX2FjbC5oIgogI2luY2x1ZGUgImV4dGVy
bi5oIgogCiAjaWYgQVBQTEVfUEtJTklUCkBAIC0xOTEsNiArMTkyLDE1IEBACiAgICAgbGltaXRf
c3RyaW5nKHNuYW1lKTsKIAogICAgIC8qCisgICAgICogQXBwbHkgQUNMcyB0byB0aGUgQVMgcmVx
dWVzdAorICAgICAqLworICAgIGlmICggISBrZGNfYWNsX2NoZWNrX2FzX3JlcShrZGNfY29udGV4
dCxjbmFtZSxmcm9tKSApIHsKKyAgICAgICAgZXJyY29kZSA9IEtSQjVLUkJfRVJSX0dFTkVSSUM7
CisgICAgICAgIHN0YXR1cyA9ICJLRENfQUNMX0ZBSUxFRCI7CisgICAgICAgIGdvdG8gZXJyb3V0
OworICAgIH0KKyAgICAKKyAgICAvKgogICAgICAqIFdlIHNldCBLUkI1X0tEQl9GTEFHX0NMSUVO
VF9SRUZFUlJBTFNfT05MWSBhcyBhIGhpbnQKICAgICAgKiB0byB0aGUgYmFja2VuZCB0byByZXR1
cm4gbmFtaW5nIGluZm9ybWF0aW9uIGluIGxpZXUKICAgICAgKiBvZiBjcm9zcyByZWFsbSBUR1Mg
ZW50cmllcy4KZGlmZiAtTmF1ciBrcmI1LTEuOS4xLm9yaS9zcmMva2RjL2RvX3Rnc19yZXEuYyBr
cmI1LTEuOS4xL3NyYy9rZGMvZG9fdGdzX3JlcS5jCi0tLSBrcmI1LTEuOS4xLm9yaS9zcmMva2Rj
L2RvX3Rnc19yZXEuYwkyMDEwLTA5LTE1IDE5OjEzOjIzLjAwMDAwMDAwMCArMDIwMAorKysga3Ji
NS0xLjkuMS9zcmMva2RjL2RvX3Rnc19yZXEuYwkyMDExLTExLTMwIDExOjMyOjEzLjYwNzI1MzA3
NiArMDEwMApAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgInBvbGljeS5oIgogI2luY2x1ZGUg
ImV4dGVybi5oIgogI2luY2x1ZGUgImFkbV9wcm90by5oIgorI2luY2x1ZGUgImtkY19hY2wuaCIK
ICNpbmNsdWRlIDxjdHlwZS5oPgogCiBzdGF0aWMga3JiNV9lcnJvcl9jb2RlCkBAIC0yMTgsNiAr
MjE5LDE2IEBACiAgICAgfQogICAgIGxpbWl0X3N0cmluZyhzbmFtZSk7CiAKKyAgICAvKgorICAg
ICAqIEFwcGx5IEFDTHMgdG8gdGhlIFRHUyByZXF1ZXN0CisgICAgICovCisgICAgaWYgKCAhIGtk
Y19hY2xfY2hlY2tfdGdzX3JlcShrZGNfY29udGV4dCxzbmFtZSxmcm9tLGNuYW1lKSApIHsKKyAg
ICAgICAgZXJyY29kZSA9IEtSQjVLUkJfRVJSX0dFTkVSSUM7CisgICAgICAgIHN0YXR1cyA9ICJL
RENfQUNMX0ZBSUxFRCI7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKwogICAgIGVy
cmNvZGUgPSBrcmI1X2RiX2dldF9wcmluY2lwYWwoa2RjX2NvbnRleHQsIHJlcXVlc3QtPnNlcnZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfZmxhZ3MsICZzZXJ2ZXIp
OwogICAgIGlmIChlcnJjb2RlICYmIGVycmNvZGUgIT0gS1JCNV9LREJfTk9FTlRSWSkgewpkaWZm
IC1OYXVyIGtyYjUtMS45LjEub3JpL3NyYy9rZGMva2RjX2FjbC5jIGtyYjUtMS45LjEvc3JjL2tk
Yy9rZGNfYWNsLmMKLS0tIGtyYjUtMS45LjEub3JpL3NyYy9rZGMva2RjX2FjbC5jCTE5NzAtMDEt
MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBrcmI1LTEuOS4xL3NyYy9rZGMva2RjX2Fj
bC5jCTIwMTEtMTEtMzAgMTE6MzY6MTIuNTg2MjY1NDMxICswMTAwCkBAIC0wLDAgKzEsNTc1IEBA
CisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5p
bCAtKi0gKi8KKy8qCisgKiBzcmMva2RjL2tkY19hY2wuYworICoKKyAqLworCisvKgorICoga2Rj
X2FjbC5jIC0gSGFuZGxlIEtlcmJlcm9zIEtEQyBBQ0wgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1
ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIms1LWludC5oIgor
I2luY2x1ZGUgImFkbV9wcm90by5oIgorI2luY2x1ZGUgIm5ldC1zZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJzeXMvc3lzbG9nLmgiCisjaW5jbHVkZSAia2RjX2FjbC5oIgorCisvKgorICogRnJvbSBrZGNf
dXRpbC5oCisgKi8KKyNpZmRlZiBLUkI1X1VTRV9JTkVUNgorI2RlZmluZSBBRERSVFlQRTJGQU1J
TFkoWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICgoWCkgPT0gQUREUlRZUEVfSU5FVDYgPyBBRl9JTkVUNiA6IChYKSA9PSBBRERSVFlQRV9JTkVU
ID8gQUZfSU5FVCA6IC0xKQorI2Vsc2UKKyNkZWZpbmUgQUREUlRZUEUyRkFNSUxZKFgpICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAoKFgpID09IEFERFJUWVBFX0lORVQgPyBBRl9JTkVUIDog
LTEpCisjZW5kaWYKKworI2lmbmRlZiBLUkI1X0RFRkFVTFRfS0RDX0FDTAorI2RlZmluZSBLUkI1
X0RFRkFVTFRfS0RDX0FDTCAia2RjLmFjbCIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfa2Rj
X2FjbF9lbnRyeSB7CisgICAgc3RydWN0IF9rZGNfYWNsX2VudHJ5ICphZV9uZXh0OworICAgIGty
YjVfaW50MzIgICAgICAgICAgICByZXFfdHlwZTsKKyAgICBrcmI1X2Jvb2xlYW4gICAgICAgICAg
YWxsb3c7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICp0cHJpbmM7CisgICAgY2hhciAgICAg
ICAgICAgICAgICAgICpjYWRkcjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgKmNwcmluYzsK
KyAgICByZWdleF90ICAgICAgICAgICAgICAgdHByaW5jX3JleDsKKyAgICByZWdleF90ICAgICAg
ICAgICAgICAgY2FkZHJfcmV4OworICAgIHJlZ2V4X3QgICAgICAgICAgICAgICBjcHJpbmNfcmV4
OworICAgIHJlZ2V4X3QgICAgICAgICAgICAgICAqdHByaW5jX3JleHA7CisgICAgcmVnZXhfdCAg
ICAgICAgICAgICAgICpjYWRkcl9yZXhwOworICAgIHJlZ2V4X3QgICAgICAgICAgICAgICAqY3By
aW5jX3JleHA7Cit9IGthZW50X3Q7CisKK3N0YXRpYyBpbnQgYWNsX2luaXRlZCA9IDA7CitzdGF0
aWMgaW50IGFjbF9kZWJ1Z19sZXZlbCA9IDA7CisKK3N0YXRpYyBjaGFyICAgICAgKmFjbF9hY2xf
ZmlsZSA9IE5VTEw7CitzdGF0aWMga2FlbnRfdCAgICphY2xfbGlzdF9oZWFkID0gKGthZW50X3Qg
KikgTlVMTDsKK3N0YXRpYyBrYWVudF90ICAgKmFjbF9saXN0X3RhaWwgPSAoa2FlbnRfdCAqKSBO
VUxMOworCitzdGF0aWMgY29uc3QgY2hhciAqYWNsX2xpbmUybG9uZ19tc2cgPSAiJXM6IGxpbmUg
JWQgdG9vIGxvbmcsIHRydW5jYXRlZCI7CitzdGF0aWMgY29uc3QgY2hhciAqYWNsX3N5bl9lcnJf
bXNnID0gIiVzOiBzeW50YXggZXJyb3IgYXQgbGluZSAlZCA8JTEwcy4uLj4iOworc3RhdGljIGNv
bnN0IGNoYXIgKmFjbF9jYW50b3Blbl9tc2cgPSAiJXMgd2hpbGUgb3BlbmluZyBBQ0wgZmlsZSAl
cyI7CisKK3N0YXRpYyBpbnQga2RjX2FjbF9wcmludF9lbnRyeShjb25zdCBrYWVudF90ICphZSwg
aW50IGxvZ2xldmVsKTsKK3N0YXRpYyBpbnQga2RjX2FjbF9lbnRyeV9pbml0KGthZW50X3QgKmFl
LCBpbnQgcmVxX3R5cGUsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICp0cHJpbmMsY29uc3QgY2hhciAqY2FkZHIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjcHJpbmMpOworc3RhdGljIGludCBrZGNf
YWNsX2VudHJ5X21hdGNoKGthZW50X3QgKmFlLCBpbnQgcmVxX3R5cGUsY29uc3QgY2hhciogdHBy
aW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNhZGRyLCBj
b25zdCBjaGFyKiBjcHJpbmMpOworc3RhdGljIGludCBrZGNfYWNsX3JlZ2V4X29rKHJlZ2V4X3Qg
KnJlZ2V4cCwgY29uc3QgY2hhciAgKmlucHV0KTsKK3ZvaWQga2RjX2FjbF9lbnRyeV9kZXN0cm95
KGthZW50X3QgKmFlKTsKKworDAorLyoKKyAqIGtkY19hY2xfcmVnZXhfb2soKSAtIElzIHRoaXMg
cmVnZXggbWF0Y2hlZCA/CisgKi8KK2ludAora2RjX2FjbF9yZWdleF9vayhyZWdleHAsaW5wdXQp
CisgICAgIHJlZ2V4X3QgKnJlZ2V4cDsKKyAgICAgY29uc3QgY2hhciAgKmlucHV0OworeworICAg
IGludCByZXR2YWw7CisgICAgcmV0dmFsID0gMDsKKyAgICAKKyAgICBpZiAoaW5wdXQgPT0gTlVM
TCkKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKworICAgIGVsc2UgaWYocmVnZXhwICE9IE5VTEwg
JiYKKyAgICAgICAgICAgIHJlZ2V4ZWMocmVnZXhwLGlucHV0LDAsTlVMTCwwKSA9PSAwKQorICAg
ICAgICByZXR2YWwgPSAxOworCisgICAgcmV0dXJuIChyZXR2YWwpOworfQorDAorLyoKKyAqIGtk
Y19hY2xfcHJpbnRfZW50cnkoKSAtIFByaW50IGEgbGluZSBmb3IgdGhlIGVudHJ5CisgKi8KK3N0
YXRpYyBpbnQKK2tkY19hY2xfcHJpbnRfZW50cnkoYWUsbG9nbGV2ZWwpCisgICAgIGNvbnN0IGth
ZW50X3QgKmFlOworICAgICBpbnQgICAgICAgICAgIGxvZ2xldmVsOworeworICAgIGlmIChhZS0+
cmVxX3R5cGUgPT0gS0FFTlRfUkVRX1RZUEVfQVMpCisgICAgICAgIGtyYjVfa2xvZ19zeXNsb2co
bG9nbGV2ZWwsICJrZGNfYWNsOiBBU19SRVE6ICVzICVzIGZyb20gJXMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGFlLT5hbGxvdyA/ICJhbGxvdyI6ImRlbnkiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGFlLT50cHJpbmMgPyBhZS0+dHByaW5jIDogIi0iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGFlLT5jYWRkciA/IGFlLT5jYWRkciA6ICItIik7CisgICAgZWxzZSBpZiAoYWUt
PnJlcV90eXBlID09IEtBRU5UX1JFUV9UWVBFX1RHUykKKyAgICAgICAga3JiNV9rbG9nX3N5c2xv
Zyhsb2dsZXZlbCwgImtkY19hY2w6IFRHU19SRVE6ICVzICVzIGZyb20gJXMgZm9yICVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBhZS0+YWxsb3cgPyAiYWxsb3ciOiJkZW55IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBhZS0+dHByaW5jID8gYWUtPnRwcmluYyA6ICItIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBhZS0+Y2FkZHIgPyBhZS0+Y2FkZHIgOiAiLSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgYWUtPmNwcmluYyA/IGFlLT5jcHJpbmMgOiAiLSIpOworICAgIGVs
c2UKKyAgICAgICAga3JiNV9rbG9nX3N5c2xvZyhsb2dsZXZlbCwgImtkY19hY2w6IEJhZCBlbnRy
eSBkZXRlY3RlZCIpOworICAgIHJldHVybiAwOworfQorDAorLyoKKyAqIGtkY19hY2xfZW50cnlf
aW5pdCgpIC0gSW50aWFsaXplIGEga2FlbnQgZW50cnkKKyAqLworaW50CitrZGNfYWNsX2VudHJ5
X2luaXQoYWUscmVxX3R5cGUsbW9kZSx0cHJpbmMsY2FkZHIsY3ByaW5jKQorICAgICBrYWVudF90
ICphZTsKKyAgICAgaW50ICAgICAgICAgICAgICAgICByZXFfdHlwZTsKKyAgICAgY29uc3QgY2hh
ciogICAgICAgICBtb2RlOworICAgICBjb25zdCBjaGFyKiAgICAgICAgIHRwcmluYzsKKyAgICAg
Y29uc3QgY2hhciogICAgICAgICBjYWRkcjsKKyAgICAgY29uc3QgY2hhciogICAgICAgICBjcHJp
bmM7ICAgICAKK3sKKyAgICBpbnQgcmV0dmFsOworCisgICAgcmV0dmFsID0gMTsKKworICAgIGlm
ICh0cHJpbmMgPT0gTlVMTCB8fCBjYWRkciA9PSBOVUxMIHx8IG1vZGUgPT0gTlVMTCkKKyAgICAg
ICAgZ290byBvdXQ7CisgICAgaWYgKHJlcV90eXBlID09IEtBRU5UX1JFUV9UWVBFX1RHUyAmJiBj
cHJpbmMgPT0gTlVMTCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBpZiAoc3RybmNtcCgiYWxs
b3ciLG1vZGUsNikgPT0gMCkKKyAgICAgICAgYWUtPmFsbG93ID0gMTsKKyAgICBlbHNlIGlmIChz
dHJuY21wKCJkZW55Iixtb2RlLDUpID09IDApCisgICAgICAgIGFlLT5hbGxvdyA9IDA7CisgICAg
ZWxzZSB7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGFlLT5yZXFfdHlwZSA9IHJl
cV90eXBlIDsKKyAgICBhZS0+YWVfbmV4dCA9IE5VTEwgOworICAgIGFlLT50cHJpbmMgPSBzdHJk
dXAodHByaW5jKTsKKyAgICBhZS0+Y2FkZHIgPSBzdHJkdXAoY2FkZHIpOworICAgIGlmIChjcHJp
bmMgIT0gTlVMTCkKKyAgICAgICAgYWUtPmNwcmluYyA9IHN0cmR1cChjcHJpbmMpOworICAgIGVs
c2UKKyAgICAgICAgYWUtPmNwcmluYyA9IE5VTEw7CisKKyAgICBhZS0+dHByaW5jX3JleHAgPSBO
VUxMOworICAgIGFlLT5jYWRkcl9yZXhwID0gTlVMTDsKKyAgICBhZS0+Y3ByaW5jX3JleHAgPSBO
VUxMOworCisgICAgaWYgKGFlLT50cHJpbmMgIT0gTlVMTCkgeworICAgICAgICBpZiAoc3RybmNt
cChhZS0+dHByaW5jLCIqIiwyKSA9PSAwKQorICAgICAgICAgICAgYWUtPnRwcmluY19yZXhwID0g
TlVMTDsKKyAgICAgICAgZWxzZSBpZiAocmVnY29tcCgmKGFlLT50cHJpbmNfcmV4KSxhZS0+dHBy
aW5jLFJFR19FWFRFTkRFRCkgPT0gMCkgeworICAgICAgICAgICAgYWUtPnRwcmluY19yZXhwID0g
JihhZS0+dHByaW5jX3JleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Z290byBlcnI7CisgICAgfQorICAgIGlmIChhZS0+Y2FkZHIgIT0gTlVMTCkgeworICAgICAgICBp
ZiAoc3RybmNtcChhZS0+Y2FkZHIsIioiLDIpID09IDApCisgICAgICAgICAgICBhZS0+Y2FkZHJf
cmV4cCA9IE5VTEw7CisgICAgICAgIGVsc2UgaWYgKHJlZ2NvbXAoJihhZS0+Y2FkZHJfcmV4KSxh
ZS0+Y2FkZHIsUkVHX0VYVEVOREVEKSA9PSAwKSB7CisgICAgICAgICAgICBhZS0+Y2FkZHJfcmV4
cCA9ICYoYWUtPmNhZGRyX3JleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZ290byBlcnI7CisgICAgfQorICAgIGlmIChhZS0+Y3ByaW5jICE9IE5VTEwpIHsKKyAgICAg
ICAgaWYgKHN0cm5jbXAoYWUtPmNwcmluYywiKiIsMikgPT0gMCkKKyAgICAgICAgICAgIGFlLT5j
cHJpbmNfcmV4cCA9IE5VTEw7CisgICAgICAgIGVsc2UgaWYgKHJlZ2NvbXAoJihhZS0+Y3ByaW5j
X3JleCksYWUtPmNwcmluYyxSRUdfRVhURU5ERUQpID09IDApIHsKKyAgICAgICAgICAgIGFlLT5j
cHJpbmNfcmV4cCA9ICYoYWUtPmNwcmluY19yZXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdvdG8gZXJyOworICAgIH0KKyAgICByZXR2YWwgPSAwOworICAgIGtkY19h
Y2xfcHJpbnRfZW50cnkoYWUsTE9HX0lORk8pOworICAgIGdvdG8gb3V0OworICAgIAorIGVycjoK
KyAgICBrZGNfYWNsX2VudHJ5X2Rlc3Ryb3koYWUpOworICAgIAorIG91dDoKKyAgICByZXR1cm4g
cmV0dmFsOworfQorDAorLyoKKyAqIGtkY19hY2xfZW50cnlfbWF0Y2goKSAtIFJldHVybiAxIGlm
IHRoZSBlbnRyeSBtYXRjaGVzIHRoZSBpbnB1dCBmaWVsZHMKKyAqLworaW50CitrZGNfYWNsX2Vu
dHJ5X21hdGNoKGFlLHJlcV90eXBlLHRwcmluYyxjYWRkcixjcHJpbmMpCisgICAgIGthZW50X3Qg
KmFlOworICAgICBpbnQgICAgICAgICAgICAgICAgIHJlcV90eXBlOworICAgICBjb25zdCBjaGFy
KiAgICAgICAgIHRwcmluYzsKKyAgICAgY29uc3QgY2hhciogICAgICAgICBjYWRkcjsKKyAgICAg
Y29uc3QgY2hhciogICAgICAgICBjcHJpbmM7ICAgICAKK3sKKyAgICBpbnQgcmV0dmFsOworICAg
IHJldHZhbCA9IDA7CisKKyAgICBpZiAoIGFlLT5yZXFfdHlwZSA9PSByZXFfdHlwZSAmJgorICAg
ICAgICAgKCBzdHJuY21wKGFlLT50cHJpbmMsIioiLDIpID09IDAgfHwKKyAgICAgICAgICAga2Rj
X2FjbF9yZWdleF9vayhhZS0+dHByaW5jX3JleHAsdHByaW5jKSApICYmCisgICAgICAgICAoIHN0
cm5jbXAoYWUtPmNhZGRyLCIqIiwyKSA9PSAwIHx8CisgICAgICAgICAgIGtkY19hY2xfcmVnZXhf
b2soYWUtPmNhZGRyX3JleHAsY2FkZHIpICkgJiYKKyAgICAgICAgIChyZXFfdHlwZSA9PSBLQUVO
VF9SRVFfVFlQRV9BUyB8fAorICAgICAgICAgICggc3RybmNtcChhZS0+Y3ByaW5jLCIqIiwyKSA9
PSAwIHx8CisgICAgICAgICAgICBrZGNfYWNsX3JlZ2V4X29rKGFlLT5jcHJpbmNfcmV4cCxjcHJp
bmMpICkgKQorICAgICAgICAgKSB7CisgICAgICAgIHJldHZhbCA9IDE7CisgICAgfQorCisgICAg
cmV0dXJuIHJldHZhbDsKK30KKwwKKy8qCisgKiBrZGNfYWNsX2VudHJ5X2Rlc3Ryb3koKSAtIERl
c3Ryb3kgYSBrYWVudCBlbnRyeQorICovCit2b2lkCitrZGNfYWNsX2VudHJ5X2Rlc3Ryb3koYWUp
CisgICAgIGthZW50X3QgKmFlOworeworICAgIGlmIChhZS0+dHByaW5jICE9IE5VTEwpCisgICAg
ICAgIGZyZWUoYWUtPnRwcmluYyk7CisgICAgYWUtPnRwcmluYyA9IE5VTEw7CisgICAgaWYgKGFl
LT5jYWRkciAhPSBOVUxMKQorICAgICAgICBmcmVlKGFlLT5jYWRkcik7CisgICAgYWUtPmNhZGRy
ID0gTlVMTDsKKyAgICBpZiAoYWUtPmNwcmluYyAhPSBOVUxMKQorICAgICAgICBmcmVlKGFlLT5j
cHJpbmMpOworICAgIGFlLT5jcHJpbmMgPSBOVUxMOworCisgICAgaWYgKGFlLT50cHJpbmNfcmV4
cCAhPSBOVUxMKQorICAgICAgICByZWdmcmVlKGFlLT50cHJpbmNfcmV4cCk7CisgICAgYWUtPnRw
cmluY19yZXhwID0gTlVMTDsKKyAgICBpZiAoYWUtPmNhZGRyX3JleHAgIT0gTlVMTCkKKyAgICAg
ICAgcmVnZnJlZShhZS0+Y2FkZHJfcmV4cCk7CisgICAgYWUtPmNhZGRyX3JleHAgPSBOVUxMOwor
ICAgIGlmIChhZS0+Y3ByaW5jX3JleHAgIT0gTlVMTCkKKyAgICAgICAgcmVnZnJlZShhZS0+Y3By
aW5jX3JleHApOworICAgIGFlLT5jcHJpbmNfcmV4cCA9IE5VTEw7CisKKyAgICBhZS0+YWVfbmV4
dCA9IE5VTEw7Cit9CisMCisvKgorICoga2RjX2FjbF9mcmVlX2VudHJpZXMoKSAtIEZyZWUgYWxs
IEFDTCBlbnRyaWVzLgorICovCitzdGF0aWMgdm9pZAora2RjX2FjbF9mcmVlX2VudHJpZXMoKQor
eworICAgIGthZW50X3QgICAgICAqYXA7CisgICAga2FlbnRfdCAgICAgICpucDsKKworICAgIERQ
UklOVChERUJVR19DQUxMUywgYWNsX2RlYnVnX2xldmVsLCAoIioga2RjX2FjbF9mcmVlX2VudHJp
ZXMoKVxuIikpOworCisgICAgZm9yIChhcD1hY2xfbGlzdF9oZWFkOyBhcDsgYXAgPSBucCkgewor
ICAgICAgICBucCA9IGFwLT5hZV9uZXh0OworICAgICAgICBrZGNfYWNsX2VudHJ5X2Rlc3Ryb3ko
YXApOworICAgICAgICBmcmVlKGFwKTsKKyAgICB9CisgICAgYWNsX2xpc3RfaGVhZCA9IGFjbF9s
aXN0X3RhaWwgPSAoa2FlbnRfdCAqKSBOVUxMOworICAgIGFjbF9pbml0ZWQgPSAwOworCisgICAg
RFBSSU5UKERFQlVHX0NBTExTLCBhY2xfZGVidWdfbGV2ZWwsICgiWCBrZGNfYWNsX2ZyZWVfZW50
cmllcygpXG4iKSk7Cit9CisMCisvKgorICoga2RjX2FjbF9nZXRfbGluZSgpIC0gR2V0IGEgbGlu
ZSBmcm9tIHRoZSBBQ0wgZmlsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIExpbmVzIGVuZGlu
ZyB3aXRoIFwgYXJlIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lCisgKi8KK3N0YXRpYyBjaGFy
ICoKK2tkY19hY2xfZ2V0X2xpbmUoZnAsIGxucCkKKyAgICAgRklMRSAgICAgICAgKmZwOworICAg
ICBpbnQgICAgICAgICAqbG5wOyAgICAgICAgICAgLyogY2FsbGVyIHNob3VsZCBzZXQgdG8gMSBi
ZWZvcmUgZmlyc3QgY2FsbCAqLworeworICAgIGludCAgICAgICAgIGksIGRvbW9yZTsKKyAgICBz
dGF0aWMgaW50ICBsaW5lX2luY3IgPSAwOworICAgIHN0YXRpYyBjaGFyIGFjbF9idWZbQlVGU0la
XTsKKworICAgICpsbnAgKz0gbGluZV9pbmNyOworICAgIGxpbmVfaW5jciA9IDA7CisgICAgZm9y
IChkb21vcmUgPSAxOyBkb21vcmUgJiYgIWZlb2YoZnApOyApIHsKKyAgICAgICAgLyogQ29weSBp
biB0aGUgbGluZSwgd2l0aCBjb250aW51YXRpb25zICovCisgICAgICAgIGZvciAoaT0wOyAoKCh1
bnNpZ25lZCBpbnQpaSA8IHNpemVvZiBhY2xfYnVmKSAmJiAhZmVvZihmcCkpOyBpKysgKSB7Cisg
ICAgICAgICAgICBpbnQgYnl0ZTsKKyAgICAgICAgICAgIGJ5dGUgPSBmZ2V0YyhmcCk7CisgICAg
ICAgICAgICBhY2xfYnVmW2ldID0gYnl0ZTsKKyAgICAgICAgICAgIGlmIChieXRlID09IChjaGFy
KUVPRikgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBhY2xfYnVmW2ktMV0gPT0gJ1xc
JykKKyAgICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAvKiBpdCBnZXRzIG51bGxlZC1vdXQgYmVsb3cgKi8KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFjbF9idWZbaV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGlm
IChpID09IDAgfHwgYWNsX2J1ZltpLTFdICE9ICdcXCcpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgIC8qIGVtcHR5IGxpbmUgb3Igbm9ybWFsIGVuZCBvZiBsaW5lICovCisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsgICAgIC8qIGJhY2sg
dXAgb3ZlciAiXFxcbiIgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgICAgICAgICAgIGxpbmVf
aW5jcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvKiBDaGVjayBpZiB3ZSBleGNlZWRlZCBvdXIgYnVmZmVyIHNpemUgKi8KKyAgICAgICAg
aWYgKGkgPT0gc2l6ZW9mIGFjbF9idWYgJiYgKGktLSwgIWZlb2YoZnApKSkgeworICAgICAgICAg
ICAgaW50IGMxID0gYWNsX2J1ZltpXSwgYzI7CisKKyAgICAgICAgICAgIGtyYjVfa2xvZ19zeXNs
b2coTE9HX0VSUiwgYWNsX2xpbmUybG9uZ19tc2csIGFjbF9hY2xfZmlsZSwgKmxucCk7CisKKyAg
ICAgICAgICAgIHdoaWxlICgoYzIgPSBmZ2V0YyhmcCkpICE9IEVPRikgeworICAgICAgICAgICAg
ICAgIGlmIChjMiA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjMSAhPSAnXFwn
KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGxp
bmVfaW5jcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjMSA9IGMyOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFjbF9idWZbaV0gPSAnXDAnOworICAg
ICAgICBpZiAoYWNsX2J1ZlswXSA9PSAoY2hhcikgRU9GKSAgIC8qIHB0b29leSAqLworICAgICAg
ICAgICAgYWNsX2J1ZlswXSA9ICdcMCc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxpbmVf
aW5jcisrOworICAgICAgICBpZiAoKGFjbF9idWZbMF0gIT0gJyMnKSAmJiAoYWNsX2J1ZlswXSAh
PSAnXDAnKSkKKyAgICAgICAgICAgIGRvbW9yZSA9IDA7CisgICAgfQorICAgIGlmIChkb21vcmUg
fHwgKHN0cmxlbihhY2xfYnVmKSA9PSAwKSkKKyAgICAgICAgcmV0dXJuKChjaGFyICopIE5VTEwp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKGFjbF9idWYpOworfQorDAorLyoKKyAqIGtkY19h
Y2xfcGFyc2VfbGluZSgpIC0gUGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuIEFDTCBsaW5lLgorICov
CitzdGF0aWMga2FlbnRfdCAqCitrZGNfYWNsX3BhcnNlX2xpbmUobHApCisgICAgIGNvbnN0IGNo
YXIgKmxwOworeworICAgIGthZW50X3QgKiBhY2xlOworICAgIGludCBubWF0Y2g7CisKKyAgICBz
dGF0aWMgY2hhciBtb2RlW0JVRlNJWl07CisgICAgc3RhdGljIGNoYXIgdHByaW5jW0JVRlNJWl07
CisgICAgc3RhdGljIGNoYXIgY2FkZHJbQlVGU0laXTsKKyAgICBzdGF0aWMgY2hhciBjcHJpbmNb
QlVGU0laXTsKKworICAgIERQUklOVChERUJVR19DQUxMUywgYWNsX2RlYnVnX2xldmVsLAorICAg
ICAgICAgICAoIioga2RjX2FjbF9wYXJzZV9saW5lKGxpbmU9JTIwcylcbiIsIGxwKSk7CisKKyAg
ICAvKgorICAgICAqIEZvcm1hdCBpcyA6CisgICAgICogZW50cnkgOjo9IFs8d2hpdGVzcGFjZT5d
IChBU19SRVF8VEdTX1JFUSk6IDx3aGl0ZXNwYWNlPiBhbGxvd3xkZW55IAorICAgICAqICAgICAg
ICAgICA8d2hpdGVzcGFjZT4gdGFyZ2V0X3ByaW5jX3JlZ2V4cCA8d2hpdGVzcGFjZT4KKyAgICAg
KiAgICAgICAgICAgZnJvbSA8d2hpdGVzcGFjZT4gYWRkcl9yZWdleHAKKyAgICAgKiAgICAgICAg
ICAgWzx3aGl0ZXNwYWNlPiBmb3IgPHdoaXRlc3BhY2U+IGNsaWVudF9wcmluY19yZWdleHBdIAor
ICAgICAqICAgICAgICAgICAKKyAgICAgKi8KKyAgICBhY2xlID0gKGthZW50X3QqKSBOVUxMOwor
CisgICAgbm1hdGNoID0gc3NjYW5mKGxwLCJBU19SRVE6ICVzICVzIGZyb20gJXMiLG1vZGUsCisg
ICAgICAgICAgICAgICAgICAgIHRwcmluYyxjYWRkcik7CisgICAgaWYgKCBubWF0Y2ggPT0gMyAp
ICB7CisgICAgICAgIGFjbGUgPSAoa2FlbnRfdCAqKSBtYWxsb2Moc2l6ZW9mKGthZW50X3QpKTsK
KyAgICAgICAgaWYgKGFjbGUpIHsKKyAgICAgICAgICAgIGlmIChrZGNfYWNsX2VudHJ5X2luaXQo
YWNsZSxLQUVOVF9SRVFfVFlQRV9BUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kZSx0cHJpbmMsY2FkZHIsTlVMTCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUo
YWNsZSk7CisgICAgICAgICAgICAgICAgYWNsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ290
byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBu
bWF0Y2ggPSBzc2NhbmYobHAsIlRHU19SRVE6ICVzICVzIGZyb20gJXMgZm9yICVzIixtb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdHByaW5jLGNhZGRyLGNwcmluYyk7CisgICAgICAgIGlm
ICggbm1hdGNoID09IDQgKSB7CisgICAgICAgICAgICBhY2xlID0gKGthZW50X3QgKikgbWFsbG9j
KHNpemVvZihrYWVudF90KSk7CisgICAgICAgICAgICBpZiAoYWNsZSkgeworICAgICAgICAgICAg
ICAgIGlmIChrZGNfYWNsX2VudHJ5X2luaXQoYWNsZSxLQUVOVF9SRVFfVFlQRV9UR1MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLHRwcmluYyxjYWRkcixjcHJp
bmMpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShhY2xlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWNsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworIG91dDoK
KyAgICBEUFJJTlQoREVCVUdfQ0FMTFMsIGFjbF9kZWJ1Z19sZXZlbCwKKyAgICAgICAgICAgKCJY
IGtkY19hY2xfcGFyc2VfbGluZSgpID0gJXhcbiIsIChsb25nKSBhY2xlKSk7CisgICAgcmV0dXJu
IChhY2xlKTsKK30KKwwKKy8qCisgKiBrZGNfYWNsX2xvYWRfYWNsX2ZpbGUoKSAtIE9wZW4gYW5k
IHBhcnNlIHRoZSBBQ0wgZmlsZS4KKyAqLworc3RhdGljIGludAora2RjX2FjbF9sb2FkX2FjbF9m
aWxlKCkKK3sKKyAgICBGSUxFICAgICAgICAqYWZwOworICAgIGNoYXIgICAgICAgICphbGluZXA7
CisgICAga2FlbnRfdCAgICAgKiphZW50cHA7CisgICAgaW50ICAgICAgICAgYWxpbmVubzsKKyAg
ICBpbnQgICAgICAgICByZXR2YWwgPSAxOworCisgICAgRFBSSU5UKERFQlVHX0NBTExTLCBhY2xf
ZGVidWdfbGV2ZWwsICgiKiBrZGNfYWNsX2xvYWRfYWNsX2ZpbGUoKVxuIikpOworCisgICAgLyog
T3BlbiB0aGUgQUNMIGZpbGUgZm9yIHJlYWQgKi8KKyAgICBhZnAgPSBmb3BlbihhY2xfYWNsX2Zp
bGUsICJyIik7CisgICAgaWYgKGFmcCkgeworICAgICAgICBzZXRfY2xvZXhlY19maWxlKGFmcCk7
CisgICAgICAgIGFsaW5lbm8gPSAxOworICAgICAgICBhZW50cHAgPSAmYWNsX2xpc3RfaGVhZDsK
KworICAgICAgICAvKiBHZXQgYSBub24tY29tbWVudCBsaW5lICovCisgICAgICAgIHdoaWxlICgo
YWxpbmVwID0ga2RjX2FjbF9nZXRfbGluZShhZnAsICZhbGluZW5vKSkpIHsKKyAgICAgICAgICAg
IC8qIFBhcnNlIGl0ICovCisgICAgICAgICAgICAqYWVudHBwID0ga2RjX2FjbF9wYXJzZV9saW5l
KGFsaW5lcCk7CisgICAgICAgICAgICAvKiBJZiBzeW50YXggZXJyb3IsIHRoZW4gZmFsbCBvdXQg
Ki8KKyAgICAgICAgICAgIGlmICghKmFlbnRwcCkgeworICAgICAgICAgICAgICAgIGtyYjVfa2xv
Z19zeXNsb2coTE9HX0VSUiwgYWNsX3N5bl9lcnJfbXNnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWNsX2FjbF9maWxlLCBhbGluZW5vLCBhbGluZXApOworICAgICAgICAgICAg
ICAgIHJldHZhbCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBhY2xfbGlzdF90YWlsID0gKmFlbnRwcDsKKyAgICAgICAgICAgIGFlbnRwcCA9
ICYoKmFlbnRwcCktPmFlX25leHQ7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGFmcCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAga3JiNV9rbG9nX3N5c2xvZyhMT0dfRVJSLCBhY2xfY2FudG9w
ZW5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoZXJybm8pLCBh
Y2xfYWNsX2ZpbGUpOworICAgICAgICByZXR2YWwgPSAwOworICAgIH0KKworICAgIGlmICghcmV0
dmFsKSB7CisgICAgICAgIGtkY19hY2xfZnJlZV9lbnRyaWVzKCk7CisgICAgfQorCisgICAgRFBS
SU5UKERFQlVHX0NBTExTLCBhY2xfZGVidWdfbGV2ZWwsCisgICAgICAgICAgICgiWCBrZGNfYWNs
X2xvYWRfYWNsX2ZpbGUoKSA9ICVkXG4iLCByZXR2YWwpKTsKKyAgICByZXR1cm4ocmV0dmFsKTsK
K30KKwwKKy8qCisgKiBrZGNfYWNsX2luaXQoKSAgLSBJbml0aWFsaXplIEFDTCBjb250ZXh0Lgor
ICovCitrcmI1X2Vycm9yX2NvZGUKK2tkY19hY2xfaW5pdChrY29udGV4dCwgZGVidWdfbGV2ZWws
IGFjbF9maWxlKQorICAgICBrcmI1X2NvbnRleHQgICAgICAgIGtjb250ZXh0OworICAgICBpbnQg
ICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsOworICAgICBjaGFyICAgICAgICAgICAgICAgICph
Y2xfZmlsZTsKK3sKKyAgICBrcmI1X2Vycm9yX2NvZGUgICAgIGtyZXQ7CisgICAgRFBSSU5UKERF
QlVHX0NBTExTLCBhY2xfZGVidWdfbGV2ZWwsKCIqIGtkY19hY2xfaW5pdChhZmlsZT0lcylcbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYWNsX2ZpbGUpID8g
YWNsX2ZpbGUgOiAiKG51bGwpIikpKTsKKyAgICBrcmV0ID0gMDsKKyAgICBhY2xfZGVidWdfbGV2
ZWwgPSBkZWJ1Z19sZXZlbDsKKworICAgIGlmIChhY2xfYWNsX2ZpbGUgPT0gTlVMTCkKKyAgICAg
ICAgcHJvZmlsZV9nZXRfc3RyaW5nKGtjb250ZXh0LT5wcm9maWxlLEtSQjVfQ09ORl9LRENERUZB
VUxUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZGNfYWNsIiwgTlVMTCxOVUxMLCAm
YWNsX2FjbF9maWxlKTsKKyAgICBlbHNlCisgICAgICAgIGFjbF9hY2xfZmlsZSA9IHN0cmR1cChh
Y2xfZmlsZSk7CisgICAgaWYgKCBhY2xfYWNsX2ZpbGUgKSB7CisgICAgICAgIGtyYjVfa2xvZ19z
eXNsb2coTE9HX0lORk8sICJrZGNfYWNsOiBpbml0aWFsaXppbmcgdXNpbmcgJXMiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGFjbF9hY2xfZmlsZSk7CisgICAgICAgIGFjbF9pbml0ZWQgPSBr
ZGNfYWNsX2xvYWRfYWNsX2ZpbGUoKTsKKyAgICAgICAgaWYgKCAhYWNsX2luaXRlZCApIHsKKyAg
ICAgICAgICAgIGtyYjVfa2xvZ19zeXNsb2coTE9HX0VSUiwgImtkY19hY2w6IGluaXRpYWxpemF0
aW9uIGZhaWxlZCIpOworICAgICAgICAgICAga3JldCA9IEtSQjVfQ09ORklHX0JBREZPUk1BVDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIERQUklOVChERUJVR19DQUxMUywgYWNsX2RlYnVnX2xl
dmVsLCgiWCBrZGNfYWNsX2luaXQoKSA9ICVkXG4iLCBrcmV0KSk7CisgICAgcmV0dXJuKGtyZXQp
OworfQorDAorLyoKKyAqIGtkY19hY2xfZmluaXNoICAtIFRlcm1pbmF0ZSBBQ0wgY29udGV4dC4K
KyAqLwordm9pZAora2RjX2FjbF9maW5pc2goa2NvbnRleHQsIGRlYnVnX2xldmVsKQorICAgICBr
cmI1X2NvbnRleHQgICAgICAgIGtjb250ZXh0OworICAgICBpbnQgICAgICAgICAgICAgICAgIGRl
YnVnX2xldmVsOworeworICAgIERQUklOVChERUJVR19DQUxMUywgYWNsX2RlYnVnX2xldmVsLCAo
Iioga2RjX2FjbF9maW5pc2goKVxuIikpOworCisgICAga2RjX2FjbF9mcmVlX2VudHJpZXMoKTsK
KyAgICBmcmVlKGFjbF9hY2xfZmlsZSk7CisgICAgICAgIAorICAgIERQUklOVChERUJVR19DQUxM
UywgYWNsX2RlYnVnX2xldmVsLCAoIlgga2RjX2FjbF9maW5pc2goKVxuIikpOworfQorDAorLyoK
KyAqIGtkY19hY2xfY2hlY2tfcmVxKCkgLSBJcyB0aGlzIEtEQyBSRVEgcGVybWl0dGVkID8KKyAq
Lwora3JiNV9ib29sZWFuCitrZGNfYWNsX2NoZWNrX3JlcShrY29udGV4dCwgcmVxX3R5cGUsIHRw
cmluYywgZnJvbSwgY3ByaW5jKQorICAgICBrcmI1X2NvbnRleHQgICAgICAgIGtjb250ZXh0Owor
ICAgICBpbnQgICAgICAgICAgICAgICAgIHJlcV90eXBlOworICAgICBjb25zdCBjaGFyKiAgICAg
ICAgIHRwcmluYzsKKyAgICAgY29uc3Qga3JiNV9mdWxsYWRkciAqZnJvbTsKKyAgICAgY29uc3Qg
Y2hhciogICAgICAgICBjcHJpbmM7Cit7CisgICAga3JiNV9ib29sZWFuICAgICAgICByZXR2YWw7
CisgICAgY29uc3QgY2hhciAgICAgICAgICAqZnJvbXN0cmluZzsKKyAgICBjaGFyICAgICAgICAg
ICAgICAgIGZyb21zdHJpbmdidWZbNzBdOworICAgIGthZW50X3QgICAgICAgICAgICAgKmVudHJ5
OworCisgICAgRFBSSU5UKERFQlVHX0NBTExTLCBhY2xfZGVidWdfbGV2ZWwsICgiKiBrZGNfYWNs
X2NoZWNrX3JlcSgpXG4iKSk7CisKKyAgICByZXR2YWwgPSAxOworCisgICAgZnJvbXN0cmluZyA9
IGluZXRfbnRvcChBRERSVFlQRTJGQU1JTFkgKGZyb20tPmFkZHJlc3MtPmFkZHJ0eXBlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20tPmFkZHJlc3MtPmNvbnRlbnRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJvbXN0cmluZ2J1Ziwgc2l6ZW9mKGZyb21zdHJpbmdidWYp
KTsKKyAgICBpZiAoIWZyb21zdHJpbmcpCisgICAgICAgIGZyb21zdHJpbmcgPSAiPHVua25vd24+
IjsKKworICAgIC8qIFdhbGsgdGhyb3VnaCB0aGUgQUNMIGVudHJpZXMgKi8KKyAgICBmb3IgKGVu
dHJ5PWFjbF9saXN0X2hlYWQ7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5hZV9uZXh0KSB7CisgICAg
ICAgIGlmICgga2RjX2FjbF9lbnRyeV9tYXRjaChlbnRyeSxyZXFfdHlwZSx0cHJpbmMsZnJvbXN0
cmluZyxjcHJpbmMpICkgeworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBrZGNfYWNsX3ByaW50
X2VudHJ5KGVudHJ5LExPR19ERUJVRyk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICggISBlbnRy
eS0+YWxsb3cgKQorICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIERQUklOVChERUJVR19DQUxMUywgYWNsX2RlYnVn
X2xldmVsLCAoIlgga2RjX2FjbF9jaGVja19yZXEoKVxuIikpOworICAgIHJldHVybiAocmV0dmFs
KTsKK30KKwwKKy8qCisgKiBrZGNfYWNsX2NoZWNrX2FzX3JlcSgpIC0gSXMgdGhpcyBLREMgQVNf
UkVRIHBlcm1pdHRlZCA/CisgKi8KK2tyYjVfYm9vbGVhbgora2RjX2FjbF9jaGVja19hc19yZXEo
a2NvbnRleHQsIHRwcmluYywgZnJvbSkKKyAgICAga3JiNV9jb250ZXh0ICAgICAgICBrY29udGV4
dDsKKyAgICAgY29uc3QgY2hhciogICAgICAgICB0cHJpbmM7CisgICAgIGNvbnN0IGtyYjVfZnVs
bGFkZHIgKmZyb207Cit7CisgICAgcmV0dXJuIGtkY19hY2xfY2hlY2tfcmVxKGtjb250ZXh0LEtB
RU5UX1JFUV9UWVBFX0FTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cHJpbmMsZnJv
bSxOVUxMKTsKK30KKwwKKy8qCisgKiBrZGNfYWNsX2NoZWNrX3Rnc19yZXEoKSAtIElzIHRoaXMg
S0RDIFRHU19SRVEgcGVybWl0dGVkID8KKyAqLwora3JiNV9ib29sZWFuCitrZGNfYWNsX2NoZWNr
X3Rnc19yZXEoa2NvbnRleHQsIHRwcmluYywgZnJvbSwgY3ByaW5jKQorICAgICBrcmI1X2NvbnRl
eHQgICAgICAgIGtjb250ZXh0OworICAgICBjb25zdCBjaGFyKiAgICAgICAgIHRwcmluYzsKKyAg
ICAgY29uc3Qga3JiNV9mdWxsYWRkciAqZnJvbTsKKyAgICAgY29uc3QgY2hhciogICAgICAgICBj
cHJpbmM7Cit7CisgICAgcmV0dXJuIGtkY19hY2xfY2hlY2tfcmVxKGtjb250ZXh0LEtBRU5UX1JF
UV9UWVBFX1RHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHByaW5jLGZyb20sY3By
aW5jKTsKK30KZGlmZiAtTmF1ciBrcmI1LTEuOS4xLm9yaS9zcmMva2RjL2tkY19hY2wuaCBrcmI1
LTEuOS4xL3NyYy9rZGMva2RjX2FjbC5oCi0tLSBrcmI1LTEuOS4xLm9yaS9zcmMva2RjL2tkY19h
Y2wuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysga3JiNS0xLjkuMS9z
cmMva2RjL2tkY19hY2wuaAkyMDExLTExLTMwIDExOjMzOjM4Ljg1NzE4NzMwOCArMDEwMApAQCAt
MCwwICsxLDM3IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10
YWJzLW1vZGU6IG5pbCAtKi0gKi8KKy8qCisgKiBzcmMva2RjL2tkY19hY2wuaAorICoKKyAqLwor
CisjaWZuZGVmIEtEQ19BQ0xfSF9fCisjZGVmaW5lIEtEQ19BQ0xfSF9fCisKKy8qCisgKiBEZWJ1
ZyBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBERUJVR19DQUxMUyAgICAgMTI4CisjaWZkZWYg
IERFQlVHCisjZGVmaW5lIERQUklOVChsMSwgY2wsIGFsKSAgICAgIGlmICgoY2wgJiBsMSkgIT0g
MCkgeHByaW50ZiBhbAorI2Vsc2UgICAvKiBERUJVRyAqLworI2RlZmluZSBEUFJJTlQobDEsIGNs
LCBhbCkKKyNlbmRpZiAgLyogREVCVUcgKi8KKworI2RlZmluZSBLQUVOVF9SRVFfVFlQRV9BUyAg
MQorI2RlZmluZSBLQUVOVF9SRVFfVFlQRV9UR1MgMgorCitrcmI1X2Vycm9yX2NvZGUga2RjX2Fj
bF9pbml0KGtyYjVfY29udGV4dCwgaW50LCBjaGFyICopOwordm9pZCBrZGNfYWNsX2ZpbmlzaChr
cmI1X2NvbnRleHQsIGludCk7CitrcmI1X2Jvb2xlYW4ga2RjX2FjbF9jaGVja19yZXEoa3JiNV9j
b250ZXh0LCBpbnQsIAorCQkgIGNvbnN0IGNoYXIqLAorCQkgIGNvbnN0IGtyYjVfZnVsbGFkZHIg
KmZyb20sCisJCSAgY29uc3QgY2hhciopOwora3JiNV9ib29sZWFuIGtkY19hY2xfY2hlY2tfYXNf
cmVxKGtyYjVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrcmI1X2Z1
bGxhZGRyICpmcm9tKTsKK2tyYjVfYm9vbGVhbiBrZGNfYWNsX2NoZWNrX3Rnc19yZXEoa3JiNV9j
b250ZXh0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcios
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtyYjVfZnVsbGFkZHIg
KmZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsK
KworI2VuZGlmICAvKiBLRENfQUNMX0hfXyAqLwpkaWZmIC1OYXVyIGtyYjUtMS45LjEub3JpL3Ny
Yy9rZGMvbWFpbi5jIGtyYjUtMS45LjEvc3JjL2tkYy9tYWluLmMKLS0tIGtyYjUtMS45LjEub3Jp
L3NyYy9rZGMvbWFpbi5jCTIwMTAtMTItMDEgMjI6Mzc6MjUuMDAwMDAwMDAwICswMTAwCisrKyBr
cmI1LTEuOS4xL3NyYy9rZGMvbWFpbi5jCTIwMTEtMTEtMzAgMTE6MzE6MDkuMTA2MDU5NDU3ICsw
MTAwCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiYWRtLmgiCiAjaW5jbHVkZSAiYWRtX3By
b3RvLmgiCiAjaW5jbHVkZSAia2RjX3V0aWwuaCIKKyNpbmNsdWRlICJrZGNfYWNsLmgiCiAjaW5j
bHVkZSAiZXh0ZXJuLmgiCiAjaW5jbHVkZSAia2RjNV9lcnIuaCIKICNpbmNsdWRlICJrZGJfa3Qu
aCIKQEAgLTk5Niw2ICs5OTcsMTYgQEAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCisgICAg
LyoKKyAgICAgKiBIYW5kbGUgS0RDIEFDTCBmaWxlIGluaXRpYWxpemF0aW9uIAorICAgICAqLwor
ICAgIHJldHZhbCA9IGtkY19hY2xfaW5pdChrY29udGV4dCwwLE5VTEwpOworICAgIGlmIChyZXR2
YWwpIHsKKyAgICAgICAga2RjX2VycihrY29udGV4dCwgcmV0dmFsLCAid2hpbGUgaW5pdGlhbGl6
aW5nIGtkYyBhY2wiKTsKKyAgICAgICAgZmluaXNoX3JlYWxtcygpOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisKICAgICAvKiBIYW5kbGUgZWFjaCByZWFsbSdzIHBvcnRzICovCiAgICAgZm9y
IChpPTA7IGk8a2RjX251bXJlYWxtczsgaSsrKSB7CiAgICAgICAgIGNoYXIgKmNwID0ga2RjX3Jl
YWxtbGlzdFtpXS0+cmVhbG1fcG9ydHM7CkBAIC0xMDc0LDYgKzEwODUsNyBAQAogICAgIGtyYjVf
a2xvZ19zeXNsb2coTE9HX0lORk8sICJzaHV0dGluZyBkb3duIik7CiAgICAgdW5sb2FkX3ByZWF1
dGhfcGx1Z2lucyhrY29udGV4dCk7CiAgICAgdW5sb2FkX2F1dGhkYXRhX3BsdWdpbnMoa2NvbnRl
eHQpOworICAgIGtkY19hY2xfZmluaXNoKGtjb250ZXh0LDApOwogICAgIGtyYjVfa2xvZ19jbG9z
ZShrZGNfY29udGV4dCk7CiAgICAgZmluaXNoX3JlYWxtcygpOwogICAgIGlmIChrZGNfcmVhbG1s
aXN0KQpkaWZmIC1OYXVyIGtyYjUtMS45LjEub3JpL3NyYy9rZGMvTWFrZWZpbGUuaW4ga3JiNS0x
LjkuMS9zcmMva2RjL01ha2VmaWxlLmluCi0tLSBrcmI1LTEuOS4xLm9yaS9zcmMva2RjL01ha2Vm
aWxlLmluCTIwMTAtMTEtMDEgMjA6NDk6MjkuMDAwMDAwMDAwICswMTAwCisrKyBrcmI1LTEuOS4x
L3NyYy9rZGMvTWFrZWZpbGUuaW4JMjAxMS0xMS0zMCAxMTozMTowOS4xMDYwNTk0NTcgKzAxMDAK
QEAgLTE4LDYgKzE4LDcgQEAKIAkkKHNyY2RpcikvZG9fYXNfcmVxLmMgXAogCSQoc3JjZGlyKS9k
b190Z3NfcmVxLmMgXAogCSQoc3JjZGlyKS9mYXN0X3V0aWwuYyBcCisJJChzcmNkaXIpL2tkY19h
Y2wuYyBcCiAJJChzcmNkaXIpL2tkY191dGlsLmMgXAogCSQoc3JjZGlyKS9rZGNfcHJlYXV0aC5j
IFwKIAkkKHNyY2RpcikvbWFpbi5jIFwKQEAgLTMyLDYgKzMzLDcgQEAKIAlkb19hc19yZXEubyBc
CiAJZG9fdGdzX3JlcS5vIFwKIAlmYXN0X3V0aWwubyBcCisJa2RjX2FjbC5vIFwKIAlrZGNfdXRp
bC5vIFwKIAlrZGNfcHJlYXV0aC5vIFwKIAltYWluLm8gXAo=
--20cf307ac009e1ee2f04b2fbb50e
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
krbdev mailing list krbdev@mit.edu
https://mailman.mit.edu/mailman/listinfo/krbdev
--20cf307ac009e1ee2f04b2fbb50e--