<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>19199</bug_id>
          
          <creation_ts>2009-03-16 16:53:34 +0300</creation_ts>
          <short_desc>Добавить upcall + pam_smbpass + ...</short_desc>
          <delta_ts>2009-04-03 16:31:11 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Distributions</classification>
          <product>Branch 5.0</product>
          <component>samba</component>
          <version>unspecified</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andriy Stepanov (stanv)">stanv</reporter>
          <assigned_to name="Alexander Bokovoy">ab</assigned_to>
          <cc>sbolshakov</cc>
          
          <qa_contact name="qa-5.0@altlinux.org">qa-5.0</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>87377</commentid>
    <comment_count>0</comment_count>
      <attachid>3373</attachid>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-16 16:53:34 +0300</bug_when>
    <thetext>Created attachment 3373
бэкпорт cifs.upcall

1.
В версии 3.0 нету хелпера для ядра,
для монтирования CIFS посредством kerberos уантификации.
Патч взят с 3.2 (бэкпорт cifs.upcall).

2.
Очень нужен pam модуль pam_smbpass.so (--with-pam_smbpass)

3.
Желательно подумать как добавлять в /etc/request-key.conf
строчки типа:
create  cifs.spnego *           *               /usr/sbin/cifs.upcall %k
create  dns_resolver *          *               /usr/sbin/cifs.upcall %k

4. AB@: если можешь дерни kukks@samba.org или кого-то еще.
Вот кратко суть проблемы:

About UID/GID + cifs.mount + sec=krb5

The problem is that:

[stanv@stanv vid3]$ cifsmount //umka.malta.altlinux.ru/srv share2 --verbose -osec=krb5
parsing options: sec=krb5

mount.cifs kernel mount options
unc=//umka.malta.altlinux.ru\srv,ip=10.2.1.16,user=stanv,pass=,ver=1,sec=krb5,uid=500,gid=500

[stanv@stanv vid3]$ l share2
итого 1028
drwxr-xr-x 2 stanv stanv    0 Мар 12 15:51 for_mumu/
drwxr-xr-x 4 stanv stanv    0 Мар 12 15:46 ./
drwxr-xr-x 4 stanv stanv 4096 Мар 12 15:42 ../
drwxr-xr-x 2 stanv stanv    0 Мар 11 15:49 for_stanv/
-rw-r--r-- 1 stanv stanv    4 Мар  5 20:28 123

uid=500,gid=500  are passed down to kernel

all files owned by me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87378</commentid>
    <comment_count>1</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-16 16:57:07 +0300</bug_when>
    <thetext>Пункты 1-4 нужны для ветки 5.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87380</commentid>
    <comment_count>2</comment_count>
      <attachid>3374</attachid>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-16 17:02:36 +0300</bug_when>
    <thetext>Created attachment 3374
ip-to-hostname

Патч взят отсюда: http://patchwork.kernel.org/patch/4594/
Не уверен что он нам нужен.
У меня и без него работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87381</commentid>
    <comment_count>3</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-16 17:30:32 +0300</bug_when>
    <thetext>Пункт 4.0 более детально.

В smb.conf есть опция:

Default: unix extensions = yes

# testparm -v -s 2&gt;/dev/null | grep -i &apos;unix extensions&apos;
        unix extensions = Yes

Т.е. на Samba-сервер включили unix extensions.

Парочка цитат из MOUNT.CIFS(8) о параметре: uid=arg

sets the uid that will own all files on the mounted filesystem
For mounts to servers which do support the CIFS Unix extensions

If the server and client are in the same domain (e.g. running winbind or nss_ldap) and the server supports the Unix Extensions then the uid and gid can be retrieved from the server (and uid and gid would not have to be specifed on the mount.

For servers which do not support the CIFS Unix extensions, the default uid (and gid) returned on lookup of existing files will be the uid (gid) of the person who executed the mount (root, except when mount.cifs is configured setuid for user mounts) unless the &quot;uid=&quot; (gid) mount option is specified. 


Т.е. если мы не указываем явно опцию UID: то при монтировании CIFS ресурса мы будем видеть настоящие UID (как на стороное сервера).

Убедимся в этом:

$ cifsmount //umka.malta.altlinux.ru/srv share2 --verbose
Password: 

mount.cifs kernel mount options unc=//umka.malta.altlinux.ru\srv,ip=10.2.1.16,user=stanv,pass=q1,ver=1

$ find share2 -printf &apos;%u(%U) %g(%G) %p\n&apos;
root(0) root(0) share2
mumu(501) camera(501) share2/for_mumu
mumu(501) camera(501) share2/for_mumu/dfadfsdf
mumu(501) camera(501) share2/for_mumu/rrr
stanv(500) stanv(500) share2/for_stanv
stanv(500) stanv(500) share2/for_stanv/sdfsdf
stanv(500) stanv(500) share2/for_stanv/bbbbb
root(0) root(0) share2/123

т.е. в смонтированом ресурсе мы видим ID владельцев, каковы они являются на сервере.

Теперь смонтируем через Kereberos:
$ kinit 
Password for stanv@MALTA.ALTLINUX.RU: 
[stanv@stanv vid3]$ cifsmount //umka.malta.altlinux.ru/srv share2 --verbose -osec=krb5,guest
parsing options: sec=krb5,guest

mount.cifs kernel mount options unc=//umka.malta.altlinux.ru\srv,ip=10.2.1.16,user=stanv,ver=1,sec=krb5,guest,uid=500,gid=500 

$ find share2 -printf &apos;%u(%U) %g(%G) %p\n&apos;
stanv(500) stanv(500) share2
stanv(500) stanv(500) share2/for_mumu
stanv(500) stanv(500) share2/for_mumu/dfadfsdf
stanv(500) stanv(500) share2/for_mumu/rrr
stanv(500) stanv(500) share2/for_stanv
stanv(500) stanv(500) share2/for_stanv/sdfsdf
stanv(500) stanv(500) share2/for_stanv/bbbbb
stanv(500) stanv(500) share2/123

Как видим везде владелец - я. Но записать я не могу в папку share2/for_mumu

Это все от того что ядру передается параметр: guest,uid=500,gid=500 
о котором говорилось выше.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87413</commentid>
    <comment_count>4</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-17 10:09:58 +0300</bug_when>
    <thetext>Еще один интересный факт (отношения к Kerberos не имеет).

Если задать свое же имя ($USER) user=arg (specifies the username to connect as), также происходит нарушение прав.

Без задания user (права как на сервере):

[stanv@stanv vid3]$ cifsmount //umka.malta.altlinux.ru/srv share2 --verbose
Password: 

mount.cifs kernel mount options 
unc=//umka.malta.altlinux.ru\srv,ip=10.2.1.16,user=stanv,pass=q1,ver=1 
[stanv@stanv vid3]$ find share2 -printf &apos;%u(%U) %g(%G) %p\n&apos;
root(0) root(0) share2
mumu(501) camera(501) share2/for_mumu
mumu(501) camera(501) share2/for_mumu/dfadfsdf
mumu(501) camera(501) share2/for_mumu/rrr
stanv(500) stanv(500) share2/for_stanv
stanv(500) stanv(500) share2/for_stanv/sdfsdf
stanv(500) stanv(500) share2/for_stanv/bbbbb
root(0) root(0) share2/123

[stanv@stanv vid3]$ cifsumount share2

С заданием своего же имени:

[stanv@stanv vid3]$ cifsmount //umka.malta.altlinux.ru/srv share2 --verbose -ousername=stanv
parsing options: username=stanv
Password: 

mount.cifs kernel mount options unc=//umka.malta.altlinux.ru\srv,ip=10.2.1.16,pass=q1,ver=1,username=stanv,uid=500,gid=500 
[stanv@stanv vid3]$ find share2 -printf &apos;%u(%U) %g(%G) %p\n&apos;
stanv(500) stanv(500) share2
stanv(500) stanv(500) share2/for_mumu
stanv(500) stanv(500) share2/for_mumu/dfadfsdf
stanv(500) stanv(500) share2/for_mumu/rrr
stanv(500) stanv(500) share2/for_stanv
stanv(500) stanv(500) share2/for_stanv/sdfsdf
stanv(500) stanv(500) share2/for_stanv/bbbbb
stanv(500) stanv(500) share2/123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87423</commentid>
    <comment_count>5</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-03-17 16:41:48 +0300</bug_when>
    <thetext>К пунку 4.
https://bugzilla.samba.org/show_bug.cgi?id=6194

К Пункту 1.
https://bugs.launchpad.net/ubuntu/+source/samba/+bug/236830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88285</commentid>
    <comment_count>6</comment_count>
    <who name="Alexander Bokovoy">ab</who>
    <bug_when>2009-03-30 02:27:42 +0400</bug_when>
    <thetext>В 3.0.33-alt2 сделал поддержку cifs.upcall, немного не так, как в предлагаемом патче от Debian, потому что в Debian сделали больше вмешательств, чем требовалось.

Пункт 2 исправлять не буду. Пункт 2 представляет собой неверное решение общей проблемы -- используйте winbindd/pam_winbind, как это рекомендовано в документации уже несколько лет. pam_smbpass более не поддерживается.

Пункт 4 исправлять в рамках 3.0 не имеет смысла. Вернемся к нему в 3.3-3.4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88628</commentid>
    <comment_count>7</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2009-04-03 16:31:11 +0400</bug_when>
    <thetext>Irssi: Join to #samba-technical was synced in 1 secs

15:47 &lt; stanv&gt; hello
15:48 &lt; stanv&gt; how about: https://bugzilla.samba.org/show_bug.cgi?id=6194
15:48 &lt; stanv&gt; ??
15:51 &lt; vl&gt; stanv: You should talk to Jeff Layton
15:51 &lt; stanv&gt; jlayton: 
15:51 &lt; stanv&gt; :))
15:52 -!- mdambrosio [n=mdambros@190.1.56.145] has joined #samba-technical
16:13  * jlayton looks
16:15 &lt; jlayton&gt; stanv: this is primarily because CIFS has a bazillion mount options, but no one has given much thought about how they all work together
16:15  * jlayton stops bitching now
16:16 &lt; jlayton&gt; at one point, the uid/gid options didn&apos;t override the ownership of files when unix extensions were enabled
16:16 &lt; jlayton&gt; but unix extensions are pretty broken anyway since they assume that uid/gid are the same on client and server
16:17 &lt; jlayton&gt; not necessarily the case, of course
16:19 &lt; kblin&gt; jlayton: I agree. the whole concept of non-unique ids is broken
16:20 &lt; kblin&gt; I actually like SIDs
16:20 &lt; jlayton&gt; wanon and I discussed this a bit at connectathon
16:20 &lt; jlayton&gt; SID&apos;s don&apos;t exactly match either if the client and server are in different domains too, correct?
16:21 &lt; jlayton&gt; s/exactly/necessarily/
16:21 &lt;@idra&gt; jlayton, they don&apos;t match at all, it&apos;s exactly the point of SIDs :)
16:21 &lt; jlayton&gt; ahh
16:21 &lt;@idra&gt; jlayton, but usually client and server are in the same domain and users should be &quot;domain&quot; users
16:22 &lt;@idra&gt; if you are a domain user you have a SID assigned by the domain controller that is the same on every machine
16:22 &lt; stanv&gt; so, is it possible to find how to correct 6194 ?
16:23 &lt; kblin&gt; idra: technically that&apos;s the same as local accounts on the DC, iirc :)
16:24 &lt; kblin&gt; jlayton: I&apos;d very much welcome unique id support in the kernel, but I somehow doubt that&apos;s going to happen
16:24 &lt;@idra&gt; kblin, does it matter? :)
16:25 &lt; kblin&gt; idra: not really, apart form making life easier when implementing local accounts :)
16:25 &lt;@idra&gt; we would just need 128bit IDs
16:25 &lt; jlayton&gt; stanv: not trivially
16:25 &lt;@idra&gt; and possibly finally disacrd the difference between uids and gids
16:26 &lt;@idra&gt; jlayton, stanv the problem is this
16:26 &lt;@idra&gt; you could think that it is trivial to do a 1-1 substitution of your requested uid and gid with the server&apos;s user uid and gid
16:26 &lt;@idra&gt; it would be a 2 elements table conversion right ?
16:27 &lt;@idra&gt; except that you have also all those other users ids
16:27 &lt; kblin&gt; idra: yeah. whatever.. I&apos;m just afraid that some genious would still give the first user on every system the same ID if they were just 128 bit numbers
16:27 &lt;@idra&gt; assume you want to change ownership, how do you do it? what if another user uid is the same of the requested uid ?
16:28 &lt;@idra&gt; we move quickly to having also to map to something else all other user&apos;s and group&apos;s ids on the server
16:28 &lt;@idra&gt; kblin, of course they would
16:28 &lt;@idra&gt; kblin, I have no hope most people would understand :)
16:29 &lt; kblin&gt; which is why a fixed, more defined structure would be better
16:29 &lt;@idra&gt; kblin, unless at kernel level the 128bit id is built off of a 96bit machine UUID + the regular 32bit uid :)
16:29 &lt; kblin&gt; that&apos;d work, I guess</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3373</attachid>
            <date>2009-03-16 16:53:34 +0300</date>
            <delta_ts>2009-03-16 16:53:34 +0300</delta_ts>
            <desc>бэкпорт cifs.upcall</desc>
            <filename>deb-cifs-upcall-backport-3.2.x.patch</filename>
            <type>text/plain</type>
            <size>22370</size>
            <attacher name="Andriy Stepanov (stanv)">stanv</attacher>
            
              <data encoding="base64">SW5kZXg6IHNhbWJhLTMuMC4yOGEvc291cmNlL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNh
bWJhLTMuMC4yOGEub3JpZy9zb3VyY2UvTWFrZWZpbGUuaW4KKysrIHNhbWJhLTMuMC4yOGEvc291
cmNlL01ha2VmaWxlLmluCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogIyBOb3RlIHRoYXQgYWxsIGV4
ZWN1dGFibGUgcHJvZ3JhbXMgbm93IHByb3ZpZGUgZm9yIGFuIG9wdGlvbmFsIGV4ZWN1dGFibGUg
c3VmZml4LgogCi1TQklOX1BST0dTID0gYmluL3NtYmRARVhFRVhUQCBiaW4vbm1iZEBFWEVFWFRA
IGJpbi9zd2F0QEVYRUVYVEAgQEVYVFJBX1NCSU5fUFJPR1NACitTQklOX1BST0dTID0gYmluL3Nt
YmRARVhFRVhUQCBiaW4vbm1iZEBFWEVFWFRAIGJpbi9zd2F0QEVYRUVYVEAgQEVYVFJBX1NCSU5f
UFJPR1NAIEBDSUZTVVBDQUxMX1BST0dTQAogCiBST09UX1NCSU5fUFJPR1MgPSBAQ0lGU01PVU5U
X1BST0dTQAogCkBAIC02NTMsNiArNjUzLDEyIEBACiAKIENJRlNfVU1PVU5UX09CSiA9IGNsaWVu
dC91bW91bnQuY2lmcy5vCiAKK0NJRlNfVVBDQUxMX09CSiA9IGNsaWVudC9jaWZzLnVwY2FsbC5v
IGxpYnNtYi9jbGlrcmI1Lm8gbGlic21iL2NsaXNwbmVnby5vIFwKKwkJbGlic21iL2FzbjEubyBs
aWJzbWIvbnRlcnIubyBsaWJzbWIvZGNlcnBjX2Vyci5vIFwKKwkJbGlic21iL3NtYmRlcy5vIGxp
YnNtYi9zbWJlbmNyeXB0Lm8gbGlic21iL250bG1zc3BfcGFyc2UubyBcCisJCSQoUEFSQU1fT0JK
KSAkKExJQk5NQl9PQkopICQoS1JCQ0xJRU5UX09CSikgJChTRUNSRVRTX09CSikgXAorCQkkKEVS
Uk9STUFQX09CSikgJChSUENfUEFSU0VfT0JKMSkgJChET1NFUlJfT0JKKSAkKExJQl9EVU1NWV9P
QkopCisKIE5NQkxPT0tVUF9PQkogPSB1dGlscy9ubWJsb29rdXAubyAkKFBBUkFNX09CSikgJChM
SUJOTUJfT0JKKSAkKFJQQ19QQVJTRV9PQkoxKSAkKERPU0VSUl9PQkopIFwKICAgICAgICAgICAg
ICAgICQoTElCX05PTlNNQkRfT0JKKSAkKFBPUFRfTElCX09CSikgJChTRUNSRVRTX09CSikgJChM
SUJTQU1CQV9PQkopCiAKQEAgLTEwMjksNiArMTAzNSwxMiBAQAogCUBlY2hvIExpbmtpbmcgJEAK
IAlAJChDQykgJChGTEFHUykgLW8gJEAgJChDSUZTX1VNT1VOVF9PQkopICQoRFlORVhQKSAkKExE
RkxBR1MpCiAKK2Jpbi9jaWZzLnVwY2FsbEBFWEVFWFRAOiAkKEJJTkFSWV9QUkVSRVFTKSAkKENJ
RlNfVVBDQUxMX09CSikgJChMSUJTTUJDTElFTlRfT0JKMSkgJChMSUJfT0JKKSBAQlVJTERfUE9Q
VEAKKwlAZWNobyBMaW5raW5nICRACisJQCQoQ0MpICQoRkxBR1MpIC1vICRAICQoQ0lGU19VUENB
TExfT0JKKSAkKERZTkVYUCkgJChMREZMQUdTKSBcCisJCS1sa2V5dXRpbHMgJChMSUJTTUJDTElF
TlRfT0JKMSkgJChMSUJfT0JKKSBcCisJCSQoS1JCNUxJQlMpICQoTERBUF9MSUJTKSAkKFBPUFRf
TElCUykgJChMSUJTKSAKKwogYmluL3Rlc3RwYXJtQEVYRUVYVEA6IHByb3RvX2V4aXN0cyAkKFRF
U1RQQVJNX09CSikgQEJVSUxEX1BPUFRAIGJpbi8uZHVtbXkKIAlAZWNobyBMaW5raW5nICRACiAJ
QCQoQ0MpICQoRkxBR1MpIC1vICRAICQoVEVTVFBBUk1fT0JKKSAkKExERkxBR1MpICQoRFlORVhQ
KSAkKExJQlMpICQoTERBUF9MSUJTKSBAUE9QVExJQlNACkBAIC0xNTczLDcgKzE1ODUsNyBAQAog
CUBlY2hvIExpbmtpbmcgJEAKIAlAJChDQykgJChGTEFHUykgLW8gJEAgJChEWU5FWFApIHNjcmlw
dC90ZXN0cy90aW1lbGltaXQubwogCi1pbnN0YWxsOiBpbnN0YWxsc2VydmVycyBpbnN0YWxsYmlu
IEBJTlNUQUxMX0NJRlNNT1VOVEAgaW5zdGFsbG1hbiBpbnN0YWxsc2NyaXB0cyBpbnN0YWxsZGF0
IGluc3RhbGxzd2F0IGluc3RhbGxtb2R1bGVzIEBJTlNUQUxMX0xJQlNNQkNMSUVOVEAgQElOU1RB
TExfTElCTVNSUENAIEBJTlNUQUxMX1BBTV9NT0RVTEVTQCBASU5TVEFMTF9MSUJTTUJTSEFSRU1P
REVTQAoraW5zdGFsbDogaW5zdGFsbHNlcnZlcnMgaW5zdGFsbGJpbiBASU5TVEFMTF9DSUZTTU9V
TlRAIEBJTlNUQUxMX0NJRlNVUENBTExAIGluc3RhbGxtYW4gaW5zdGFsbHNjcmlwdHMgaW5zdGFs
bGRhdCBpbnN0YWxsc3dhdCBpbnN0YWxsbW9kdWxlcyBASU5TVEFMTF9MSUJTTUJDTElFTlRAIEBJ
TlNUQUxMX0xJQk1TUlBDQCBASU5TVEFMTF9QQU1fTU9EVUxFU0AgQElOU1RBTExfTElCU01CU0hB
UkVNT0RFU0AKIAogCiBpbnN0YWxsLWV2ZXJ5dGhpbmc6IGluc3RhbGwgaW5zdGFsbG1vZHVsZXMK
QEAgLTE1OTksNiArMTYxMSwxMCBAQAogCUAkKFNIRUxMKSAkKHNyY2Rpcikvc2NyaXB0L2luc3Rh
bGxkaXJzLnNoICQoSU5TVEFMTFBFUk1TKSAkKERFU1RESVIpICQoUk9PVFNCSU5ESVIpCiAJQCQo
U0hFTEwpIHNjcmlwdC9pbnN0YWxsYmluLnNoICQoSU5TVEFMTFBFUk1TKSAkKERFU1RESVIpICQo
cHJlZml4KSAkKFJPT1RTQklORElSKSBAQ0lGU01PVU5UX1BST0dTQAogCitpbnN0YWxsY2lmc3Vw
Y2FsbDogQENJRlNVUENBTExfUFJPR1NACisJQCQoU0hFTEwpICQoc3JjZGlyKS9zY3JpcHQvaW5z
dGFsbGRpcnMuc2ggJChJTlNUQUxMUEVSTVMpICQoREVTVERJUikgJChTQklORElSKQorCUAkKFNI
RUxMKSBzY3JpcHQvaW5zdGFsbGJpbi5zaCAkKElOU1RBTExQRVJNUykgJChERVNURElSKSAkKHBy
ZWZpeCkgJChTQklORElSKSBAQ0lGU1VQQ0FMTF9QUk9HU0AKKwogIyBTb21lIHN5bWxpbmtzIGFy
ZSByZXF1aXJlZCBmb3IgdGhlICdwcm9iaW5nJyBvZiBtb2R1bGVzLgogIyBUaGlzIG1lY2hhbmlz
bSBzaG91bGQgZ28gYXQgc29tZSBwb2ludC4uCiBpbnN0YWxsbW9kdWxlczogbW9kdWxlcyBpbnN0
YWxsZGlycwpAQCAtMTcxNiw3ICsxNzMyLDcgQEAKIAlAZWNobyAiICBzd2F0ZGlyOiAgICAgJChT
V0FURElSKSIKIAogCi11bmluc3RhbGw6IHVuaW5zdGFsbG1hbiB1bmluc3RhbGxzZXJ2ZXJzIHVu
aW5zdGFsbGJpbiBAVU5JTlNUQUxMX0NJRlNNT1VOVEAgdW5pbnN0YWxsc2NyaXB0cyB1bmluc3Rh
bGxkYXQgdW5pbnN0YWxsc3dhdCB1bmluc3RhbGxtb2R1bGVzIEBVTklOU1RBTExfTElCU01CQ0xJ
RU5UQCBAVU5JTlNUQUxMX0xJQk1TUlBDQCBAVU5JTlNUQUxMX1BBTV9NT0RVTEVTQCBAVU5JTlNU
QUxMX0xJQlNNQlNIQVJFTU9ERVNACit1bmluc3RhbGw6IHVuaW5zdGFsbG1hbiB1bmluc3RhbGxz
ZXJ2ZXJzIHVuaW5zdGFsbGJpbiBAVU5JTlNUQUxMX0NJRlNNT1VOVEAgQFVOSU5TVEFMTF9DSUZT
VVBDQUxMQCB1bmluc3RhbGxzY3JpcHRzIHVuaW5zdGFsbGRhdCB1bmluc3RhbGxzd2F0IHVuaW5z
dGFsbG1vZHVsZXMgQFVOSU5TVEFMTF9MSUJTTUJDTElFTlRAIEBVTklOU1RBTExfTElCTVNSUENA
IEBVTklOU1RBTExfUEFNX01PRFVMRVNAIEBVTklOU1RBTExfTElCU01CU0hBUkVNT0RFU0AKIAog
dW5pbnN0YWxsbWFuOgogCUAkKFNIRUxMKSAkKHNyY2Rpcikvc2NyaXB0L3VuaW5zdGFsbG1hbi5z
aCAkKERFU1RESVIpJChNQU5ESVIpICQoc3JjZGlyKSBDCkBAIC0xNzMwLDYgKzE3NDYsOSBAQAog
dW5pbnN0YWxsY2lmc21vdW50OgogCUAkKFNIRUxMKSBzY3JpcHQvdW5pbnN0YWxsYmluLnNoICQo
SU5TVEFMTFBFUk1TKSAkKERFU1RESVIpICQocHJlZml4KSAkKFJPT1RTQklORElSKSBAQ0lGU01P
VU5UX1BST0dTQAogCit1bmluc3RhbGxjaWZzdXBjYWxsOgorCUAkKFNIRUxMKSBzY3JpcHQvdW5p
bnN0YWxsYmluLnNoICQoSU5TVEFMTFBFUk1TX0JJTikgJChERVNURElSKSAkKHByZWZpeCkgJChT
QklORElSKSBAQ0lGU1VQQ0FMTF9QUk9HU0AKKwogdW5pbnN0YWxsbW9kdWxlczoKIAlAJChTSEVM
TCkgJChzcmNkaXIpL3NjcmlwdC91bmluc3RhbGxtb2R1bGVzLnNoICQoSU5TVEFMTFBFUk1TKSAk
KERFU1RESVIpICQocHJlZml4KSAkKFZGU0xJQkRJUikgJChWRlNfTU9EVUxFUykKIAlAJChTSEVM
TCkgJChzcmNkaXIpL3NjcmlwdC91bmluc3RhbGxtb2R1bGVzLnNoICQoSU5TVEFMTFBFUk1TKSAk
KERFU1RESVIpICQocHJlZml4KSAkKFBEQkxJQkRJUikgJChQREJfTU9EVUxFUykKSW5kZXg6IHNh
bWJhLTMuMC4yOGEvc291cmNlL2NsaWVudC9jaWZzX3NwbmVnby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9k
ZXYvbnVsbAorKysgc2FtYmEtMy4wLjI4YS9zb3VyY2UvY2xpZW50L2NpZnNfc3BuZWdvLmgKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAqICAgZnMvY2lmcy9jaWZzX3NwbmVnby5oIC0tIFNQTkVHTyB1
cGNhbGwgbWFuYWdlbWVudCBmb3IgQ0lGUworICoKKyAqICAgQ29weXJpZ2h0IChjKSAyMDA3IFJl
ZCBIYXQsIEluYy4KKyAqICAgQXV0aG9yKHMpOiBKZWZmIExheXRvbiAoamxheXRvbkByZWRoYXQu
Y29tKQorICogICAgICAgICAgICAgIFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQor
ICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z
ZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQ0lGU19TUE5F
R09fSAorI2RlZmluZSBfQ0lGU19TUE5FR09fSAorCisjZGVmaW5lIENJRlNfU1BORUdPX1VQQ0FM
TF9WRVJTSU9OIDIKKworLyoKKyAqIFRoZSB2ZXJzaW9uIGZpZWxkIHNob3VsZCBhbHdheXMgYmUg
c2V0IHRvIENJRlNfU1BORUdPX1VQQ0FMTF9WRVJTSU9OLgorICogVGhlIGZsYWdzIGZpZWxkIGlz
IGZvciBmdXR1cmUgdXNlLiBUaGUgcmVxdWVzdC1rZXkgY2FsbG91dCBzaG91bGQgc2V0CisgKiBz
ZXNza2V5X2xlbiBhbmQgc2VjYmxvYl9sZW4sIGFuZCB0aGVuIGNvbmNhdGVuYXRlIHRoZSBTZXNz
S2V5K1NlY0Jsb2IKKyAqIGFuZCBzdHVmZiBpdCBpbiB0aGUgZGF0YSBmaWVsZC4KKyAqLworc3Ry
dWN0IGNpZnNfc3BuZWdvX21zZyB7CisJdWludDMyX3QgdmVyc2lvbjsKKwl1aW50MzJfdCBmbGFn
czsKKwl1aW50MzJfdCBzZXNza2V5X2xlbjsKKwl1aW50MzJfdCBzZWNibG9iX2xlbjsKKwl1aW50
OF90IGRhdGFbMV07Cit9OworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCBrZXlf
dHlwZSBjaWZzX3NwbmVnb19rZXlfdHlwZTsKKyNlbmRpZgkJCQkvKiBLRVJORUwgKi8KKworI2Vu
ZGlmCQkJCS8qIF9DSUZTX1NQTkVHT19IICovCkluZGV4OiBzYW1iYS0zLjAuMjhhL3NvdXJjZS9j
b25maWd1cmUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2FtYmEtMy4wLjI4YS5vcmlnL3NvdXJjZS9jb25m
aWd1cmUuaW4KKysrIHNhbWJhLTMuMC4yOGEvc291cmNlL2NvbmZpZ3VyZS5pbgpAQCAtMzIxLDYg
KzMyMSw5IEBACiBBQ19TVUJTVChDSUZTTU9VTlRfUFJPR1MpCiBBQ19TVUJTVChJTlNUQUxMX0NJ
RlNNT1VOVCkKIEFDX1NVQlNUKFVOSU5TVEFMTF9DSUZTTU9VTlQpCitBQ19TVUJTVChDSUZTVVBD
QUxMX1BST0dTKQorQUNfU1VCU1QoSU5TVEFMTF9DSUZTVVBDQUxMKQorQUNfU1VCU1QoVU5JTlNU
QUxMX0NJRlNVUENBTEwpCiBBQ19TVUJTVChFWFRSQV9TQklOX1BST0dTKQogQUNfU1VCU1QoRVhU
UkFfQUxMX1RBUkdFVFMpCiBBQ19TVUJTVChDT05GSUdfTElCUykKQEAgLTQyNDIsNiArNDI0NSw2
MCBAQAogICBlc2FjIF0KICkKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBjaGVjayBmb3IgY2lmcy51cGNhbGwgc3VwcG9ydAorQUNfQ0hFQ0tf
SEVBREVSUyhba2V5dXRpbHMuaF0sIFtIQVZFX0tFWVVUSUxTX0g9MV0sIFtIQVZFX0tFWVVUSUxT
X0g9MF0pCitDSUZTVVBDQUxMX1BST0dTPSIiCitJTlNUQUxMX0NJRlNVUENBTEw9IiIKK1VOSU5T
VEFMTF9DSUZTVVBDQUxMPSIiCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0byBidWlsZCBjaWZz
LnVwY2FsbCkKK0FDX0FSR19XSVRIKGNpZnN1cGNhbGwsCitbQVNfSEVMUF9TVFJJTkcoWy0td2l0
aC1jaWZzdXBjYWxsXSwgW0luY2x1ZGUgY2lmcy51cGNhbGwgKExpbnV4IG9ubHkpIHN1cHBvcnQg
KGRlZmF1bHQ9eWVzKV0pXSwKK1sgY2FzZSAiJHdpdGh2YWwiIGluCisgIG5vKQorCUFDX01TR19S
RVNVTFQobm8pCisJOzsKKyAgKikKKwljYXNlICIkaG9zdF9vcyIgaW4KKwkqbGludXgqKQorCQlp
ZiB0ZXN0IHgiJHVzZV9hZHMiICE9IHgieWVzIjsgdGhlbgorCQkJQUNfTVNHX0VSUk9SKEFEUyBz
dXBwb3J0IHNob3VsZCBiZSBlbmFibGVkIGZvciBidWlsZGluZyBjaWZzLnVwY2FsbCkKKwkJZWxp
ZiB0ZXN0IHgiJEhBVkVfS0VZVVRJTFNfSCIgIT0gIngxIjsgdGhlbgorCQkJQUNfTVNHX0VSUk9S
KGtleXV0aWxzIHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yIGNpZnMudXBjYWxsKQorCQllbHNlCisJ
CQlBQ19NU0dfUkVTVUxUKHllcykKKwkJCUFDX0RFRklORShXSVRIX0NJRlNVUENBTEwsMSxbd2hl
dGhlciB0byBidWlsZCBjaWZzLnVwY2FsbF0pCisJCQlDSUZTVVBDQUxMX1BST0dTPSJiaW4vY2lm
cy51cGNhbGwiCisJCQlJTlNUQUxMX0NJRlNVUENBTEw9Imluc3RhbGxjaWZzdXBjYWxsIgorCQkJ
VU5JTlNUQUxMX0NJRlNVUENBTEw9InVuaW5zdGFsbGNpZnN1cGNhbGwiCisJCWZpCisJCTs7CisJ
KikKKwkJQUNfTVNHX0VSUk9SKG5vdCBvbiBhIGxpbnV4IHN5c3RlbSEpCisJCTs7CisJZXNhYwor
ICAgIDs7CisgIGVzYWMgXSwKK1sgY2FzZSAiJGhvc3Rfb3MiIGluCisgICpsaW51eCopCisgICAg
ICAgIGlmIHRlc3QgeCIkdXNlX2FkcyIgIT0geCJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAg
QUNfTVNHX1dBUk4oQURTIHN1cHBvcnQgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGJ1aWxkaW5nIGNp
ZnMudXBjYWxsKQorICAgICAgICBlbGlmIHRlc3QgeCIkSEFWRV9LRVlVVElMU19IIiAhPSAieDEi
OyB0aGVuCisgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oa2V5dXRpbHMgcGFja2FnZSBpcyBy
ZXF1aXJlZCBmb3IgY2lmcy51cGNhbGwpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBB
Q19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoV0lUSF9DSUZTVVBD
QUxMLDEsW3doZXRoZXIgdG8gYnVpbGQgY2lmcy51cGNhbGxdKQorICAgICAgICAgICAgICAgIENJ
RlNVUENBTExfUFJPR1M9ImJpbi9jaWZzLnVwY2FsbCIKKyAgICAgICAgICAgICAgICBJTlNUQUxM
X0NJRlNVUENBTEw9Imluc3RhbGxjaWZzdXBjYWxsIgorICAgICAgICAgICAgICAgIFVOSU5TVEFM
TF9DSUZTVVBDQUxMPSJ1bmluc3RhbGxjaWZzdXBjYWxsIgorICAgICAgICBmaQorICAgICAgICA7
OworICAqKQorICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgICA7OworICBlc2FjIF0K
KykKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CiAjIGNoZWNrIGZvciBhIFBBTSBjbGVhci10ZXh0IGF1dGgsIGFjY291bnRzLCBwYXNzd29yZCBh
bmQgc2Vzc2lvbiBzdXBwb3J0CkluZGV4OiBzYW1iYS0zLjAuMjhhL3NvdXJjZS9pbmNsdWRlL3Nt
Yi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNhbWJhLTMuMC4yOGEub3JpZy9zb3VyY2UvaW5jbHVkZS9zbWIu
aAorKysgc2FtYmEtMy4wLjI4YS9zb3VyY2UvaW5jbHVkZS9zbWIuaApAQCAtNTU4LDYgKzU1OCw4
IEBACiAJdm9pZCAoKmZyZWUpKHN0cnVjdCBkYXRhX2Jsb2JfICpkYXRhX2Jsb2IpOwogfSBEQVRB
X0JMT0I7CiAKK2V4dGVybiBjb25zdCBEQVRBX0JMT0IgZGF0YV9ibG9iX251bGw7CisKIC8qCiAg
KiBTdHJ1Y3R1cmUgdXNlZCB0byBrZWVwIGRpcmVjdG9yeSBzdGF0ZSBpbmZvcm1hdGlvbiBhcm91
bmQuCiAgKiBVc2VkIGluIE5UIGNoYW5nZS1ub3RpZnkgY29kZS4KSW5kZXg6IHNhbWJhLTMuMC4y
OGEvc291cmNlL2xpYi9kYXRhX2Jsb2IuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYW1iYS0zLjAuMjhhLm9y
aWcvc291cmNlL2xpYi9kYXRhX2Jsb2IuYworKysgc2FtYmEtMy4wLjI4YS9zb3VyY2UvbGliL2Rh
dGFfYmxvYi5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJpbmNsdWRlcy5oIgogCitj
b25zdCBEQVRBX0JMT0IgZGF0YV9ibG9iX251bGwgPSB7IE5VTEwsIDAsIE5VTEwgfTsKKwogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICBGcmVlKCkgYSBkYXRhIGJsb2IuCiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpJbmRleDogc2FtYmEt
My4wLjI4YS9zb3VyY2UvY2xpZW50L2NpZnMudXBjYWxsLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9u
dWxsCisrKyBzYW1iYS0zLjAuMjhhL3NvdXJjZS9jbGllbnQvY2lmcy51cGNhbGwuYwpAQCAtMCww
ICsxLDM5MSBAQAorLyoKKyogQ0lGUyB1c2VyLXNwYWNlIGhlbHBlci4KKyogQ29weXJpZ2h0IChD
KSBJZ29yIE1hbW1lZG92IChuaWFsbGFpbkBnbWFpbC5jb20pIDIwMDcKKyoKKyogVXNlZCBieSAv
c2Jpbi9yZXF1ZXN0LWtleSBmb3IgaGFuZGxpbmcKKyogY2lmcyB1cGNhbGwgZm9yIGtlcmJlcm9z
IGF1dGhvcml6YXRpb24gb2YgYWNjZXNzIHRvIHNoYXJlIGFuZAorKiBjaWZzIHVwY2FsbCBmb3Ig
REZTIHNydmVyIG5hbWUgcmVzb2x2aW5nIChJUHY0L0lQdjYgYXdhcmUpLgorKiBZb3Ugc2hvdWxk
IGhhdmUga2V5dXRpbHMgaW5zdGFsbGVkIGFuZCBhZGQgc29tZXRoaW5nIGxpa2UgdGhlCisqIGZv
bGxvd2luZyBsaW5lcyB0byAvZXRjL3JlcXVlc3Qta2V5LmNvbmYgZmlsZToKKworY3JlYXRlIGNp
ZnMuc3BuZWdvICogKiAvdXNyL2xvY2FsL3NiaW4vY2lmcy51cGNhbGwgJWsKK2NyZWF0ZSBkbnNf
cmVzb2x2ZXIgKiAqIC91c3IvbG9jYWwvc2Jpbi9jaWZzLnVwY2FsbCAlaworCisqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgPGtleXV0aWxz
Lmg+CisKKyNpbmNsdWRlICJjaWZzX3NwbmVnby5oIgorCitjb25zdCBjaGFyICpDSUZTU1BORUdP
X1ZFUlNJT04gPSAiMS4yIjsKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nID0gImNpZnMudXBjYWxs
IjsKK3R5cGVkZWYgZW51bSBfc2VjVHlwZSB7CisJTk9ORSA9IDAsCisJS1JCNSwKKwlNU19LUkI1
Cit9IHNlY1R5cGVfdDsKKworLyoKKyAqIFByZXBhcmVzIEFQLVJFUSBkYXRhIGZvciBtZWNoVG9r
ZW4gYW5kIGdldHMgc2Vzc2lvbiBrZXkKKyAqIFVzZXMgY3JlZGVudGlhbHMgZnJvbSBjYWNoZS4g
SXQgd2lsbCBub3QgYXNrIGZvciBwYXNzd29yZAorICogeW91IHNob3VsZCByZWNlaXZlIGNyZWRl
bnRpYWxzIGZvciB5dW9yIG5hbWUgbWFudWFsbHkgdXNpbmcKKyAqIGtpbml0IG9yIHdoYXRldmVy
IHlvdSB3aXNoLgorICoKKyAqIGluOgorICogCW9pZCAtCQlzdHJpbmcgd2l0aCBPSUQvIENvdWxk
IGJlIE9JRF9LRVJCRVJPUzUKKyAqIAkJCW9yIE9JRF9LRVJCRVJPUzVfT0xECisgKiAJcHJpbmNp
cGFsIC0JU2VydmljZSBuYW1lLgorICogCQkJQ291bGQgYmUgImNpZnMvRlFETiIgZm9yIEtSQjUg
T0lECisgKiAJCQlvciBmb3IgTVNfS1JCNSBPSUQgc3R5bGUgc2VydmVyIHByaW5jaXBhbAorICog
CQkJbGlrZSAicGRjJEBZT1VSLlJFQUxNLk5BTUUiCisgKgorICogb3V0OgorICogCXNlY2Jsb2Ig
LQlwb2ludGVyIGZvciBzcG5lZ28gd3JhcHBlZCBBUC1SRVEgZGF0YSB0byBiZSBzdG9yZWQKKyAq
IAlzZXNzX2tleS0JcG9pbnRlciBmb3IgU2Vzc2lvbktleSBkYXRhIHRvIGJlIHN0b3JlZAorICoK
KyAqIHJldDogMCAtIHN1Y2Nlc3MsIG90aGVycyAtIGZhaWx1cmUKKyovCitzdGF0aWMgaW50Cito
YW5kbGVfa3JiNV9tZWNoKGNvbnN0IGNoYXIgKm9pZCwgY29uc3QgY2hhciAqcHJpbmNpcGFsLAor
CQkgICAgIERBVEFfQkxPQiAqIHNlY2Jsb2IsIERBVEFfQkxPQiAqIHNlc3Nfa2V5KQoreworCWlu
dCByZXR2YWw7CisJREFUQV9CTE9CIHRrdCwgdGt0X3dyYXBwZWQ7CisKKwkvKiBnZXQgYSBrZXJi
ZXJvcyB0aWNrZXQgZm9yIHRoZSBzZXJ2aWNlIGFuZCBleHRyYWN0IHRoZSBzZXNzaW9uIGtleSAq
LworCXJldHZhbCA9IGNsaV9rcmI1X2dldF90aWNrZXQocHJpbmNpcGFsLCAwLAorCQkJCSAgICAg
JnRrdCwgc2Vzc19rZXksIDAsIE5VTEwsIE5VTEwpOworCisJaWYgKHJldHZhbCkKKwkJcmV0dXJu
IHJldHZhbDsKKworCS8qIHdyYXAgdGhhdCB1cCBpbiBhIG5pY2UgR1NTLUFQSSB3cmFwcGluZyAq
LworCXRrdF93cmFwcGVkID0gc3BuZWdvX2dlbl9rcmI1X3dyYXAodGt0LCBUT0tfSURfS1JCX0FQ
X1JFUSk7CisKKwkvKiBhbmQgd3JhcCB0aGF0IGluIGEgc2hpbnkgU1BORUdPIHdyYXBwZXIgKi8K
Kwkqc2VjYmxvYiA9IGdlbl9uZWdUb2tlbkluaXQob2lkLCB0a3Rfd3JhcHBlZCk7CisKKwlkYXRh
X2Jsb2JfZnJlZSgmdGt0X3dyYXBwZWQpOworCWRhdGFfYmxvYl9mcmVlKCZ0a3QpOworCXJldHVy
biByZXR2YWw7Cit9CisKKyNkZWZpbmUgREtEX0hBVkVfSE9TVE5BTUUJMQorI2RlZmluZSBES0Rf
SEFWRV9WRVJTSU9OCTIKKyNkZWZpbmUgREtEX0hBVkVfU0VDCQk0CisjZGVmaW5lIERLRF9IQVZF
X0lQVjQJCTgKKyNkZWZpbmUgREtEX0hBVkVfSVBWNgkJMTYKKyNkZWZpbmUgREtEX0hBVkVfVUlE
CQkzMgorI2RlZmluZSBES0RfTVVTVEhBVkVfU0VUIChES0RfSEFWRV9IT1NUTkFNRXxES0RfSEFW
RV9WRVJTSU9OfERLRF9IQVZFX1NFQykKKworc3RhdGljIGludAorZGVjb2RlX2tleV9kZXNjcmlw
dGlvbihjb25zdCBjaGFyICpkZXNjLCBpbnQgKnZlciwgc2VjVHlwZV90ICogc2VjLAorCQkJICAg
Y2hhciAqKmhvc3RuYW1lLCB1aWRfdCAqIHVpZCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwljaGFy
ICpwb3M7CisJY29uc3QgY2hhciAqdGtuID0gZGVzYzsKKworCWRvIHsKKwkJcG9zID0gaW5kZXgo
dGtuLCAnOycpOworCQlpZiAoc3RybmNtcCh0a24sICJob3N0PSIsIDUpID09IDApIHsKKwkJCWlu
dCBsZW47CisKKwkJCWlmIChwb3MgPT0gTlVMTCkgeworCQkJCWxlbiA9IHN0cmxlbih0a24pOwor
CQkJfSBlbHNlIHsKKwkJCQlsZW4gPSBwb3MgLSB0a247CisJCQl9CisJCQlsZW4gLT0gNDsKKwkJ
CVNBRkVfRlJFRSgqaG9zdG5hbWUpOworCQkJKmhvc3RuYW1lID0gU01CX1hNQUxMT0NfQVJSQVko
Y2hhciwgbGVuKTsKKwkJCXN0cmxjcHkoKmhvc3RuYW1lLCB0a24gKyA1LCBsZW4pOworCQkJcmV0
dmFsIHw9IERLRF9IQVZFX0hPU1ROQU1FOworCQl9IGVsc2UgaWYgKHN0cm5jbXAodGtuLCAiaXB2
ND0iLCA1KSA9PSAwKSB7CisJCQkvKiBCQjogZG8gd2UgbmVlZCBpdCBpZiB3ZSBoYXZlIGhvc3Ru
YW1lIGFscmVhZHk/ICovCisJCX0gZWxzZSBpZiAoc3RybmNtcCh0a24sICJpcHY2PSIsIDUpID09
IDApIHsKKwkJCS8qIEJCOiBkbyB3ZSBuZWVkIGl0IGlmIHdlIGhhdmUgaG9zdG5hbWUgYWxyZWFk
eT8gKi8KKwkJfSBlbHNlIGlmIChzdHJuY21wKHRrbiwgInNlYz0iLCA0KSA9PSAwKSB7CisJCQlp
ZiAoc3RybmNtcCh0a24gKyA0LCAia3JiNSIsIDQpID09IDApIHsKKwkJCQlyZXR2YWwgfD0gREtE
X0hBVkVfU0VDOworCQkJCSpzZWMgPSBLUkI1OworCQkJfSBlbHNlIGlmIChzdHJuY21wKHRrbiAr
IDQsICJtc2tyYjUiLCA2KSA9PSAwKSB7CisJCQkJcmV0dmFsIHw9IERLRF9IQVZFX1NFQzsKKwkJ
CQkqc2VjID0gTVNfS1JCNTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJuY21wKHRrbiwgInVpZD0i
LCA0KSA9PSAwKSB7CisJCQllcnJubyA9IDA7CisJCQkqdWlkID0gc3RydG9sKHRrbiArIDQsIE5V
TEwsIDE2KTsKKwkJCWlmIChlcnJubyAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19XQVJOSU5HLCAi
SW52YWxpZCB1aWQgZm9ybWF0OiAlcyIsCisJCQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJ
CQkJcmV0dXJuIDE7CisJCQl9IGVsc2UgeworCQkJCXJldHZhbCB8PSBES0RfSEFWRV9VSUQ7CisJ
CQl9CisJCX0gZWxzZSBpZiAoc3RybmNtcCh0a24sICJ2ZXI9IiwgNCkgPT0gMCkgewkvKiBpZiB2
ZXJzaW9uICovCisJCQllcnJubyA9IDA7CisJCQkqdmVyID0gc3RydG9sKHRrbiArIDQsIE5VTEws
IDE2KTsKKwkJCWlmIChlcnJubyAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19XQVJOSU5HLAorCQkJ
CSAgICAgICAiSW52YWxpZCB2ZXJzaW9uIGZvcm1hdDogJXMiLAorCQkJCSAgICAgICBzdHJlcnJv
cihlcnJubykpOworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIHsKKwkJCQlyZXR2YWwgfD0gREtE
X0hBVkVfVkVSU0lPTjsKKwkJCX0KKwkJfQorCQlpZiAocG9zID09IE5VTEwpCisJCQlicmVhazsK
KwkJdGtuID0gcG9zICsgMTsKKwl9IHdoaWxlICh0a24pOworCXJldHVybiByZXR2YWw7Cit9CisK
K3N0YXRpYyBpbnQKK2NpZnNfcmVzb2x2ZXIoY29uc3Qga2V5X3NlcmlhbF90IGtleSwgY29uc3Qg
Y2hhciAqa2V5X2Rlc2NyKQoreworCWludCBjOworCXN0cnVjdCBhZGRyaW5mbyAqYWRkcjsKKwlj
aGFyIGlwW0lORVQ2X0FERFJTVFJMRU5dOworCXZvaWQgKnA7CisJY29uc3QgY2hhciAqa2V5ZW5k
ID0ga2V5X2Rlc2NyOworCS8qIHNraXAgbmV4dCA0ICc7JyBkZWxpbWl0ZXJzIHRvIGdldCB0byBk
ZXNjcmlwdGlvbiAqLworCWZvciAoYyA9IDE7IGMgPD0gNDsgYysrKSB7CisJCWtleWVuZCA9IGlu
ZGV4KGtleWVuZCsxLCAnOycpOworCQlpZiAoIWtleWVuZCkgeworCQkJc3lzbG9nKExPR19XQVJO
SU5HLCAiaW52YWxpZCBrZXkgZGVzY3JpcHRpb246ICVzIiwKKwkJCQkJa2V5X2Rlc2NyKTsKKwkJ
CXJldHVybiAxOworCQl9CisJfQorCWtleWVuZCsrOworCisJLyogcmVzb2x2ZSBuYW1lIHRvIGlw
ICovCisJYyA9IGdldGFkZHJpbmZvKGtleWVuZCwgTlVMTCwgTlVMTCwgJmFkZHIpOworCWlmIChj
KSB7CisJCXN5c2xvZyhMT0dfV0FSTklORywgInVuYWJsZSB0byByZXNvbHZlIGhvc3RuYW1lOiAl
cyBbJXNdIiwKKwkJCQlrZXllbmQsIGdhaV9zdHJlcnJvcihjKSk7CisJCXJldHVybiAxOworCX0K
KworCS8qIGNvbnZlciBpcCB0byBzdHJpbmcgZm9ybSAqLworCWlmIChhZGRyLT5haV9mYW1pbHkg
PT0gQUZfSU5FVCkgeworCQlwID0gJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHItPmFpX2Fk
ZHIpLT5zaW5fYWRkcik7CisJfSBlbHNlIHsKKwkJcCA9ICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopYWRkci0+YWlfYWRkciktPnNpbjZfYWRkcik7CisJfQorCWlmICghaW5ldF9udG9wKGFkZHIt
PmFpX2ZhbWlseSwgcCwgaXAsIHNpemVvZihpcCkpKSB7CisJCXN5c2xvZyhMT0dfV0FSTklORywg
IiVzOiBpbmV0X250b3A6ICVzIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHN0cmVycm9yKGVycm5vKSk7
CisJCWZyZWVhZGRyaW5mbyhhZGRyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc2V0dXAga2V5
ICovCisJYyA9IGtleWN0bF9pbnN0YW50aWF0ZShrZXksIGlwLCBzdHJsZW4oaXApKzEsIDApOwor
CWlmIChjID09IC0xKSB7CisJCXN5c2xvZyhMT0dfV0FSTklORywgIiVzOiBrZXljdGxfaW5zdGFu
dGlhdGU6ICVzIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHN0cmVycm9yKGVycm5vKSk7CisJCWZyZWVh
ZGRyaW5mbyhhZGRyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZnJlZWFkZHJpbmZvKGFkZHIpOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKwlzeXNsb2coTE9H
X1dBUk5JTkcsICJVc2FnZTogJXMgWy1jXSBbLXZdIGtleV9zZXJpYWwiLCBwcm9nKTsKKwlmcHJp
bnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbLWNdIFstdl0ga2V5X3NlcmlhbFxuIiwgcHJvZyk7Cit9
CisKK2ludCBtYWluKGNvbnN0IGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisJc3Ry
dWN0IGNpZnNfc3BuZWdvX21zZyAqa2V5ZGF0YSA9IE5VTEw7CisJREFUQV9CTE9CIHNlY2Jsb2Ig
PSBkYXRhX2Jsb2JfbnVsbDsKKwlEQVRBX0JMT0Igc2Vzc19rZXkgPSBkYXRhX2Jsb2JfbnVsbDsK
KwlzZWNUeXBlX3Qgc2VjdHlwZSA9IE5PTkU7CisJa2V5X3NlcmlhbF90IGtleSA9IDA7CisJc2l6
ZV90IGRhdGFsZW47CisJbG9uZyByYyA9IDE7CisJdWlkX3QgdWlkID0gMDsKKwlpbnQga2VybmVs
X3VwY2FsbF92ZXJzaW9uID0gMDsKKwlpbnQgYywgdXNlX2NpZnNfc2VydmljZV9wcmVmaXggPSAw
OworCWNoYXIgKmJ1ZiwgKmhvc3RuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpvaWQ7CisKKwlv
cGVubG9nKHByb2csIDAsIExPR19EQUVNT04pOworCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2Ms
IGFyZ3YsICJjdiIpKSAhPSAtMSkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYyc6eworCQkJ
dXNlX2NpZnNfc2VydmljZV9wcmVmaXggPSAxOworCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgJ3Yn
OnsKKwkJCXByaW50ZigidmVyc2lvbjogJXNcbiIsIENJRlNTUE5FR09fVkVSU0lPTik7CisJCQln
b3RvIG91dDsKKwkJCX0KKwkJZGVmYXVsdDp7CisJCQlzeXNsb2coTE9HX1dBUk5JTkcsICJ1bmtu
b3duIG9wdGlvbjogJWMiLCBjKTsKKwkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJLyog
aXMgdGhlcmUgYSBrZXk/ICovCisJaWYgKGFyZ2MgPD0gb3B0aW5kKSB7CisJCXVzYWdlKCk7CisJ
CWdvdG8gb3V0OworCX0KKworCS8qIGdldCBrZXkgYW5kIGtleXJpbmcgdmFsdWVzICovCisJZXJy
bm8gPSAwOworCWtleSA9IHN0cnRvbChhcmd2W29wdGluZF0sIE5VTEwsIDEwKTsKKwlpZiAoZXJy
bm8gIT0gMCkgeworCQlrZXkgPSAwOworCQlzeXNsb2coTE9HX1dBUk5JTkcsICJJbnZhbGlkIGtl
eSBmb3JtYXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMg
PSBrZXljdGxfZGVzY3JpYmVfYWxsb2Moa2V5LCAmYnVmKTsKKwlpZiAocmMgPT0gLTEpIHsKKwkJ
c3lzbG9nKExPR19XQVJOSU5HLCAia2V5Y3RsX2Rlc2NyaWJlX2FsbG9jIGZhaWxlZDogJXMiLAor
CQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmMgPSAxOworCQlnb3RvIG91dDsKKwl9CisK
KwlpZiAoKHN0cm5jbXAoYnVmLCAiY2lmcy5yZXNvbHZlciIsIHNpemVvZigiY2lmcy5yZXNvbHZl
ciIpLTEpID09IDApIHx8CisJICAgIChzdHJuY21wKGJ1ZiwgImRuc19yZXNvbHZlciIsIHNpemVv
ZigiZG5zX3Jlc29sdmVyIiktMSkgPT0gMCkpIHsKKwkJcmMgPSBjaWZzX3Jlc29sdmVyKGtleSwg
YnVmKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSBkZWNvZGVfa2V5X2Rlc2NyaXB0aW9uKGJ1
ZiwgJmtlcm5lbF91cGNhbGxfdmVyc2lvbiwgJnNlY3R5cGUsCisJCQkJICAgICZob3N0bmFtZSwg
JnVpZCk7CisJaWYgKChyYyAmIERLRF9NVVNUSEFWRV9TRVQpICE9IERLRF9NVVNUSEFWRV9TRVQp
IHsKKwkJc3lzbG9nKExPR19XQVJOSU5HLAorCQkgICAgICAgInVuYWJsZSB0byBnZXQgZnJvbSBk
ZXNjcmlwdGlvbiBuZWNlc3NhcnkgcGFyYW1zIik7CisJCXJjID0gMTsKKwkJU0FGRV9GUkVFKGJ1
Zik7CisJCWdvdG8gb3V0OworCX0KKwlTQUZFX0ZSRUUoYnVmKTsKKworCWlmIChrZXJuZWxfdXBj
YWxsX3ZlcnNpb24gPiBDSUZTX1NQTkVHT19VUENBTExfVkVSU0lPTikgeworCQlzeXNsb2coTE9H
X1dBUk5JTkcsCisJCSAgICAgICAiaW5jb21wYXRpYmxlIGtlcm5lbCB1cGNhbGwgdmVyc2lvbjog
MHgleCIsCisJCSAgICAgICBrZXJuZWxfdXBjYWxsX3ZlcnNpb24pOworCQlyYyA9IDE7CisJCWdv
dG8gb3V0OworCX0KKworCWlmIChyYyAmIERLRF9IQVZFX1VJRCkgeworCQlyYyA9IHNldHVpZCh1
aWQpOworCQlpZiAocmMgPT0gLTEpIHsKKwkJCXN5c2xvZyhMT0dfV0FSTklORywgInNldHVpZDog
JXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBCQjog
c29tZWRheSB1cGNhbGwgU1BORUdPIGJsb2IgY291bGQgYmUgY2hlY2tlZCBoZXJlIHRvIGRlY2lk
ZQorCSAqIHdoYXQgbWVjaCB0byB1c2UgKi8KKworCS8vIGRvIG1lY2ggc3BlY2lmaWMgYXV0aG9y
aXphdGlvbgorCXN3aXRjaCAoc2VjdHlwZSkgeworCWNhc2UgTVNfS1JCNToKKwljYXNlIEtSQjU6
eworCQkJY2hhciAqcHJpbmM7CisJCQlzaXplX3QgbGVuOworCisJCQkvKiBmb3IgImNpZnMvIiBz
ZXJ2aWNlIG5hbWUgKyB0ZXJtaW5hdGluZyAwICovCisJCQlsZW4gPSBzdHJsZW4oaG9zdG5hbWUp
ICsgNSArIDE7CisJCQlwcmluYyA9IFNNQl9YTUFMTE9DX0FSUkFZKGNoYXIsIGxlbik7CisJCQlp
ZiAoIXByaW5jKSB7CisJCQkJcmMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHVzZV9j
aWZzX3NlcnZpY2VfcHJlZml4KSB7CisJCQkJc3RybGNweShwcmluYywgImNpZnMvIiwgbGVuKTsK
KwkJCX0gZWxzZSB7CisJCQkJc3RybGNweShwcmluYywgImhvc3QvIiwgbGVuKTsKKwkJCX0KKwkJ
CXN0cmxjcHkocHJpbmMgKyA1LCBob3N0bmFtZSwgbGVuIC0gNSk7CisKKwkJCWlmIChzZWN0eXBl
ID09IE1TX0tSQjUpCisJCQkJb2lkID0gT0lEX0tFUkJFUk9TNV9PTEQ7CisJCQllbHNlCisJCQkJ
b2lkID0gT0lEX0tFUkJFUk9TNTsKKworCQkJcmMgPSBoYW5kbGVfa3JiNV9tZWNoKG9pZCwgcHJp
bmMsICZzZWNibG9iLCAmc2Vzc19rZXkpOworCQkJU0FGRV9GUkVFKHByaW5jKTsKKwkJCWJyZWFr
OworCQl9CisJZGVmYXVsdDp7CisJCQlzeXNsb2coTE9HX1dBUk5JTkcsICJzZWN0eXBlOiAlZCBp
cyBub3QgaW1wbGVtZW50ZWQiLAorCQkJICAgICAgIHNlY3R5cGUpOworCQkJcmMgPSAxOworCQkJ
YnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmMpIHsKKwkJZ290byBvdXQ7CisJfQorCisJLyogcGFj
ayBTZWN1cml0eUJMb2IgYW5kIFNlc3Npb25LZXkgaW50byBkb3duY2FsbCBwYWNrZXQgKi8KKwlk
YXRhbGVuID0KKwkgICAgc2l6ZW9mKHN0cnVjdCBjaWZzX3NwbmVnb19tc2cpICsgc2VjYmxvYi5s
ZW5ndGggKyBzZXNzX2tleS5sZW5ndGg7CisJa2V5ZGF0YSA9IChzdHJ1Y3QgY2lmc19zcG5lZ29f
bXNnKilTTUJfWE1BTExPQ19BUlJBWShjaGFyLCBkYXRhbGVuKTsKKwlpZiAoIWtleWRhdGEpIHsK
KwkJcmMgPSAxOworCQlnb3RvIG91dDsKKwl9CisJa2V5ZGF0YS0+dmVyc2lvbiA9IGtlcm5lbF91
cGNhbGxfdmVyc2lvbjsKKwlrZXlkYXRhLT5mbGFncyA9IDA7CisJa2V5ZGF0YS0+c2Vzc2tleV9s
ZW4gPSBzZXNzX2tleS5sZW5ndGg7CisJa2V5ZGF0YS0+c2VjYmxvYl9sZW4gPSBzZWNibG9iLmxl
bmd0aDsKKwltZW1jcHkoJihrZXlkYXRhLT5kYXRhKSwgc2Vzc19rZXkuZGF0YSwgc2Vzc19rZXku
bGVuZ3RoKTsKKwltZW1jcHkoJihrZXlkYXRhLT5kYXRhKSArIGtleWRhdGEtPnNlc3NrZXlfbGVu
LAorCSAgICAgICBzZWNibG9iLmRhdGEsIHNlY2Jsb2IubGVuZ3RoKTsKKworCS8qIHNldHVwIGtl
eSAqLworCXJjID0ga2V5Y3RsX2luc3RhbnRpYXRlKGtleSwga2V5ZGF0YSwgZGF0YWxlbiwgMCk7
CisJaWYgKHJjID09IC0xKSB7CisJCXN5c2xvZyhMT0dfV0FSTklORywgImtleWN0bF9pbnN0YW50
aWF0ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCQjog
bWF5YmUgd2UgbmVlZCB1c2UgdGltZW91dCBmb3Iga2V5OiBmb3IgZXhhbXBsZSBubyBtb3JlIHRo
ZW4KKwkgKiB0aWNrZXQgbGlmaWV0aW1lPyAqLworCS8qIGtleWN0bF9zZXRfdGltZW91dCgga2V5
LCA2MCk7ICovCitvdXQ6CisJLyoKKwkgKiBvbiBlcnJvciwgbmVnYXRpdmVseSBpbnN0YW50aWF0
ZSB0aGUga2V5IG91cnNlbHZlcyBzbyB0aGF0IHdlIGNhbgorCSAqIG1ha2Ugc3VyZSB0aGUga2Vy
bmVsIGRvZXNuJ3QgaGFuZyBpdCBvZmYgb2YgYSBzZWFyY2hhYmxlIGtleXJpbmcKKwkgKiBhbmQg
aW50ZXJmZXJlIHdpdGggdGhlIG5leHQgYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSB0aGUga2V5Lgor
CSAqLworCWlmIChyYyAhPSAwICAmJiBrZXkgPT0gMCkKKwkJa2V5Y3RsX25lZ2F0ZShrZXksIDEs
IEtFWV9SRVFLRVlfREVGTF9ERUZBVUxUKTsKKwlkYXRhX2Jsb2JfZnJlZSgmc2VjYmxvYik7CisJ
ZGF0YV9ibG9iX2ZyZWUoJnNlc3Nfa2V5KTsKKwlTQUZFX0ZSRUUoaG9zdG5hbWUpOworCVNBRkVf
RlJFRShrZXlkYXRhKTsKKwlyZXR1cm4gcmM7Cit9CkluZGV4OiBzYW1iYS0zLjAuMjhhL2RvY3Mv
bWFucGFnZXMvY2lmcy51cGNhbGwuOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIHNhbWJh
LTMuMC4yOGEvZG9jcy9tYW5wYWdlcy9jaWZzLnVwY2FsbC44CkBAIC0wLDAgKzEsODIgQEAKKy5c
IiAgICAgVGl0bGU6IGNpZnMudXBjYWxsCisuXCIgICAgQXV0aG9yOiAKKy5cIiBHZW5lcmF0b3I6
IERvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIHYxLjczLjEgPGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8+
CisuXCIgICAgICBEYXRlOiAwOS8xOC8yMDA4CisuXCIgICAgTWFudWFsOiBTeXN0ZW0gQWRtaW5p
c3RyYXRpb24gdG9vbHMKKy5cIiAgICBTb3VyY2U6IFNhbWJhIDMuMgorLlwiCisuVEggIkNJRlNc
LlVQQ0FMTCIgIjgiICIwOS8xOC8yMDA4IiAiU2FtYmEgM1wuMiIgIlN5c3RlbSBBZG1pbmlzdHJh
dGlvbiB0b29scyIKKy5cIiBkaXNhYmxlIGh5cGhlbmF0aW9uCisubmgKKy5cIiBkaXNhYmxlIGp1
c3RpZmljYXRpb24gKGFkanVzdCB0ZXh0IHRvIGxlZnQgbWFyZ2luIG9ubHkpCisuYWQgbAorLlNI
ICJOQU1FIgorY2lmcy51cGNhbGwgLSBVc2Vyc3BhY2UgdXBjYWxsIGhlbHBlciBmb3IgQ29tbW9u
IEludGVybmV0IEZpbGUgU3lzdGVtIChDSUZTKQorLlNIICJTWU5PUFNJUyIKKy5IUCAxCitjaWZz
XC51cGNhbGwgW1wtY10gW1wtdl0ge2tleWlkfQorLlNIICJERVNDUklQVElPTiIKKy5QUAorVGhp
cyB0b29sIGlzIHBhcnQgb2YgdGhlCitcZkJzYW1iYVxmUig3KQorc3VpdGVcLgorLlBQCitjaWZz
XC51cGNhbGwgaXMgYSB1c2Vyc3BhY2UgaGVscGVyIHByb2dyYW0gZm9yIHRoZSBsaW51eCBDSUZT
IGNsaWVudCBmaWxlc3lzdGVtXC4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFjdGl2aXRpZXMgdGhh
dCB0aGUga2VybmVsIGNhbm5vdCBlYXNpbHkgZG8gaXRzZWxmXC4gVGhpcyBwcm9ncmFtIGlzIGEg
Y2FsbG91dCBwcm9ncmFtIHRoYXQgZG9lcyB0aGVzZSB0aGluZ3MgZm9yIHRoZSBrZXJuZWwgYW5k
IHRoZW4gcmV0dXJucyB0aGUgcmVzdWx0XC4KKy5QUAorY2lmc1wudXBjYWxsIGlzIGdlbmVyYWxs
eSBpbnRlbmRlZCB0byBiZSBydW4gd2hlbiB0aGUga2VybmVsIGNhbGxzIHJlcXVlc3RcLWtleSg4
KQorZm9yIGEgcGFydGljdWxhciBrZXkgdHlwZVwuIFdoaWxlIGl0IGNhbiBiZSBydW4gZGlyZWN0
bHkgZnJvbSB0aGUgY29tbWFuZFwtbGluZSwgaXRcJ3Mgbm90IGdlbmVyYWxseSBpbnRlbmRlZCB0
byBiZSBydW4gdGhhdCB3YXlcLgorLlNIICJPUFRJT05TIgorLlBQCitcLWMKKy5SUyA0CitXaGVu
IGhhbmRsaW5nIGEga2VyYmVyb3MgdXBjYWxsLCB1c2UgYSBzZXJ2aWNlIHByaW5jaXBhbCB0aGF0
IHN0YXJ0cyB3aXRoICJjaWZzLyJcLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlICJob3N0LyIg
c2VydmljZSBwcmluY2lwYWxcLgorLlJFCisuUFAKK1wtdgorLlJTIDQKK1ByaW50IHZlcnNpb24g
bnVtYmVyIGFuZCBleGl0XC4KKy5SRQorLlNIICJDT05GSUdVUkFUSU9OIEZPUiBLRVlDVEwiCisu
UFAKK2NpZnNcLnVwY2FsbCBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUga2VybmVs
IHZpYSB0aGUgcmVxdWVzdFwta2V5IGNhbGxvdXQgcHJvZ3JhbVwuIFRoaXMgcmVxdWlyZXMgdGhh
dCByZXF1ZXN0XC1rZXkgYmUgdG9sZCB3aGVyZSBhbmQgaG93IHRvIGNhbGwgdGhpcyBwcm9ncmFt
XC4gVGhlIGN1cnJlbnQgY2lmc1wudXBjYWxsIHByb2dyYW0gaGFuZGxlcyB0d28gZGlmZmVyZW50
IGtleSB0eXBlczoKKy5QUAorY2lmc1wuc3BuZWdvCisuUlMgNAorVGhpcyBrZXl0eXBlIGlzIGZv
ciByZXRyaWV2aW5nIGtlcmJlcm9zIHNlc3Npb24ga2V5cworLlJFCisuUFAKK2Ruc19yZXNvbHZl
cgorLlJTIDQKK1RoaXMga2V5IHR5cGUgaXMgZm9yIHJlc29sdmluZyBob3N0bmFtZXMgaW50byBJ
UCBhZGRyZXNzZXMKKy5SRQorLlBQCitUbyBtYWtlIHRoaXMgcHJvZ3JhbSB1c2VmdWwgZm9yIENJ
RlMsIHlvdVwnbGwgbmVlZCB0byBzZXQgdXAgZW50cmllcyBmb3IgdGhlbSBpbiByZXF1ZXN0XC1r
ZXlcLmNvbmYoNSlcLiBIZXJlXCdzIGFuIGV4YW1wbGUgb2YgYW4gZW50cnkgZm9yIGVhY2gga2V5
IHR5cGU6Cisuc3AKKy5SUyA0CisubmYKKyNPUEVSQVRJT04gIFRZUEUgICAgICAgICAgIEQgQyBQ
Uk9HUkFNIEFSRzEgQVJHMlwuXC5cLgorIz09PT09PT09PSAgPT09PT09PT09PT09PSAgPSA9ID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY3JlYXRlCSAgICBjaWZz
XC5zcG5lZ28gICAgKiAqIC91c3IvbG9jYWwvc2Jpbi9jaWZzXC51cGNhbGwgXC1jICVrCitjcmVh
dGUgICAgICBkbnNfcmVzb2x2ZXIgICAqICogL3Vzci9sb2NhbC9zYmluL2NpZnNcLnVwY2FsbCAl
aworLmZpCisuUkUKKy5QUAorU2VlCitcZkJyZXF1ZXN0LWtleS5jb25mNVxmUigpCitmb3IgbW9y
ZSBpbmZvIG9uIGVhY2ggZmllbGRcLgorLlNIICJTRUUgQUxTTyIKKy5QUAorCitcZkJyZXF1ZXN0
LWtleS5jb25mXGZSKDUpLAorXGZCbW91bnQuY2lmc1xmUig4KQorLlNIICJBVVRIT1IiCisuUFAK
K0lnb3IgTWFtbWVkb3Ygd3JvdGUgdGhlIGNpZnNcLnVwY2FsbCBwcm9ncmFtXC4KKy5QUAorSmVm
ZiBMYXl0b24gYXV0aG9yZWQgdGhpcyBtYW5wYWdlXC4KKy5QUAorVGhlIG1haW50YWluZXIgb2Yg
dGhlIExpbnV4IENJRlMgVkZTIGlzIFN0ZXZlIEZyZW5jaFwuCisuUFAKK1RoZQorTGludXggQ0lG
UyBNYWlsaW5nIGxpc3QKK2lzIHRoZSBwcmVmZXJyZWQgcGxhY2UgdG8gYXNrIHF1ZXN0aW9ucyBy
ZWdhcmRpbmcgdGhlc2UgcHJvZ3JhbXNcLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3374</attachid>
            <date>2009-03-16 17:02:36 +0300</date>
            <delta_ts>2009-03-16 17:02:36 +0300</delta_ts>
            <desc>ip-to-hostname</desc>
            <filename>cifs-upcall-ip-to-hostname.patch</filename>
            <type>application/octet-stream</type>
            <size>3008</size>
            <attacher name="Andriy Stepanov (stanv)">stanv</attacher>
            
              <data encoding="base64">SW5kZXg6IHNvdXJjZS9jbGllbnQvY2lmcy51cGNhbGwuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzb3VyY2Uv
Y2xpZW50L2NpZnMudXBjYWxsLmMub3JpZworKysgc291cmNlL2NsaWVudC9jaWZzLnVwY2FsbC5j
CkBAIC0yNyw2ICsyNyw3IEBAICBjcmVhdGUgZG5zX3Jlc29sdmVyICogKiAvdXNyL2xvY2FsL3Ni
aW4vCiAjaW5jbHVkZSAiaW5jbHVkZXMuaCIKICNpbmNsdWRlIDxrZXl1dGlscy5oPgogCisKICNp
bmNsdWRlICJjaWZzX3NwbmVnby5oIgogCiBjb25zdCBjaGFyICpDSUZTU1BORUdPX1ZFUlNJT04g
PSAiMS4yIjsKQEAgLTExMyw2ICsxMTQsNTkgQEAgIGRlY29kZV9rZXlfZGVzY3JpcHRpb24oY29u
c3QgY2hhciAqZGVzYywKICAgICAgICAgICAgKmhvc3RuYW1lID0gU01CX1hNQUxMT0NfQVJSQVko
Y2hhciwgbGVuKTsKICAgICAgICAgICAgc3RybGNweSgqaG9zdG5hbWUsIHRrbiArIDUsIGxlbik7
CiAgICAgICAgICAgIHJldHZhbCB8PSBES0RfSEFWRV9IT1NUTkFNRTsKKyAgICAgICAgICAgLyog
TWF5IGJlIGl0J3MgYW4gSVAgYWRkcmVzcz8KKyAgICAgICAgICAgICogcmVxdWVzdF9rZXkoKSBt
aWdodCBmYWlsIGlmIHdlIHBhc3MgaXQgZG93biwKKyAgICAgICAgICAgICogc28gYXR0ZW1wdCB0
byBsb29rdXAgdGhlIGhvc3RuYW1lLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgaWYgKGlz
X2lwYWRkcmVzcygqaG9zdG5hbWUpKSB7CisgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJf
c3RvcmFnZSBzczsKKyAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyAgICAg
ICAgICAgICAgIHNvY2tsZW5fdCBsZW5ndGg7CisgICAgICAgICAgICAgICBjaGFyICpocCA9ICpo
b3N0bmFtZTsKKyAgICAgICAgICAgICAgIGNoYXIgaG9zdFtNQVhfRE5TX05BTUVfTEVOR1RIXTsK
KworICAgICAgICAgICAgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3M7CisKKyAgICAg
ICAgICAgICAgIC8qIElQdjQgKi8KKyAgICAgICAgICAgICAgIGlmIChpc19pcGFkZHJlc3NfdjQo
Kmhvc3RuYW1lKSkgeworICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRy
NDsKKyAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBzaXplb2YoYWRkcjQpOworCisgICAgICAg
ICAgICAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBocCwgJmFkZHI0LnNpbl9hZGRyKSA8
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgImNpZnMu
dXBjYWxsOiBlcnJvciBjb252ZXJ0aW5nIGhvc3RuYW1lIHRvIElQIGFkZHJlc3MiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICBhZGRyNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgICAg
ICAgICBhZGRyNC5zaW5fcG9ydCA9IDA7CisgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRuYW1l
aW5mbygoc3RydWN0IHNvY2thZGRyICopJmFkZHI0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhvc3Qp
LCBOVUxMLCAwLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19XQVJOSU5H
LCAiaG9zdG5hbWUgaXMgJXMiLCBob3N0KTsKKyAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgImdldG5hbWVpbmZvKCkgZmFp
bGVkIik7CisgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBJUHY2ICovCisgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKyAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSBzaXplb2YoYWRkcjYpOworCisgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfcHRvbihB
Rl9JTkVUNiwgaHAsICZhZGRyNi5zaW42X2FkZHIpIDw9IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAiY2lmcy51cGNhbGw6IGVycm9yIGNvbnZlcnRpbmcg
aG9zdG5hbWUgdG8gSVAgYWRkcmVzcyIpOworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgIGFkZHI2LnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgICAgICAgYWRkcjYuc2luNl9wb3J0ID0g
MDsKKyAgICAgICAgICAgICAgICAgICBpZiAoIWdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkcjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIGhvc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaG9zdCksIE5VTEwsIDAsIDApKQorICAgICAg
ICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJob3N0bmFtZSBpcyAlcyIsIGhv
c3QpOworICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgc3lz
bG9nKExPR19XQVJOSU5HLCAiZ2V0bmFtZWluZm8oKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAi
Y2lmcy51cGNhbGw6IGlzX2lwYWRkcmVzcygpIGJsb2NrIHNraXBwZWQiKTsKKworICAgICAgICAg
ICAvKiBCQjogZG8gd2UgbmVlZCB0byBlcnIgaWYgd2UgZG9uJ3QgZ2V0IGhvc3RuYW1lIGlmIElQ
CisgICAgICAgICAgICAqIGFkZHJlc3MgYW5kIGtyYjUgaWYgdXNlZD8gKi8KICAgICAgICB9IGVs
c2UgaWYgKHN0cm5jbXAodGtuLCAiaXB2ND0iLCA1KSA9PSAwKSB7CiAgICAgICAgICAgIC8qIEJC
OiBkbyB3ZSBuZWVkIGl0IGlmIHdlIGhhdmUgaG9zdG5hbWUgYWxyZWFkeT8gKi8KICAgICAgICB9
IGVsc2UgaWYgKHN0cm5jbXAodGtuLCAiaXB2Nj0iLCA1KSA9PSAwKSB7Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>