From patchwork Wed Dec 4 22:59:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Henning Meyer X-Patchwork-Id: 102446 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5EA663858D28 for ; Wed, 4 Dec 2024 23:00:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5EA663858D28 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=CKk9+7Tu X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id DF1013858D20 for ; Wed, 4 Dec 2024 23:00:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DF1013858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DF1013858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733353204; cv=none; b=Op0UvYfSbOifilnDTR45tWBDjsUtz5PFwJxVdkiNgLqmNjtH2NNzzGpmVF5pwpy3BXdVslkRXp2JEv0Y/CJ9Z9EAI6kd+4KQ061kO0t4EJo8+Ww7E8h/YOwr4JFQSP37YjI+eU/xrGkZk2iqpjWIt3ZpFzVSdqGQQq3Y+877VYY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733353204; c=relaxed/simple; bh=CZNn8qWjU68E7+NY/6PkSTCWs+Ai/Gly0D9syIdZqD4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=OHUDLyw+/wovZHuRXwsTRAOpc+gQvsO7lkbB8SKPb56CngvfD81B6o7xCLzdnRVIzn4sN+XjcueVCWfz0eVe7uPHC1/xI9GdlNsUMQfsGiJz+PznFB9962t7K/vCp4cwDpiUHT9s86xn9r73Zv7fWoH44+TWcx4s5ggeiPU5Eew= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DF1013858D20 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-434a8640763so2116265e9.1 for ; Wed, 04 Dec 2024 15:00:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733353202; x=1733958002; darn=sourceware.org; h=content-transfer-encoding:subject:autocrypt:from:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=EbHRXEuoRUrFIfnmAGm3DtbErqtgClFqlpV3EPZt8MA=; b=CKk9+7TuhnFFYFha/LIAOZO99qnvz9N2I3kkMS/TG0wL+kR3b7WjFTwnHD1VY41p+6 0v/5oFOkwLd+5Q+/H0gMevK1+CvcdnXxgJSc0mOYOK6cmH21V8ghmIHmtw0HvinmaL4L /ZUewio40fyRDp73Wc5g0tWoOdMXzFrhtZ5D4giSl6Fc4dUAVZO6FF3JWVTc8zmwhVir yekEhyZxGfyh+SWKslRh0BJcxsTKOvFBwCDjuLRzfK8Emui3Pa+Z4O3yt9lSGGB6W1kl MhmmTH/22VbVdnw7m1KjZ8k3oqfHTMiZBNSHpdhJ07RhdFm06At/dwnwEcYBSgvmTXFX +x+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733353202; x=1733958002; h=content-transfer-encoding:subject:autocrypt:from:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EbHRXEuoRUrFIfnmAGm3DtbErqtgClFqlpV3EPZt8MA=; b=KRGwZRFSLFdD/OabllMfN9MM+H2EzYPBsQBeaQnPf3SUL4NO5QvbNiHxh3rFvOJ+TZ ULwgxW/fXYuNLhCKZhCu1Bd1RSKIVzl1q2ADtPgwpAYSDLdvrb01NzuxYTPVIe8NG39H PJtMJPMOHUFA6lOvnvsbxS4q0+kn+Kve45VIqO09VgB0B7b0M3HBEYN3zjoorSzdfGqo LPh54xQXJ1bzgTrvayAk+DTUpNUBr5/37osQ9s4saefi3VTjxpGRQSFCr17mifCa6kBh CEPvUDSgaCfMpZBN06piRwjrHvCCYERtywn2K9HB88e3FghqtD56YbnRkCmm7+WntzaS T6qA== X-Gm-Message-State: AOJu0Yys57L2DFoFxbvQez4Kba6OAWSiRqimSImc0PdUJ6RW6PVkUpCX /H+jQbxACjh5tMI0g18IylZKn4DZlSRBuKArf6NpaaDgqqU0sj4hhL3Z7Q== X-Gm-Gg: ASbGnctA1TiMqdGdu8q+kHBcGPMQgOfBnoSeD4YcevXuJvuUfprLnMTgGlxWYHeNHwc zFhElg4iH8pazDh+MfrSh4x8YpimyxXglk9E1uWfq5+BOF2XJniRuIuZfeFf4BE4r5hGLMvudZp CBtZobdLCbX2CHj0sg1biexjJVj3QIJgow4ZngDNfiO5j1aZEsF3zav1Yh9EosHjZq3qtMnDPKr X2g+zK9nR5YmTieTEVl32mtScm19KIx8UUPDnNF9po+5EuwK1oTxJcKjar80Mf5VUbwyph9nRa0 1Xjb7TnT0z/0Md1TdTBpI88JRd2l4JHTHu3lg8+K9JdtT6OXYJXu/5SPdyRqVImuXgY008FIA5c ZD7XY X-Google-Smtp-Source: AGHT+IFX1dFtI/yXw6Nv9E+pjo7B36mKXdNMDJyvFAjdTuiYMM/SUMM7caQw9+VO1zOTdGHUggw70Q== X-Received: by 2002:a05:600c:1c0e:b0:434:a802:e99a with SMTP id 5b1f17b1804b1-434d09b1590mr74327365e9.4.1733353202110; Wed, 04 Dec 2024 15:00:02 -0800 (PST) Received: from ?IPV6:2003:f6:171f:7b07:3815:606f:91b1:20d2? (p200300f6171f7b073815606f91b120d2.dip0.t-ipconnect.de. [2003:f6:171f:7b07:3815:606f:91b1:20d2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-386219095d3sm213655f8f.71.2024.12.04.15.00.00 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 15:00:01 -0800 (PST) Message-ID: <023bab16-beca-40d0-a52c-c8c802aea701@gmail.com> Date: Wed, 4 Dec 2024 23:59:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: elfutils-devel@sourceware.org From: Henning Meyer Autocrypt: addr=hmeyer.eu@gmail.com; keydata= xjMEZwqZDRYJKwYBBAHaRw8BAQdAwyfx2Q1dMlUqYCu9WOrxK2BrKRy6840/omIVBc1218LN I0hlbm5pbmcgTWV5ZXIgPGhtZXllci5ldUBnbWFpbC5jb20+wo8EExYIADcWIQQ/igt3fKmp krPnDwgkX84AHyLf5gUCZwqZDQUJBaOagAIbAwQLCQgHBRUICQoLBRYCAwEAAAoJECRfzgAf It/mbCIA/2L88Y1BZWBE1CYR5nAWq2CBO2zYwxyIZqiq9DXCfWT5AQDVAdVhzadREALsshMU goj/L9DeUUUamTwXCT/IMuTGBs44BGcKmQ4SCisGAQQBl1UBBQEBB0BLPd9lCrj3dNzFR9wp moyy3A77aejCFnqN63Sr6R0cfgMBCAfCfgQYFggAJhYhBD+KC3d8qamSs+cPCCRfzgAfIt/m BQJnCpkOBQkFo5qAAhsMAAoJECRfzgAfIt/m1eMA/jtveXojEN++w0IJ8lnkooGOwB+m81Qp M6wadBAiJFTFAQCednWKYSxS8hqKE4ecCoSbZp+sKEVcVHl/nZYqcGdzCQ== Subject: [PATCH] debuginfod: add CORS support X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED, URIBL_SBL_A autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: elfutils-devel-bounces~patchwork=sourceware.org@sourceware.org This is my first attempt at implementing CORS support in debuginfod. I should probably add or change tests. Since debuginfod-find does not need this functionality, it would be another test done with curl. I had a look at the existing tests, run-debuginfod-webapi-concurrency.sh looks like it would be a good template. I have confirmed that I can use debuginfod with this patch from my web application at https://core-explorer.github.io/cdx-type/ Signed-off-by: Henning Meyer Signed-off-by: Henning Meyer Signed-off-by: Frank Ch. Eigler Signed-off-by: Henning Meyer Signed-off-by: Frank Ch. Eigler ---  debuginfod/ChangeLog      |  6 ++++++  debuginfod/debuginfod.cxx | 35 +++++++++++++++++++++++++++++++++--  2 files changed, 39 insertions(+), 2 deletions(-)                string header_dup; @@ -3537,6 +3538,7 @@ handle_metrics (off_t* size)      {        *size = os.size();        add_mhd_response_header (r, "Content-Type", "text/plain"); +      add_mhd_response_header (r, "Access-Control-Allow-Origin", "*");      }    return r;  } @@ -3763,7 +3765,10 @@ handle_metadata (MHD_Connection* conn,                                         MHD_RESPMEM_MUST_COPY);    *size = strlen(metadata_str);    if (r) +  {      add_mhd_response_header(r, "Content-Type", "application/json"); +    add_mhd_response_header (r, "Access-Control-Allow-Origin", "*"); +  }    return r;  } @@ -3780,11 +3785,28 @@ handle_root (off_t* size)      {        *size = version.size ();        add_mhd_response_header (r, "Content-Type", "text/plain"); +      add_mhd_response_header (r, "Access-Control-Allow-Origin", "*");      }    return r;  } +static struct MHD_Response* +handle_options (off_t* size) +{ +  static char empty_body[] = " "; +  MHD_Response* r = MHD_create_response_from_buffer (1, empty_body, +                             MHD_RESPMEM_PERSISTENT); +  if (r != NULL) +    { +      *size = 1; +      add_mhd_response_header (r, "Access-Control-Allow-Origin", "*"); +      add_mhd_response_header (r, "Access-Control-Allow-Methods", "GET, OPTIONS"); +      add_mhd_response_header (r, "Access-Control-Allow-Headers", "cache-control"); +    } +  return r; +} +  //////////////////////////////////////////////////////////////////////// @@ -3838,8 +3860,17 @@ handler_cb (void * /*cls*/,    try      { -      if (string(method) != "GET") -        throw reportable_exception(400, "we support GET only"); +      if (method == string("OPTIONS")) +        { +          artifacttype = "OPTIONS"; +          inc_metric("http_requests_total", "type", artifacttype); +          r = handle_options(& http_size); +          rc = MHD_queue_response (connection, MHD_HTTP_OK, r); +          http_code = MHD_HTTP_OK; +          MHD_destroy_response (r); +          return rc; +        } else if (method != string("GET")) +          throw reportable_exception(400, "we only support GET and OPTIONS");        /* Start decoding the URL. */        size_t slash1 = url_copy.find('/', 1); diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 0e4810bb..8e2377a0 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2024-12-04: Henning Meyer +    * debuginfod.cxx: +    (handle_options): new_function +    (handle_buildid, handle_metrics, handle_root, handle_metadata): +    add Access-Control-Allow-Origin header +    (handler_cb): handle http OPTIONS method  2023-04-21  Frank Ch. Eigler      * debuginfod.cxx (groom): Fix -r / -X logic. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 4bb517bd..7f7d304f 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3365,6 +3365,7 @@ handle_buildid (MHD_Connection* conn,              {                add_mhd_response_header (r, "Content-Type",                         "application/octet-stream"); +              add_mhd_response_header (r, "Access-Control-Allow-Origin", "*");                // Copy the incoming headers                const char * hdrs = debuginfod_get_headers(client);