From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id BE1943899002 for ; Thu, 22 Jul 2021 16:25:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BE1943899002 Received: from mail-io1-f71.google.com (mail-io1-f71.google.com [209.85.166.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-527-j3CT3g_8NL-1q98vBJc7Qg-1; Thu, 22 Jul 2021 12:25:16 -0400 X-MC-Unique: j3CT3g_8NL-1q98vBJc7Qg-1 Received: by mail-io1-f71.google.com with SMTP id h7-20020a6bb7070000b0290525efa1b760so4336614iof.16 for ; Thu, 22 Jul 2021 09:25:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=Z8gZwqLxSxPgF/wqXgsFVN0RI9ozCaVXc/xNFppu81o=; b=SD+CcN+Jpy96Bj7x+cZypIfEcZSCH8ukZsF49i0Z794dsZsd6ZhjiKx/1fIB6iHSt5 1DHtJPUMll8MdJ+quwFHtf2fpqKuf4jhW8nRnFFc1rittuP85sqMcjEH+yv1q9P+aPjW IkLcoCTekt5DbhfINzbVtXxNH8ilpKj74sTlK01IsUFijwHrU+QkytapgTjBNC0jkYGW WBn1AR5ci3niVvMZjFsjcr8gwy52Q8sH0Ax5YvQKus8ZxubB9YZo/OvtzCyXliqxOAwH IhTuvSCHRphpc+mlPFiQSnIUabZ91T26UhsmLdfMveEQfoSab9CieiQhh4yS1QgV/JyI 42SA== X-Gm-Message-State: AOAM530HCYzf6VaelNa+mmZJFNGZ4l3HxNkIDF7wSJsYJrgNggjaaLgZ Ym/F758KPE0KMxbrwJmZHaBYsGBQJSBNIGjHpJmnW2W2iCvaFn+nuROj7aKQnrtqdlgUSTik0qv uhmMtkGCDTm2mvV4LM2LSc38jXs3S2+RaU4xxRajYqw== X-Received: by 2002:a05:6e02:1a67:: with SMTP id w7mr416959ilv.175.1626971115422; Thu, 22 Jul 2021 09:25:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxTW/APWqEe4Q/iWtbTB9eyd1FxFaRbfuJv7PPKsb0Xk3LVTqFHCKfhqcjHx2jJkn6/32re0T9txIzFlehLNhE= X-Received: by 2002:a05:6e02:1a67:: with SMTP id w7mr416945ilv.175.1626971115246; Thu, 22 Jul 2021 09:25:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Noah Sanci Date: Thu, 22 Jul 2021 12:25:04 -0400 Message-ID: Subject: Re: [Bug debuginfod/27983] ignore duplicate urls To: elfutils-devel@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000062b82c05c7b8bbaf" X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_BADIPHTTP, KAM_SHORT, NUMERIC_HTTP_ADDR, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jul 2021 16:25:22 -0000 --00000000000062b82c05c7b8bbaf Content-Type: text/plain; charset="UTF-8" Hello Please find the updated solution of PR27983 attached. Noah Noah On Tue, Jul 20, 2021 at 10:42 AM Mark Wielaard wrote: > > Hi Noah, > > On Mon, Jul 19, 2021 at 09:31:17AM -0400, Noah Sanci wrote: > > On Wed, Jul 14, 2021 at 12:36 PM Mark Wielaard wrote: > > > You deduplicate the full URLs after they are fully constructed. Would > > > it make sense to do the deduplication on server_url, maybe even as > > > part of the Count number of URLs code? That might make the code > > > simpler. And you can change num_urls upfront. > > Deduplication before fully building the URL would work well, however I > > was concerned about the slashbuildid situation. I would need to alter > > all urls to either have a trailing '/' or no trailing '/' to ensure > > comparison between 'http://127.0.0.1:8000/' and 'http://127.0.0.1:8000' > > is considered equal. This is possible, but I ultimately decided to > > wait until full construction as those issues would have been handled. > > I would be glad to make the change if you want. > > I see what you mean, we have: > > /* Build handle url. Tolerate both http://foo:999 and > http://foo:999/ forms */ > char *slashbuildid; > if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/') > slashbuildid = "buildid"; > else > slashbuildid = "/buildid"; > > I think the code could become simpler if we did the deduplication of > the server_url list up-front. That also gives you the oppertunity to > make sure all server_urls end with a slash. But if you think that is > too much work for this patch we can do it as a followup patch. You > already included a test, which makes checking such a refactoring > easier (sadly the run-debuginfod-find.sh test is somewhat fragile). > > > From be4e07a8732dd688595b99f92ba275ef5060a34d Mon Sep 17 00:00:00 2001 > > From: Noah Sanci > > Date: Fri, 9 Jul 2021 14:53:10 -0400 > > Subject: [PATCH] debuginfod: PR27983 - ignore duplicate urls > > > > Gazing at server logs, one sees a minority of clients who appear to have > > duplicate query traffic coming in: the same URL, milliseconds apart. > > Chances are the user accidentally doubled her $DEBUGINFOD_URLS somehow, > > and the client library is dutifully asking the servers TWICE. Bug #27863 > > reduces the pain on the servers' CPU, but dupe network traffic is still > > being paid. We should reject sending outright duplicate concurrent > > traffic. > > > > https://sourceware.org/bugzilla/show_bug.cgi?id=27983 > > > > diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c > > index f417b40a..a9447cae 100644 > > --- a/debuginfod/debuginfod-client.c > > +++ b/debuginfod/debuginfod-client.c > > @@ -795,6 +795,7 @@ debuginfod_query_server (debuginfod_client *c, > > > > char *strtok_saveptr; > > char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr); > > + int unduplicated_urls = 0; > > > > /* Initialize each handle. */ > > for (int i = 0; i < num_urls && server_url != NULL; i++) > > Maybe this should be: > > /* Initialize each handle. */ > int i = 0; > while (server_url != NULL) > > With an i++ at the end after the data[i] handle has been completely assigned. > See below (*) for why. > > > + char *tmp_url = calloc(PATH_MAX, sizeof(char)); > > This can fail. So you'll have to handle tmp_url == NULL. Otherwise > snprintf will crash. > > > if (filename) /* must start with / */ > > - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url, > > + snprintf(tmp_url, PATH_MAX, "%s%s/%s/%s%s", server_url, > > slashbuildid, build_id_bytes, type, filename); > > else > > - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url, > > + snprintf(tmp_url, PATH_MAX, "%s%s/%s/%s", server_url, > > slashbuildid, build_id_bytes, type); > > > > + /* PR 27983: If the url is already set to be used use, skip it */ > > + int url_index = -1; > > + for (url_index = 0; url_index < i; ++url_index) > > No need to initialize url_index twice. Just declar int url_index; it > will be assigned 0 at the next line. > > > + { > > + if(strcmp(tmp_url, data[url_index].url) == 0) > > + { > > + url_index = -1; > > + break; > > + } > > + } > > + if (url_index == -1) > > + { > > + if (vfd >= 0) > > + dprintf(vfd, "duplicate url: %s, skipping\n", tmp_url); > > + free(tmp_url); > > + // Ensure that next iteration doesn't skip over an index mid-array > > + i--; > > + server_url = strtok_r(NULL, url_delim, &strtok_saveptr); > > + continue; > > (*) this i--; confused me a little. Which is why I suggest turning > that for loop into a while loop. > > > + } > > + else > > + { > > + unduplicated_urls++; > > + strncpy(data[i].url, tmp_url, PATH_MAX); > > Both strings are max PATH_MAX chars, and tmp_url is zero terminated, > so you can use strcpy. > > > + rc = -ENETUNREACH; > > + goto out1; > > + } > > + data[i].client = c; > > curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url); > > if (vfd >= 0) > > curl_easy_setopt(data[i].handle, CURLOPT_ERRORBUFFER, data[i].errbuf); > > @@ -863,6 +889,7 @@ debuginfod_query_server (debuginfod_client *c, > > curl_multi_add_handle(curlm, data[i].handle); > > server_url = strtok_r(NULL, url_delim, &strtok_saveptr); > > (*) So here a i++ (so you don't need the i-- above). > > > } > > + num_urls = unduplicated_urls; > > > > /* Query servers in parallel. */ > > if (vfd >= 0) > > Cheers, > > Mark > --00000000000062b82c05c7b8bbaf Content-Type: text/x-patch; charset="US-ASCII"; name="0001-debuginfod-PR27983-ignore-duplicate-urls.patch" Content-Disposition: attachment; filename="0001-debuginfod-PR27983-ignore-duplicate-urls.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krf4l4350 RnJvbSA4NDExOGM1Njk1NGRlZWY4MTFlOTRkM2ExODhlYTk4OTQ0MzBmOTJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KRGF0ZTog RnJpLCA5IEp1bCAyMDIxIDE0OjUzOjEwIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gZGVidWdpbmZv ZDogUFIyNzk4MyAtIGlnbm9yZSBkdXBsaWNhdGUgdXJscwoKR2F6aW5nIGF0IHNlcnZlciBsb2dz LCBvbmUgc2VlcyBhIG1pbm9yaXR5IG9mIGNsaWVudHMgd2hvIGFwcGVhciB0byBoYXZlCmR1cGxp Y2F0ZSBxdWVyeSB0cmFmZmljIGNvbWluZyBpbjogdGhlIHNhbWUgVVJMLCBtaWxsaXNlY29uZHMg YXBhcnQuCkNoYW5jZXMgYXJlIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkb3VibGVkIGhlciAkREVC VUdJTkZPRF9VUkxTIHNvbWVob3csCmFuZCB0aGUgY2xpZW50IGxpYnJhcnkgaXMgZHV0aWZ1bGx5 IGFza2luZyB0aGUgc2VydmVycyBUV0lDRS4gQnVnICMyNzg2MwpyZWR1Y2VzIHRoZSBwYWluIG9u IHRoZSBzZXJ2ZXJzJyBDUFUsIGJ1dCBkdXBlIG5ldHdvcmsgdHJhZmZpYyBpcyBzdGlsbApiZWlu ZyBwYWlkLiAgV2Ugc2hvdWxkIHJlamVjdCBzZW5kaW5nIG91dHJpZ2h0IGR1cGxpY2F0ZSBjb25j dXJyZW50CnRyYWZmaWMuClRoZSB1cmxzIGFyZSBub3cgc2ltcGx5IHJlbW92ZWQgdXBvbiBmaW5k aW5nIGEgZHVwbGljYXRlIGFmdGVyIHVybApjb25zdHJ1Y3Rpb24uCgpodHRwczovL3NvdXJjZXdh cmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNzk4MwoKU2lnbmVkLW9mZi1ieTogTm9h aCBTYW5jaSA8bnNhbmNpQHJlZGhhdC5jb20+Ci0tLQogZGVidWdpbmZvZC9DaGFuZ2VMb2cgICAg ICAgICAgIHwgIDggKysrCiBkZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMgfCA5NyArKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiB0ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg ICAgICAgfCAgNSArKwogdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmluZC5zaCAgIHwgMTMgKysrKysK IDQgZmlsZXMgY2hhbmdlZCwgOTUgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZGVidWdpbmZvZC9DaGFuZ2VMb2cgYi9kZWJ1Z2luZm9kL0NoYW5nZUxvZwppbmRl eCBkOWQxMTczNy4uMjM1NDRkM2YgMTAwNjQ0Ci0tLSBhL2RlYnVnaW5mb2QvQ2hhbmdlTG9nCisr KyBiL2RlYnVnaW5mb2QvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAKKzIwMjEtMDctMDkgIE5v YWggU2FuY2kgIDxuc2FuY2lAcmVkaGF0LmNvbT4KKworCSogZGVidWdpbmZvZC1jbGllbnQuYyAo ZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIpOiBBcyBmdWxsLWxlbmd0aAorCXVybHMgYXJlIGdlbmVy YXRlZCB3aXRoIHN0YW5kYXJkaXplZCBmb3JtYXRzLCBpZ25vcmUgZHVwbGljYXRlcy4KKwlDcmVh dGVkIG91dDEgYW5kIGNoYW5nZWQgb3V0MiBlcnJvciBnb3Rvcy4gVXBkYXRlZCB1cmwgY3JlYXRp b24gcHJpbnQKKwlzdGF0ZW1lbnRzLgorCShnbG9iYWxzKTogUmVtb3ZlZCB1cmxfZGVsaW1fY2hh ciwgYXMgaXQgd2FzIG5vIGxvbmdlciB1c2VkLgorCiAyMDIxLTA2LTE4ICBNYXJrIFdpZWxhYXJk ICA8bWFya0BrbG9tcC5vcmc+CiAKIAkqIGRlYnVnaW5mb2QtY2xpZW50LmMgKGRlYnVnaW5mb2Rf YmVnaW4pOiBEb24ndCB1c2UgY2xpZW50IGlmCmRpZmYgLS1naXQgYS9kZWJ1Z2luZm9kL2RlYnVn aW5mb2QtY2xpZW50LmMgYi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMKaW5kZXggZjQx N2I0MGEuLjFhNjg3ODMxIDEwMDY0NAotLS0gYS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50 LmMKKysrIGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWNsaWVudC5jCkBAIC0xNTIsNyArMTUyLDYg QEAgc3RhdGljIGNvbnN0IGNoYXIgKmNhY2hlX3hkZ19uYW1lID0gImRlYnVnaW5mb2RfY2xpZW50 IjsKIAogLyogVVJMcyBvZiBkZWJ1Z2luZm9kcywgc2VwYXJhdGVkIGJ5IHVybF9kZWxpbS4gKi8K IHN0YXRpYyBjb25zdCBjaGFyICp1cmxfZGVsaW0gPSAgIiAiOwotc3RhdGljIGNvbnN0IGNoYXIg dXJsX2RlbGltX2NoYXIgPSAnICc7CiAKIC8qIFRpbWVvdXQgZm9yIGRlYnVnaW5mb2RzLCBpbiBz ZWNvbmRzICh0byBnZXQgYXQgbGVhc3QgMTAwSykuICovCiBzdGF0aWMgY29uc3QgbG9uZyBkZWZh dWx0X3RpbWVvdXQgPSA5MDsKQEAgLTc2MywxMyArNzYyLDYxIEBAIGRlYnVnaW5mb2RfcXVlcnlf c2VydmVyIChkZWJ1Z2luZm9kX2NsaWVudCAqYywKICAgICAgIGdvdG8gb3V0MDsKICAgICB9CiAK KworICAvKiBJbml0aWFsaXplIHRoZSBtZW1vcnkgdG8gemVybyAqLworICBjaGFyICpzdHJ0b2tf c2F2ZXB0cjsKKyAgY2hhciAqKnNlcnZlcl91cmxfbGlzdCA9IE5VTEw7CisgIGNoYXIgKnNlcnZl cl91cmwgPSBzdHJ0b2tfcihzZXJ2ZXJfdXJscywgdXJsX2RlbGltLCAmc3RydG9rX3NhdmVwdHIp OwogICAvKiBDb3VudCBudW1iZXIgb2YgVVJMcy4gICovCiAgIGludCBudW1fdXJscyA9IDA7Ci0g IGZvciAoaW50IGkgPSAwOyBzZXJ2ZXJfdXJsc1tpXSAhPSAnXDAnOyBpKyspCi0gICAgaWYgKHNl cnZlcl91cmxzW2ldICE9IHVybF9kZWxpbV9jaGFyCi0gICAgICAgICYmIChpID09IDAgfHwgc2Vy dmVyX3VybHNbaSAtIDFdID09IHVybF9kZWxpbV9jaGFyKSkKLSAgICAgIG51bV91cmxzKys7Ci0g IAorCisgIHdoaWxlIChzZXJ2ZXJfdXJsICE9IE5VTEwpCisgICAgeworICAgICAgLyogUFIgMjc5 ODM6IElmIHRoZSB1cmwgaXMgYWxyZWFkeSBzZXQgdG8gYmUgdXNlZCB1c2UsIHNraXAgaXQgKi8K KyAgICAgIGNoYXIgKnNsYXNoYnVpbGRpZDsKKyAgICAgIGlmIChzdHJsZW4oc2VydmVyX3VybCkg PiAxICYmIHNlcnZlcl91cmxbc3RybGVuKHNlcnZlcl91cmwpLTFdID09ICcvJykKKyAgICAgICAg c2xhc2hidWlsZGlkID0gImJ1aWxkaWQiOworICAgICAgZWxzZQorICAgICAgICBzbGFzaGJ1aWxk aWQgPSAiL2J1aWxkaWQiOworCisgICAgICBjaGFyICp0bXBfdXJsID0gY2FsbG9jKFBBVEhfTUFY LCBzaXplb2YoY2hhcikpOworICAgICAgc25wcmludGYodG1wX3VybCwgUEFUSF9NQVgsICIlcyVz Iiwgc2VydmVyX3VybCwKKyAgICAgICAgICAgICAgIHNsYXNoYnVpbGRpZCk7CisgICAgICBpbnQg dXJsX2luZGV4OworICAgICAgZm9yICh1cmxfaW5kZXggPSAwOyB1cmxfaW5kZXggPCBudW1fdXJs czsgKyt1cmxfaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICBpZihzdHJjbXAodG1wX3VybCwg c2VydmVyX3VybF9saXN0W3VybF9pbmRleF0pID09IDApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHVybF9pbmRleCA9IC0xOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgaWYgKHVybF9pbmRleCA9PSAtMSkKKyAgICAgICAgeworICAg ICAgICAgIGlmICh2ZmQgPj0gMCkKKyAgICAgICAgICAgIGRwcmludGYodmZkLCAiZHVwbGljYXRl IHVybDogJXMsIHNraXBwaW5nXG4iLCB0bXBfdXJsKTsKKyAgICAgICAgICBmcmVlKHRtcF91cmwp OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBudW1fdXJscysr OworICAgICAgICAgIHNlcnZlcl91cmxfbGlzdCA9IHJlYWxsb2NhcnJheShzZXJ2ZXJfdXJsX2xp c3QsIG51bV91cmxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YoY2hhciopKTsKKyAgICAgICAgICBpZiAoc2VydmVyX3VybF9saXN0ID09IE5VTEwpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKKyAgICAgICAgICAgICAg Z290byBvdXQxOworICAgICAgICAgICAgfQorICAgICAgICAgIHNlcnZlcl91cmxfbGlzdFtudW1f dXJscy0xXSA9IHN0cmR1cCh0bXBfdXJsKTsKKyAgICAgICAgICBpZiAoc2VydmVyX3VybF9saXN0 W251bV91cmxzLTFdID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJjID0g LUVOT01FTTsKKyAgICAgICAgICAgICAgZ290byBvdXQxOworICAgICAgICAgICAgfQorICAgICAg ICAgIGZyZWUgKHRtcF91cmwpOworICAgICAgICB9CisgICAgICBzZXJ2ZXJfdXJsID0gc3RydG9r X3IoTlVMTCwgdXJsX2RlbGltLCAmc3RydG9rX3NhdmVwdHIpOworICAgIH0KICAgQ1VSTE0gKmN1 cmxtID0gYy0+c2VydmVyX21oYW5kbGU7CiAgIGFzc2VydCAoY3VybG0gIT0gTlVMTCk7CiAgIApA QCAtNzkzLDEyICs4NDAsMTEgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2Rf Y2xpZW50ICpjLAogICAgICAgZGF0YVtpXS5lcnJidWZbMF0gPSAnXDAnOwogICAgIH0KIAotICBj aGFyICpzdHJ0b2tfc2F2ZXB0cjsKLSAgY2hhciAqc2VydmVyX3VybCA9IHN0cnRva19yKHNlcnZl cl91cmxzLCB1cmxfZGVsaW0sICZzdHJ0b2tfc2F2ZXB0cik7Ci0KICAgLyogSW5pdGlhbGl6ZSBl YWNoIGhhbmRsZS4gICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3VybHMgJiYgc2VydmVy X3VybCAhPSBOVUxMOyBpKyspCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3VybHM7IGkrKykK ICAgICB7CisgICAgICBpZiAoKHNlcnZlcl91cmwgPSBzZXJ2ZXJfdXJsX2xpc3RbaV0pID09IE5V TEwpCisgICAgICAgIGJyZWFrOwogICAgICAgaWYgKHZmZCA+PSAwKQogCWRwcmludGYgKHZmZCwg ImluaXQgc2VydmVyICVkICVzXG4iLCBpLCBzZXJ2ZXJfdXJsKTsKIApAQCAtODA4LDI1ICs4NTQs MTYgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2RfY2xpZW50ICpjLAogICAg ICAgaWYgKGRhdGFbaV0uaGFuZGxlID09IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICByYyA9 IC1FTkVUVU5SRUFDSDsKLSAgICAgICAgICBnb3RvIG91dDE7CisgICAgICAgICAgZ290byBvdXQy OwogICAgICAgICB9CiAgICAgICBkYXRhW2ldLmNsaWVudCA9IGM7CiAKICAgICAgIC8qIEJ1aWxk IGhhbmRsZSB1cmwuIFRvbGVyYXRlIGJvdGggIGh0dHA6Ly9mb286OTk5ICBhbmQKICAgICAgICAg IGh0dHA6Ly9mb286OTk5LyAgZm9ybXMgKi8KLSAgICAgIGNoYXIgKnNsYXNoYnVpbGRpZDsKLSAg ICAgIGlmIChzdHJsZW4oc2VydmVyX3VybCkgPiAxICYmIHNlcnZlcl91cmxbc3RybGVuKHNlcnZl cl91cmwpLTFdID09ICcvJykKLSAgICAgICAgc2xhc2hidWlsZGlkID0gImJ1aWxkaWQiOwotICAg ICAgZWxzZQotICAgICAgICBzbGFzaGJ1aWxkaWQgPSAiL2J1aWxkaWQiOwotCi0gICAgICBpZiAo ZmlsZW5hbWUpIC8qIG11c3Qgc3RhcnQgd2l0aCAvICovCi0gICAgICAgIHNucHJpbnRmKGRhdGFb aV0udXJsLCBQQVRIX01BWCwgIiVzJXMvJXMvJXMlcyIsIHNlcnZlcl91cmwsCi0gICAgICAgICAg ICAgICAgIHNsYXNoYnVpbGRpZCwgYnVpbGRfaWRfYnl0ZXMsIHR5cGUsIGZpbGVuYW1lKTsKKyAg ICAgIGlmIChmaWxlbmFtZSkKKyAgICAgICAgc25wcmludGYoZGF0YVtpXS51cmwsIFBBVEhfTUFY LCAiJXMvJXMvJXMlcyIsIHNlcnZlcl91cmwsIGJ1aWxkX2lkX2J5dGVzLCB0eXBlLCBmaWxlbmFt ZSk7CiAgICAgICBlbHNlCi0gICAgICAgIHNucHJpbnRmKGRhdGFbaV0udXJsLCBQQVRIX01BWCwg IiVzJXMvJXMvJXMiLCBzZXJ2ZXJfdXJsLAotICAgICAgICAgICAgICAgICBzbGFzaGJ1aWxkaWQs IGJ1aWxkX2lkX2J5dGVzLCB0eXBlKTsKLQorICAgICAgICBzbnByaW50ZihkYXRhW2ldLnVybCwg UEFUSF9NQVgsICIlcy8lcy8lcyIsIHNlcnZlcl91cmwsIGJ1aWxkX2lkX2J5dGVzLCB0eXBlKTsK ICAgICAgIGlmICh2ZmQgPj0gMCkKIAlkcHJpbnRmICh2ZmQsICJ1cmwgJWQgJXNcbiIsIGksIGRh dGFbaV0udXJsKTsKIApAQCAtODYxLDcgKzg5OCw2IEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVy IChkZWJ1Z2luZm9kX2NsaWVudCAqYywKICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0YVtpXS5o YW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgYy0+aGVhZGVycyk7CiAKICAgICAgIGN1cmxfbXVs dGlfYWRkX2hhbmRsZShjdXJsbSwgZGF0YVtpXS5oYW5kbGUpOwotICAgICAgc2VydmVyX3VybCA9 IHN0cnRva19yKE5VTEwsIHVybF9kZWxpbSwgJnN0cnRva19zYXZlcHRyKTsKICAgICB9CiAKICAg LyogUXVlcnkgc2VydmVycyBpbiBwYXJhbGxlbC4gICovCkBAIC05MDUsNyArOTQxLDcgQEAgZGVi dWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2RfY2xpZW50ICpjLAogICAgICAgICAgICAg Y2FzZSBDVVJMTV9PVVRfT0ZfTUVNT1JZOiByYyA9IC1FTk9NRU07IGJyZWFrOwogICAgICAgICAg ICAgZGVmYXVsdDogcmMgPSAtRU5FVFVOUkVBQ0g7IGJyZWFrOwogICAgICAgICAgICAgfQotICAg ICAgICAgIGdvdG8gb3V0MTsKKyAgICAgICAgICBnb3RvIG91dDI7CiAgICAgICAgIH0KIAogICAg ICAgaWYgKGMtPnByb2dyZXNzZm4pIC8qIGluZm9ybS9jaGVjayBwcm9ncmVzcyBjYWxsYmFjayAq LwpAQCAtMTA3NSw3ICsxMTExLDcgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5m b2RfY2xpZW50ICpjLAogICAgIH0KIAogICBpZiAodmVyaWZpZWRfaGFuZGxlID09IE5VTEwpCi0g ICAgZ290byBvdXQxOworICAgIGdvdG8gb3V0MjsKIAogICBpZiAodmZkID49IDApCiAgICAgewpA QCAtMTEwNCw3ICsxMTQwLDcgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2Rf Y2xpZW50ICpjLAogICBpZiAocmMgPCAwKQogICAgIHsKICAgICAgIHJjID0gLWVycm5vOwotICAg ICAgZ290byBvdXQxOworICAgICAgZ290byBvdXQyOwogICAgICAgLyogUGVyaGFwcyB3ZSBuZWVk IG5vdCBnaXZlIHVwIHJpZ2h0IGF3YXk7IGNvdWxkIHJldHJ5IG9yIHNvbWV0aGluZyAuLi4gKi8K ICAgICB9CiAKQEAgLTExMjcsNyArMTE2Myw3IEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChk ZWJ1Z2luZm9kX2NsaWVudCAqYywKICAgZ290byBvdXQ7CiAKIC8qIGVycm9yIGV4aXRzICovCi0g b3V0MToKKyBvdXQyOgogICAvKiByZW1vdmUgYWxsIGhhbmRsZXMgZnJvbSBtdWx0aSAqLwogICBm b3IgKGludCBpID0gMDsgaSA8IG51bV91cmxzOyBpKyspCiAgICAgewpAQCAtMTE0MCw2ICsxMTc2 LDExIEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1Z2luZm9kX2NsaWVudCAqYywKICAg KHZvaWQpIHJtZGlyICh0YXJnZXRfY2FjaGVfZGlyKTsgLyogbm9wIGlmIG5vdCBlbXB0eSAqLwog ICBmcmVlKGRhdGEpOwogCisgb3V0MToKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fdXJsczsg KytpKQorICAgIGZyZWUoc2VydmVyX3VybF9saXN0W2ldKTsKKyAgZnJlZShzZXJ2ZXJfdXJsX2xp c3QpOworCiAgb3V0MDoKICAgZnJlZSAoc2VydmVyX3VybHMpOwogCmRpZmYgLS1naXQgYS90ZXN0 cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjY1Y2JlYjcuLjU3NDdkNjU4IDEw MDY0NAotLS0gYS90ZXN0cy9DaGFuZ2VMb2cKKysrIGIvdGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg KzEsOCBAQAorMjAyMS0wNy0wOSAgTm9haCBTYW5jaSAgPG5zYW5jaUByZWRoYXQuY29tPgorCisJ KiBydW4tZGVidWdpbmZvZC1maW5kLnNoOiBXcm90ZSB0ZXN0IHRvIGVuc3VyZSBkdXBsaWNhdGUg dXJscyBhcmUgaW4KKwlmYWN0IG5vdCBjaGVja2VkLgorCiAyMDIxLTA3LTAyICBNYXJrIFdpZWxh YXJkICA8bWFya0BrbG9tcC5vcmc+CiAKICAgICAgICAqIHJ1bi1kZWJ1Z2luZm8tZmluZC5zaDog dW5zZXQgVkFMR1JJTkRfQ01EIGJlZm9yZSB0ZXN0aW5nIGRlYnVnaW5mb2QKZGlmZiAtLWdpdCBh L3Rlc3RzL3J1bi1kZWJ1Z2luZm9kLWZpbmQuc2ggYi90ZXN0cy9ydW4tZGVidWdpbmZvZC1maW5k LnNoCmluZGV4IDc0YTVjZWZmLi42ZmFhZjcwYiAxMDA3NTUKLS0tIGEvdGVzdHMvcnVuLWRlYnVn aW5mb2QtZmluZC5zaAorKysgYi90ZXN0cy9ydW4tZGVidWdpbmZvZC1maW5kLnNoCkBAIC0zNTks NiArMzU5LDE5IEBAIHJtIC1yZiBleHRyYWN0ZWQKIAogd2FpdF9yZWFkeSAkUE9SVDEgJ2ZvdW5k X3NvdXJjZXJlZnNfdG90YWx7c291cmNlPSIucnBtIGFyY2hpdmUifScgJHNvdXJjZWZpbGVzCiAK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBQUjI3OTgzIGVuc3VyZSBubyBkdXBsaWNhdGUgdXJscyBhcmUg dXNlZCBpbiB3aGVuIHF1ZXJ5aW5nIHNlcnZlcnMgZm9yIGZpbGVzCitUTVBfREVCVUdfVVJMUz0k REVCVUdJTkZPRF9VUkxTCitybSAtcmYgJERFQlVHSU5GT0RfQ0FDSEVfUEFUSCAjIGNsZWFuIGl0 IGZyb20gcHJldmlvdXMgdGVzdHMKK2V4cG9ydCBERUJVR0lORk9EX1VSTFM9Imh0dHA6Ly8xMjcu MC4wLjE6JFBPUlQxIGh0dHA6Ly8xMjcuMC4wLjE6JFBPUlQxIGh0dHA6Ly8xMjcuMC4wLjE6JFBP UlQxIGh0dHA6MTI3LjAuMC4xOjc5OTkiCitlbnYgTERfTElCUkFSWV9QQVRIPSRsZHBhdGggJHth YnNfdG9wX2J1aWxkZGlyfS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtZmluZCAtdiBleGVjdXRhYmxl ICRCVUlMRElEMiA+IHZsb2c0IDI+JjEgfHwgdHJ1ZQordGVtcGZpbGVzIHZsb2c0CitpZiBbICQo IGdyZXAgLWMgJ2R1cGxpY2F0ZSB1cmw6IGh0dHA6Ly8xMjcuMC4wLjE6JyRQT1JUMScuKicgdmxv ZzQgKSAtbmUgMiBdOyB0aGVuCisgIGVjaG8gIkR1cGxpY2F0ZWQgc2VydmVycyB1bmRldGVjdGVk IjsKKyAgZXJyCitmaQorZXhwb3J0IERFQlVHSU5GT0RfVVJMUz0kVE1QX0RFQlVHX1VSTFMKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwogIyBSdW4gYSBiYW5rIG9mIHF1ZXJpZXMgYWdhaW5zdCB0aGUgZGVidWdp bmZvZC1ycG1zIC8gZGVidWdpbmZvZC1kZWJzIHRlc3QgY2FzZXMKIAogYXJjaGl2ZV90ZXN0KCkg ewotLSAKMi4zMS4xCgo= --00000000000062b82c05c7b8bbaf--