Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rvdDW-00DFX5-9w for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Apr 2024 13:14:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rvdDU-004Msc-Ib for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Apr 2024 13:14:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rvdDT-004MsT-UJ for pgsql-hackers@lists.postgresql.org; Sat, 13 Apr 2024 13:14:48 +0000 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rvdDQ-002fAw-9z for pgsql-hackers@lists.postgresql.org; Sat, 13 Apr 2024 13:14:46 +0000 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-4dca51ef1cfso476159e0c.3 for ; Sat, 13 Apr 2024 06:14:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713014083; x=1713618883; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=R2cU2tq5wuUrnzLaQMaPRwjuQZTkrqdgSbzPvuqCY6U=; b=TMJJSrFScrhNa26ovWN9aRDassnSLAliz9Kh4zuZDUp5qTLo6IpBjvxOPiAKpFxEiD M9qj2aLhmBWiOMkMi2wxu5LlzFoXzpen0KikzbITkvy2u6rd9wn29yRZAXEkdHCMaMDE K62zGzu8CS5qllZHEfEZ/BUz5l3HxKLisOJT3Tr9L++/+DdTYD7MTFJQvwqVe+FyzKnV EdUbtoyugwQBxPGKAtzMCEvbmF8GSGofcimjSc91Y81LSZNb11xkfM39jqvBeuqA5PB4 z6ZCvg/7KrSln8oAGIuZyliT1S5tFdMCpjuJIAwLnwvYuzYhcYSWLycee2I3/STzZdwu 88lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713014083; x=1713618883; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=R2cU2tq5wuUrnzLaQMaPRwjuQZTkrqdgSbzPvuqCY6U=; b=EL4Lk9qYPgo39v6/nFbijVLqt7JuaIQcNOBDRUn7PUCXuwMYIIbuQZmWK1DAFPrDkb Kn6sZzIRP5WanG7kHwfa+FnIM3xCkDwhtweMAmW+vcp6OOzQpPsJkUeCJXyXfbzwU8EZ FTbZAh+LqNaOGUzpna2NFzgFIWgZSKWs4pNbnpgDBR6sqs4m9scqyHKi2mxuDO5535T9 uoLKkU+petYz2SECrC6ri31W9rDE2MUYI8mFOqm6hgKeFN8BbbHP9+7EPn5MLQyvN3hE xGgfYcoS2xGR/5toucSWsADHDGZHoy22o4nwvEWg1wBtMyneGlx2/jm8+1ka5zgP35hD 6M7A== X-Gm-Message-State: AOJu0Yw3o9kjLF2YbxhHQCfIXMo1l0i4V1x/98NFPbR0um6NB9DNsDTc TbxXj5YlAb3CweqnBagWY58LqdMI25FFMsHXLGKAHmk7l7vtucbEhoU2TH/nLyoI49VeTlkGZ3I XURz5oV6HMQzPLH66MPBu+vw262w= X-Google-Smtp-Source: AGHT+IE47nFjhF6orBFHXMWO/I53TBZoErXLM7xDXaaHL/kRqz0ZGHcXEaVh1ehjIlxKYE8fYT1MTyatA+moRPl42zA= X-Received: by 2002:a05:6102:38d2:b0:47a:40f9:5bb5 with SMTP id k18-20020a05610238d200b0047a40f95bb5mr6541645vst.22.1713014081583; Sat, 13 Apr 2024 06:14:41 -0700 (PDT) MIME-Version: 1.0 References: <78d824e0-b21e-480d-a252-e4b84bc2c24b@illuminatedcomputing.com> <69f0a887-a4ed-49cf-9d63-923891006658@illuminatedcomputing.com> In-Reply-To: From: jian he Date: Sat, 13 Apr 2024 21:13:00 +0800 Message-ID: Subject: Re: altering a column's collation leaves an invalid foreign key To: Paul Jungwirth Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d41cbf0615fa2b2e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d41cbf0615fa2b2e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 12, 2024 at 5:06=E2=80=AFPM jian he wrote: > > On Tue, Mar 26, 2024 at 1:00=E2=80=AFPM jian he wrote: > > > > On Mon, Mar 25, 2024 at 2:47=E2=80=AFPM Paul Jungwirth > > wrote: > > > > > > On 3/23/24 10:04, Paul Jungwirth wrote: > > > > Perhaps if the previous collation was nondeterministic we should fo= rce a re-check. > > > > > > Here is a patch implementing this. It was a bit more fuss than I expe= cted, so maybe someone has a > > > better way. I think I found a simple way. the logic is: * ATExecAlterColumnType changes one column once at a time. * one column can only have one collation. so we don't need to store a list of collation oid. * ATExecAlterColumnType we can get the new collation (targetcollid) and original collation info. * RememberAllDependentForRebuilding will check the column dependent, whether this column is referenced by a foreign key or not information is recorded. so AlteredTableInfo->changedConstraintOids have the primary key and foreign key oids. * ATRewriteCatalogs will call ATPostAlterTypeCleanup (see the comments in ATRewriteCatalogs) * for tab->changedConstraintOids (foreign key, primary key) will call ATPostAlterTypeParse, so for foreign key (con->contype =3D=3D CONSTR_FOREIGN) will call TryReuseFor= eignKey. * in TryReuseForeignKey, we can pass the information that our primary key old collation is nondeterministic and old collation !=3D new collation to the foreign key constraint. so foreign key can act accordingly at ATAddForeignKeyConstraint (old_check_= ok). based on the above logic, I add one bool in struct AlteredTableInfo, one bool in struct Constraint. bool in AlteredTableInfo is for storing it, later passing it to struct Constraint. we need bool in Constraint because ATAddForeignKeyConstraint needs it. --000000000000d41cbf0615fa2b2e Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-ALTER-COLUMN-SET-DATA-TYPE-Re-check-foreign-key-t.patch" Content-Disposition: attachment; filename="v3-0001-ALTER-COLUMN-SET-DATA-TYPE-Re-check-foreign-key-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_luy3wvfg0 RnJvbSAwZWIwODQ2NDUwY2IzMzk5NmQ2ZmIzNWMxOTI5MGQyOTdjMjZmZDNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMTMgQXByIDIwMjQgMjA6Mjg6MjUgKzA4MDAKU3ViamVjdDogW1BBVENIIHYz IDEvMV0gQUxURVIgQ09MVU1OIFNFVCBEQVRBIFRZUEUgUmUtY2hlY2sgZm9yZWlnbiBrZXkgdGll cwogdW5kZXIgY2VydGFpbiBjb25kaXRpb24KCndpdGggZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25z LCB3ZSBjaGVjayB0aWVzIGJ5IGxvb2tpbmcgYXQgYmluYXJ5CmVxdWFsaXR5LiBCdXQgbm9uZGV0 ZXJtaW5pc3RpYyBjb2xsYXRpb24gY2FuIGFsbG93IG5vbi1pZGVudGljYWwgdmFsdWVzCnRvIGJl IGNvbnNpZGVyZWQgZXF1YWwsIGUuZy4gJ2EnIGFuZCAnQScgd2hlbiBjYXNlLWluc2Vuc2l0aXZl LgpBTFRFUiBDT0xVTU4gLi4gU0VUIERBVEEgVFlQRSBtYWtlCnNvbWUgcmVmZXJlbmNlcyB0aGF0 IHVzZWQgdG8gYmUgdmFsaWQgbWF5IG5vdCBiZSBhbnltb3JlLgoKZm9yIGBBTFRFUiBDT0xVTU4g Li4gU0VUIERBVEEgVFlQRWA6CklmIHRoZSBjaGFuZ2VkIGtleSBjb2x1bW5zIGlzIHBhcnQgb2Yg dGhlIHByaW1hcnkga2V5IGNvbHVtbnMsCnRoZW4gdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRp b24Kd2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50OgoqIHRo ZSBwcmltYXJ5IGtleSBpcyByZWZlcmVuY2VkIGJ5IGEgZm9yZWlnbiBrZXkgY29uc3RyYWludAoq IHRoZSBuZXcgY29sbGF0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb2xkCiogdGhlIG9sZCBj b2xsYXRpb24gaXMgbm9uZGV0ZXJtaW5pc3RpYy4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vNzhkODI0ZTAtYjIxZS00ODBkLWEyNTItZTRiODRiYzJjMjRiJTQwaWxsdW1pbmF0ZWRj b21wdXRpbmcuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAg ICAgICAgIHwgNjIgKysrKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oICAgICAgICAgICAgICAgIHwgIDMgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2NvbGxh dGUuaWN1LnV0Zjgub3V0ICAgICB8ICA5ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0 ZS5pY3UudXRmOC5zcWwgICAgIHwgIDggKysrCiA0IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlv bnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMDAw MjEyZjIuLmQ1YmQ2MWYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTk4LDYgKzE5 OCw3IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyZWRUYWJsZUluZm8KIAkvKiBPYmplY3RzIHRvIHJl YnVpbGQgYWZ0ZXIgY29tcGxldGluZyBBTFRFUiBUWVBFIG9wZXJhdGlvbnMgKi8KIAlMaXN0CSAg ICpjaGFuZ2VkQ29uc3RyYWludE9pZHM7CS8qIE9JRHMgb2YgY29uc3RyYWludHMgdG8gcmVidWls ZCAqLwogCUxpc3QJICAgKmNoYW5nZWRDb25zdHJhaW50RGVmczsJLyogc3RyaW5nIGRlZmluaXRp b25zIG9mIHNhbWUgKi8KKwlib29sCQl2ZXJpZnlfbmV3X2NvbGxhdGlvbjsgLyogVCBpZiB3ZSBz aG91bGQgcmVjaGVjayBuZXcgY29sbGF0aW9uIGZvciBmb3JlaWduIGtleSAqLwogCUxpc3QJICAg KmNoYW5nZWRJbmRleE9pZHM7CS8qIE9JRHMgb2YgaW5kZXhlcyB0byByZWJ1aWxkICovCiAJTGlz dAkgICAqY2hhbmdlZEluZGV4RGVmczsJLyogc3RyaW5nIGRlZmluaXRpb25zIG9mIHNhbWUgKi8K IAljaGFyCSAgICpyZXBsaWNhSWRlbnRpdHlJbmRleDsJLyogaW5kZXggdG8gcmVzZXQgYXMgUkVQ TElDQSBJREVOVElUWSAqLwpAQCAtNTgzLDEyICs1ODQsMTMgQEAgc3RhdGljIHZvaWQgQVRQb3N0 QWx0ZXJUeXBlQ2xlYW51cChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJ CQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0YXRpYyB2b2lkIEFUUG9zdEFsdGVyVHlw ZVBhcnNlKE9pZCBvbGRJZCwgT2lkIG9sZFJlbElkLCBPaWQgcmVmUmVsSWQsCiAJCQkJCQkJCSBj aGFyICpjbWQsIExpc3QgKip3cXVldWUsIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJCQkgYm9v bCByZXdyaXRlKTsKKwkJCQkJCQkJIGJvb2wgcmV3cml0ZSwKKwkJCQkJCQkJIGJvb2wgdmVyaWZ5 X25ld19jb2xsYXRpb24pOwogc3RhdGljIHZvaWQgUmVidWlsZENvbnN0cmFpbnRDb21tZW50KEFs dGVyZWRUYWJsZUluZm8gKnRhYiwgQWx0ZXJUYWJsZVBhc3MgcGFzcywKIAkJCQkJCQkJCSBPaWQg b2JqaWQsIFJlbGF0aW9uIHJlbCwgTGlzdCAqZG9tbmFtZSwKIAkJCQkJCQkJCSBjb25zdCBjaGFy ICpjb25uYW1lKTsKIHN0YXRpYyB2b2lkIFRyeVJldXNlSW5kZXgoT2lkIG9sZElkLCBJbmRleFN0 bXQgKnN0bXQpOwotc3RhdGljIHZvaWQgVHJ5UmV1c2VGb3JlaWduS2V5KE9pZCBvbGRJZCwgQ29u c3RyYWludCAqY29uKTsKK3N0YXRpYyB2b2lkIFRyeVJldXNlRm9yZWlnbktleShPaWQgb2xkSWQs IENvbnN0cmFpbnQgKmNvbiwgYm9vbCB2ZXJpZnlfbmV3X2NvbGxhdGlvbik7CiBzdGF0aWMgT2Jq ZWN0QWRkcmVzcyBBVEV4ZWNBbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zKFJlbGF0aW9uIHJlbCwg Y29uc3QgY2hhciAqY29sTmFtZSwKIAkJCQkJCQkJCQkJCQkgTGlzdCAqb3B0aW9ucywgTE9DS01P REUgbG9ja21vZGUpOwogc3RhdGljIHZvaWQgY2hhbmdlX293bmVyX2ZpeF9jb2x1bW5fYWNscyhP aWQgcmVsYXRpb25PaWQsCkBAIC0xMDI1Niw2ICsxMDI1OCwxNSBAQCBBVEFkZEZvcmVpZ25LZXlD b25zdHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24g cmVsLAogCQkJCQkJCQkJb2xkX3BmZXFvcF9pdGVtKTsKIAkJfQogCQlpZiAob2xkX2NoZWNrX29r KQorCQl7CisJCQkvKiBhbHNvIHNlZSBUcnlSZXVzZUZvcmVpZ25LZXkuCisJCQkgKiBjb2xsYXRp b25fcmVjaGVjayBpcyB0cnVlIG1lYW5zIHRoYXQsIHdlIG5lZWQgdG8KKwkJCSAqIHJlY2hlY2sg dGhlIGZvcmVpZ24ga2V5IHNpZGUgdmFsdWUgaXMgb2sgd2l0aCB0aGUKKwkJCSAqIG5ldyBwcmlt ZXkga2V5IGNvbGxhdGlvbi4KKwkJCSovCisJCQlvbGRfY2hlY2tfb2sgPSAhZmtjb25zdHJhaW50 LT5jb2xsYXRpb25fcmVjaGVjazsKKwkJfQorCQlpZiAob2xkX2NoZWNrX29rKQogCQl7CiAJCQlP aWQJCQlvbGRfZmt0eXBlOwogCQkJT2lkCQkJbmV3X2ZrdHlwZTsKQEAgLTEwMzAxLDEwICsxMDMx Miw2IEBAIEFUQWRkRm9yZWlnbktleUNvbnN0cmFpbnQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRh YmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJCQkgKiB0dXJuIGNvbmZvcm0gdG8gdGhlIGRv bWFpbi4gIENvbnNlcXVlbnRseSwgd2UgbmVlZCBub3QgdHJlYXQKIAkJCSAqIGRvbWFpbnMgc3Bl Y2lhbGx5IGhlcmUuCiAJCQkgKgotCQkJICogU2luY2Ugd2UgcmVxdWlyZSB0aGF0IGFsbCBjb2xs YXRpb25zIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZgotCQkJICogZXF1YWxpdHkgKHdoaWNoIHRo ZXkgZG8sIGJlY2F1c2UgdGV4dGVxIHJlZHVjZXMgdG8gYml0d2lzZQotCQkJICogZXF1YWxpdHkp LCB3ZSBkb24ndCBjb21wYXJlIGNvbGxhdGlvbiBoZXJlLgotCQkJICoKIAkJCSAqIFdlIG5lZWQg bm90IGRpcmVjdGx5IGNvbnNpZGVyIHRoZSBQSyB0eXBlLiAgSXQncyBuZWNlc3NhcmlseQogCQkJ ICogYmluYXJ5IGNvZXJjaWJsZSB0byB0aGUgb3BjaW50eXBlIG9mIHRoZSB1bmlxdWUgaW5kZXgg Y29sdW1uLAogCQkJICogYW5kIHJpX3RyaWdnZXJzLmMgd2lsbCBvbmx5IGRlYWwgd2l0aCBQSyBk YXR1bXMgaW4gdGVybXMgb2YKQEAgLTEzNzM4LDYgKzEzNzQ1LDMwIEBAIEFURXhlY0FsdGVyQ29s dW1uVHlwZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkvKiBBbmQgdGhl IGNvbGxhdGlvbiAqLwogCXRhcmdldGNvbGxpZCA9IEdldENvbHVtbkRlZkNvbGxhdGlvbihOVUxM LCBkZWYsIHRhcmdldHR5cGUpOwogCisJaWYgKE9pZElzVmFsaWQodGFyZ2V0Y29sbGlkKSkKKwl7 CisJCU9pZAkJCXR5cGlkOworCQlpbnQzMgkJdHlwbW9kOworCQlPaWQJCQljb2xsaWQ7CisKKwkJ Z2V0X2F0dHR5cGV0eXBtb2Rjb2xsKFJlbGF0aW9uR2V0UmVsaWQodGFiLT5yZWwpLCBhdHRudW0s CisJCQkJCQkJJnR5cGlkLCAmdHlwbW9kLCAmY29sbGlkKTsKKwkJLyoKKwkJKiBBbGwgZGV0ZXJt aW5pc3RpYyBjb2xsYXRpb25zIHVzZSBiaXR3aXNlIGVxdWFsaXR5IHRvIHJlc29sdmUKKwkJKiB0 aWVzLCBidXQgaWYgdGhlIHByZXZpb3VzKHNvdXJjZSkgY29sbGF0aW9uIHdhcyBpbmRldGVybWlu c3RpYywKKwkJKiBhbmQgcHJldmlvdXMgY29sbGF0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUg dGFyZ2V0IGNvbGxhdGlvbiB0aGVuCisJCSogd2UgbXVzdCByZS1jaGVjayB0aGUgZm9yZWlnbiBr ZXksIGJlY2F1c2Ugc29tZSByZWZlcmVuY2VzCisJCSogdGhhdCB1c2UgdG8gYmUgImVxdWFsIiBt YXkgbm90IGJlIGFueW1vcmUuIHdlIGZpcnN0IHN0b3JlIHRoaXMKKwkJKiBpbmZvcm1hdGlvbiBp biBBbHRlcmVkVGFibGVJbmZvLCBsYXRlciB3ZSBwYXNzIGl0IHRvIGZvcmVpZ24ga2V5CisJCSog Q29uc3RyYWludC4KKwkJKiBhbHNvIHNlZSBBVEFkZEZvcmVpZ25LZXlDb25zdHJhaW50LgorCQkq LworCQlpZiAoT2lkSXNWYWxpZChjb2xsaWQpKQorCQl7CisJCQlpZiAoIWdldF9jb2xsYXRpb25f aXNkZXRlcm1pbmlzdGljKGNvbGxpZCkgJiYgdGFyZ2V0Y29sbGlkICE9IGNvbGxpZCkKKwkJCQl0 YWItPnZlcmlmeV9uZXdfY29sbGF0aW9uID0gdHJ1ZTsKKwkJfQorCX0KIAkvKgogCSAqIElmIHRo ZXJlIGlzIGEgZGVmYXVsdCBleHByZXNzaW9uIGZvciB0aGUgY29sdW1uLCBnZXQgaXQgYW5kIGVu c3VyZSB3ZQogCSAqIGNhbiBjb2VyY2UgaXQgdG8gdGhlIG5ldyBkYXRhdHlwZS4gIChXZSBtdXN0 IGRvIHRoaXMgYmVmb3JlIGNoYW5naW5nCkBAIC0xNDQwNiw3ICsxNDQzNyw4IEBAIEFUUG9zdEFs dGVyVHlwZUNsZWFudXAoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBMT0NL TU9ERSBsb2NrbW9kZSkKIAogCQlBVFBvc3RBbHRlclR5cGVQYXJzZShvbGRJZCwgcmVsaWQsIGNv bmZyZWxpZCwKIAkJCQkJCQkgKGNoYXIgKikgbGZpcnN0KGRlZl9pdGVtKSwKLQkJCQkJCQkgd3F1 ZXVlLCBsb2NrbW9kZSwgdGFiLT5yZXdyaXRlKTsKKwkJCQkJCQkgd3F1ZXVlLCBsb2NrbW9kZSwg dGFiLT5yZXdyaXRlLAorCQkJCQkJCSB0YWItPnZlcmlmeV9uZXdfY29sbGF0aW9uKTsKIAl9CiAJ Zm9yYm90aChvaWRfaXRlbSwgdGFiLT5jaGFuZ2VkSW5kZXhPaWRzLAogCQkJZGVmX2l0ZW0sIHRh Yi0+Y2hhbmdlZEluZGV4RGVmcykKQEAgLTE0NDE3LDcgKzE0NDQ5LDggQEAgQVRQb3N0QWx0ZXJU eXBlQ2xlYW51cChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIExPQ0tNT0RF IGxvY2ttb2RlKQogCQlyZWxpZCA9IEluZGV4R2V0UmVsYXRpb24ob2xkSWQsIGZhbHNlKTsKIAkJ QVRQb3N0QWx0ZXJUeXBlUGFyc2Uob2xkSWQsIHJlbGlkLCBJbnZhbGlkT2lkLAogCQkJCQkJCSAo Y2hhciAqKSBsZmlyc3QoZGVmX2l0ZW0pLAotCQkJCQkJCSB3cXVldWUsIGxvY2ttb2RlLCB0YWIt PnJld3JpdGUpOworCQkJCQkJCSB3cXVldWUsIGxvY2ttb2RlLCB0YWItPnJld3JpdGUsCisJCQkJ CQkJIHRhYi0+dmVyaWZ5X25ld19jb2xsYXRpb24pOwogCiAJCU9iamVjdEFkZHJlc3NTZXQob2Jq LCBSZWxhdGlvblJlbGF0aW9uSWQsIG9sZElkKTsKIAkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNz KCZvYmosIG9iamVjdHMpOwpAQCAtMTQ0MzMsNyArMTQ0NjYsOCBAQCBBVFBvc3RBbHRlclR5cGVD bGVhbnVwKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgTE9DS01PREUgbG9j a21vZGUpCiAJCXJlbGlkID0gU3RhdGlzdGljc0dldFJlbGF0aW9uKG9sZElkLCBmYWxzZSk7CiAJ CUFUUG9zdEFsdGVyVHlwZVBhcnNlKG9sZElkLCByZWxpZCwgSW52YWxpZE9pZCwKIAkJCQkJCQkg KGNoYXIgKikgbGZpcnN0KGRlZl9pdGVtKSwKLQkJCQkJCQkgd3F1ZXVlLCBsb2NrbW9kZSwgdGFi LT5yZXdyaXRlKTsKKwkJCQkJCQkgd3F1ZXVlLCBsb2NrbW9kZSwgdGFiLT5yZXdyaXRlLAorCQkJ CQkJCSB0YWItPnZlcmlmeV9uZXdfY29sbGF0aW9uKTsKIAogCQlPYmplY3RBZGRyZXNzU2V0KG9i aiwgU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgb2xkSWQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2Fk ZHJlc3MoJm9iaiwgb2JqZWN0cyk7CkBAIC0xNDQ5Niw3ICsxNDUzMCw4IEBAIEFUUG9zdEFsdGVy VHlwZUNsZWFudXAoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBMT0NLTU9E RSBsb2NrbW9kZSkKICAqLwogc3RhdGljIHZvaWQKIEFUUG9zdEFsdGVyVHlwZVBhcnNlKE9pZCBv bGRJZCwgT2lkIG9sZFJlbElkLCBPaWQgcmVmUmVsSWQsIGNoYXIgKmNtZCwKLQkJCQkJIExpc3Qg Kip3cXVldWUsIExPQ0tNT0RFIGxvY2ttb2RlLCBib29sIHJld3JpdGUpCisJCQkJCSBMaXN0ICoq d3F1ZXVlLCBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCByZXdyaXRlLAorCQkJCQkgYm9vbCB2ZXJp ZnlfbmV3X2NvbGxhdGlvbikKIHsKIAlMaXN0CSAgICpyYXdfcGFyc2V0cmVlX2xpc3Q7CiAJTGlz dAkgICAqcXVlcnl0cmVlX2xpc3Q7CkBAIC0xNDYyMyw3ICsxNDY1OCw3IEBAIEFUUG9zdEFsdGVy VHlwZVBhcnNlKE9pZCBvbGRJZCwgT2lkIG9sZFJlbElkLCBPaWQgcmVmUmVsSWQsIGNoYXIgKmNt ZCwKIAkJCQkJLyogcmV3cml0aW5nIG5laXRoZXIgc2lkZSBvZiBhIEZLICovCiAJCQkJCWlmIChj b24tPmNvbnR5cGUgPT0gQ09OU1RSX0ZPUkVJR04gJiYKIAkJCQkJCSFyZXdyaXRlICYmIHRhYi0+ cmV3cml0ZSA9PSAwKQotCQkJCQkJVHJ5UmV1c2VGb3JlaWduS2V5KG9sZElkLCBjb24pOworCQkJ CQkJVHJ5UmV1c2VGb3JlaWduS2V5KG9sZElkLCBjb24sIHZlcmlmeV9uZXdfY29sbGF0aW9uKTsK IAkJCQkJY29uLT5yZXNldF9kZWZhdWx0X3RibHNwYyA9IHRydWU7CiAJCQkJCWNtZC0+c3VidHlw ZSA9IEFUX1JlQWRkQ29uc3RyYWludDsKIAkJCQkJdGFiLT5zdWJjbWRzW0FUX1BBU1NfT0xEX0NP TlNUUl0gPQpAQCAtMTQ3ODQsNyArMTQ4MTksNyBAQCBUcnlSZXVzZUluZGV4KE9pZCBvbGRJZCwg SW5kZXhTdG10ICpzdG10KQogICogdGhpcyBjb25zdHJhaW50IGNhbiBiZSBza2lwcGVkLgogICov CiBzdGF0aWMgdm9pZAotVHJ5UmV1c2VGb3JlaWduS2V5KE9pZCBvbGRJZCwgQ29uc3RyYWludCAq Y29uKQorVHJ5UmV1c2VGb3JlaWduS2V5KE9pZCBvbGRJZCwgQ29uc3RyYWludCAqY29uLCBib29s IHZlcmlmeV9uZXdfY29sbGF0aW9uKQogewogCUhlYXBUdXBsZQl0dXA7CiAJRGF0dW0JCWFkYXR1 bTsKQEAgLTE0ODE2LDYgKzE0ODUxLDkgQEAgVHJ5UmV1c2VGb3JlaWduS2V5KE9pZCBvbGRJZCwg Q29uc3RyYWludCAqY29uKQogCQljb24tPm9sZF9jb25wZmVxb3AgPSBsYXBwZW5kX29pZChjb24t Pm9sZF9jb25wZmVxb3AsIHJhd2FycltpXSk7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwor CS8qIHZlcmlmeV9uZXdfY29sbGF0aW9uIGlzIGNvbXB1dGVkIGF0IEFURXhlY0FsdGVyQ29sdW1u VHlwZSAqLworCWNvbi0+Y29sbGF0aW9uX3JlY2hlY2sgPSB2ZXJpZnlfbmV3X2NvbGxhdGlvbjsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBmNzYzZjc5MC4uMDM0OWM2MWMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTI3NzcsNyArMjc3Nyw4IEBAIHR5cGVkZWYgc3RydWN0 IENvbnN0cmFpbnQKIAlMaXN0CSAgICpvbGRfY29ucGZlcW9wOwkvKiBwZ19jb25zdHJhaW50LmNv bnBmZXFvcCBvZiBteSBmb3JtZXIgc2VsZiAqLwogCU9pZAkJCW9sZF9wa3RhYmxlX29pZDsJLyog cGdfY29uc3RyYWludC5jb25mcmVsaWQgb2YgbXkgZm9ybWVyCiAJCQkJCQkJCQkgKiBzZWxmICov Ci0KKwlib29sCQljb2xsYXRpb25fcmVjaGVjazsgLyogZG9lcyBwcmltYXJ5IGtleSBjb2x1bW5z IGNvbGxhdGlvbiBjaGFuZ2UgbmVlZAorCQkJCQkJCQkJKiBmb3JlaWduIGtleSBjb25zdHJhaW50 IHJlY2hlY2sgKi8KIAlQYXJzZUxvYwlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAt MSBpZiB1bmtub3duICovCiB9IENvbnN0cmFpbnQ7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CmluZGV4IDRiOGM4ZjE0Li40MTE5Nzc2ZiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CkBAIC0x OTMzLDYgKzE5MzMsMTUgQEAgU0VMRUNUICogRlJPTSB0ZXN0MTFmazsKIC0tLQogKDAgcm93cykK IAorLS0gVGVzdCBhbHRlcmluZyB0aGUgY29sbGF0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGNvbHVt bi4KK0NSRUFURSBUQUJMRSBwa3RhYmxlICh4IHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZl IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBma3RhYmxlICh4IHRleHQgUkVGRVJFTkNFUyBw a3RhYmxlKTsKK0lOU0VSVCBJTlRPIHBrdGFibGUgVkFMVUVTICgnYScpOworSU5TRVJUIElOVE8g Zmt0YWJsZSBWQUxVRVMgKCdBJyk7CistLSBzaG91bGQgZmFpbDoKK0FMVEVSIFRBQkxFIHBrdGFi bGUgQUxURVIgQ09MVU1OIHggVFlQRSB0ZXh0IENPTExBVEUgIkMiOworRVJST1I6ICBpbnNlcnQg b3IgdXBkYXRlIG9uIHRhYmxlICJma3RhYmxlIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJh aW50ICJma3RhYmxlX3hfZmtleSIKK0RFVEFJTDogIEtleSAoeCk9KEEpIGlzIG5vdCBwcmVzZW50 IGluIHRhYmxlICJwa3RhYmxlIi4KIC0tIHBhcnRpdGlvbmluZwogQ1JFQVRFIFRBQkxFIHRlc3Qy MCAoYSBpbnQsIGIgdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpIFBBUlRJVElPTiBCWSBM SVNUIChiKTsKIENSRUFURSBUQUJMRSB0ZXN0MjBfMSBQQVJUSVRJT04gT0YgdGVzdDIwIEZPUiBW QUxVRVMgSU4gKCdhYmMnKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxh dGUuaWN1LnV0Zjguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5z cWwKaW5kZXggODBmMjhhOTcuLjA4YTY5NjQ5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xs YXRlLmljdS51dGY4LnNxbApAQCAtNzIxLDYgKzcyMSwxNCBAQCBERUxFVEUgRlJPTSB0ZXN0MTFw ayBXSEVSRSB4ID0gJ2FiYyc7CiBTRUxFQ1QgKiBGUk9NIHRlc3QxMXBrOwogU0VMRUNUICogRlJP TSB0ZXN0MTFmazsKIAorLS0gVGVzdCBhbHRlcmluZyB0aGUgY29sbGF0aW9uIG9mIHRoZSByZWZl cmVuY2VkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwa3RhYmxlICh4IHRleHQgQ09MTEFURSBjYXNl X2luc2Vuc2l0aXZlIFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBma3RhYmxlICh4IHRleHQg UkVGRVJFTkNFUyBwa3RhYmxlKTsKK0lOU0VSVCBJTlRPIHBrdGFibGUgVkFMVUVTICgnYScpOwor SU5TRVJUIElOVE8gZmt0YWJsZSBWQUxVRVMgKCdBJyk7CistLSBzaG91bGQgZmFpbDoKK0FMVEVS IFRBQkxFIHBrdGFibGUgQUxURVIgQ09MVU1OIHggVFlQRSB0ZXh0IENPTExBVEUgIkMiOworCiAt LSBwYXJ0aXRpb25pbmcKIENSRUFURSBUQUJMRSB0ZXN0MjAgKGEgaW50LCBiIHRleHQgQ09MTEFU RSBjYXNlX2luc2Vuc2l0aXZlKSBQQVJUSVRJT04gQlkgTElTVCAoYik7CiBDUkVBVEUgVEFCTEUg dGVzdDIwXzEgUEFSVElUSU9OIE9GIHRlc3QyMCBGT1IgVkFMVUVTIElOICgnYWJjJyk7CgpiYXNl LWNvbW1pdDogNGNjMWM3NmZlOWYxM2FhOTZiYWUxNGY0ZmNmZGY2ZDUwOGFmNzJhNAotLSAKMi4z NC4xCgo= --000000000000d41cbf0615fa2b2e--