From patchwork Mon Mar 28 16:13:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: jb X-Patchwork-Id: 35019 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp347980pzb; Mon, 28 Mar 2022 09:13:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSr5HW0DHnQiEdjbyo4ffZKy99wTCLnoGNrj4J5z7eNoYUmWwrNoptizvuD0C7BQfLjAiB X-Received: by 2002:aa7:cad7:0:b0:419:dd61:6f18 with SMTP id l23-20020aa7cad7000000b00419dd616f18mr5159983edt.197.1648484035668; Mon, 28 Mar 2022 09:13:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648484035; cv=none; d=google.com; s=arc-20160816; b=qqsLd45qJqB8NNpfVKC+RppT4VByRCMQhX9Azbc/YRP0HwmAH9RhpOnFUS/rkzoRRS 7ghp6tYVynR/A1MbMTK1kQXbnFmVHQ//K3QlncmEtP4Hmt5WiAkb51bid7wJ3s/OufF+ j2Pehy9GOKzYNRqZ9mjR4D1NS49EBsBh/Zpew5nWa6vAbbh3ao2inLqkEDaLhvXYvQbN LOt4+tjlotV3JllbgMIRQtNyl/5NPA7XNb1B590KElOsP7z35tEI7qm/b4/tljrfbmV1 7tIijZU7cSjj2ZEtblmJR+39qZJVilGTd2pkTw1LOagaTLpGgvIqcIKlKL8WgcYXygIM dVZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:from:to :content-language:user-agent:mime-version:date:message-id :dkim-signature:delivered-to; bh=UIHouIZZV2GlBwJCjz6WA6SqySgk+UfjQGglw35IY9M=; b=WCZJUdXur6mQkmx+b0r7dArD2Qf+ceegN6UTOh6/HPwNKaeIqaEnoMq+wej87/N4IO M3iTCQiImd3YexKes+J9kRdgElmu7s2CQ4ENqqgD8grGPIbNAj36mdw97wBrjVX1iRhM 5mpaPRLOKccPEA650RZqERZbgTmXD//GIkVxpS9KSlxLxosYN8yqpUGoExR3tbnglchr MRLlrBoV6ePs1wa8lcOPfjWWwvLbleQXWwvfWmzLB8lD5OizL0HGpTicNZjO0LKh9lyb yDOnBhEKg6psG6ksKU/+yzHsd05newnXuAlBqASZgwEDb5v0ItLA6c7Q1EGBmxyVdC7a ZtGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ILDGlcsw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v18-20020a50d092000000b00418c2b5bf7csi14427780edd.606.2022.03.28.09.13.52; Mon, 28 Mar 2022 09:13:55 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ILDGlcsw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C0A5E68B233; Mon, 28 Mar 2022 19:13:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5E52968AE6D for ; Mon, 28 Mar 2022 19:13:42 +0300 (EEST) Received: by mail-ej1-f54.google.com with SMTP id o10so29766112ejd.1 for ; Mon, 28 Mar 2022 09:13:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:from :subject; bh=eRdCvon9ZUPfFA77hjpHDvmTWMxo9Ch2YinmfoUKT9M=; b=ILDGlcswt0Z6cjtlHeVcIBzfo1VyxPP0s8xDS/e9pFyGQJ5TWXd0AbZGBElucigy+n zztw8zDDLowZC15vmVEGd865UY/TuzYR/n9WEl43yyIC/mfWDEwFtwLzAkQ6Nyz66Y78 K0Twd68BP5S9B0JvJH+kHJu4TBeDolhGoggK9FHDlDEwqC0YjRvV3D+3e16ra1wR3zva /SIm2J8rHQGfcDz8x2q8hNWIATaj4raly3LMcAc2w1VhgvMdmuDh42gziLJpNTKpU/fe uOw8b4Rq5nb9erfGUyve+dE7jisc4qwmU9+HeXHTwtwXXJdrUEoE4ELT75XJnNE0+x87 ussw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:from:subject; bh=eRdCvon9ZUPfFA77hjpHDvmTWMxo9Ch2YinmfoUKT9M=; b=P3qCxff4cp23IuJBGJXfDUhxk39W0XA0iYJwcWj69BMrFlCiz6brt99EPccJh1W/AK BbKfR8VxOhoLtNNsqoMe8y2tRUQ94ObiqDPK4PtEAIhVqOWOEkDi4Iq8TdK9+tLP89GT Kc9Zq2JQLvJ1BxxmGQxL0jveppQa4ayjqTxxHnhYEqQSGomQBnyBrH4oqJP6NBK+NuSC /iBb+NjW9RUKWGruurK/JU8YA04shbgklH5jUQ5b53iIR677pBHRhRd1gnH+wtfoC4WC oYJk15JUqFEcOFnlKs1t2UiOzJ79LrADIwcHG4b3SxeD32AdsrxtaYzciDtL2ysSvTHX II6Q== X-Gm-Message-State: AOAM531OL4BXgi6YyZYb324nJoXQJZL64RDhGOqZZdcMKLUC19167vcc 0DF9cfReL6ooMhQMWFVeTdK9DWJOI68= X-Received: by 2002:a17:906:974a:b0:6e0:5d30:bef6 with SMTP id o10-20020a170906974a00b006e05d30bef6mr28373250ejy.207.1648484021763; Mon, 28 Mar 2022 09:13:41 -0700 (PDT) Received: from [10.10.0.40] (p509896f1.dip0.t-ipconnect.de. [80.152.150.241]) by smtp.gmail.com with ESMTPSA id oz2-20020a170906cd0200b006e096dd0611sm4630364ejb.45.2022.03.28.09.13.40 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 28 Mar 2022 09:13:41 -0700 (PDT) Message-ID: Date: Mon, 28 Mar 2022 18:13:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org From: jb Subject: [FFmpeg-devel] [PATCH] libavformat/rtmp: Adding a flag to give user the option to have ffmpeg fail instead of warn when mismatches are found in rtmp url stream or application names. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 96sMy6A5pny9 Hello, this patch was originally from William Martin, I just adapt it to the newest ffmpeg version. Regards Jonathan From 89b441ce47614035a545da1a7ce46c53ccf165e5 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Mon, 28 Mar 2022 17:07:57 +0200 Subject: [PATCH] Adding a flag to give user the option to have ffmpeg fail instead of warn when mismatches are found in rtmp url stream or application names. from original: https://patchwork.ffmpeg.org/project/ffmpeg/patch/20190925185708.70924-1-unique.will.martin@gmail.com/ --- libavformat/librtmp.c | 2 ++ libavformat/rtmpproto.c | 28 ++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c index 43013e4..00b4966 100644 --- a/libavformat/librtmp.c +++ b/libavformat/librtmp.c @@ -52,6 +52,7 @@ typedef struct LibRTMPContext { int live; char *temp_filename; int buffer_size; + bool strict_paths; } LibRTMPContext; static void rtmp_log(int level, const char *fmt, va_list args) @@ -333,6 +334,7 @@ static const AVOption options[] = { {"rtmp_swfurl", "URL of the SWF player. By default no value will be sent", OFFSET(swfurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, {"rtmp_swfverify", "URL to player swf file, compute hash/size automatically. (unimplemented)", OFFSET(swfverify), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC}, {"rtmp_tcurl", "URL of the target stream. Defaults to proto://host[:port]/app.", OFFSET(tcurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, + {"rtmp_strict_paths", "Error instead of warn for mismatch on stream or application path in url", OFFSET(strict_paths), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC}, #if CONFIG_NETWORK {"rtmp_buffer_size", "set buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, DEC|ENC }, #endif diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c index f97e3c3..34433ed 100644 --- a/libavformat/rtmpproto.c +++ b/libavformat/rtmpproto.c @@ -132,6 +132,7 @@ typedef struct RTMPContext { char auth_params[500]; int do_reconnect; int auth_tried; + int strict_paths; ///< If true, enforce strict string matching on rtmp stream and application } RTMPContext; #define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing @@ -480,9 +481,16 @@ static int read_connect(URLContext *s, RTMPContext *rt) "app", tmpstr, sizeof(tmpstr)); if (ret) av_log(s, AV_LOG_WARNING, "App field not found in connect\n"); - if (!ret && strcmp(tmpstr, rt->app)) - av_log(s, AV_LOG_WARNING, "App field don't match up: %s <-> %s\n", - tmpstr, rt->app); + if (!ret && strcmp(tmpstr, rt->app)) { + if (rt->strict_paths) { + av_log(s, AV_LOG_ERROR, "App field don't match up: %s <-> %s. " + "Exiting since rtmp_strict_paths provided\n", tmpstr, rt->app); + return AVERROR(EIO); + } else { + av_log(s, AV_LOG_WARNING, "App field don't match up: %s <-> %s\n", + tmpstr, rt->app); + } + } ff_rtmp_packet_destroy(&pkt); // Send Window Acknowledgement Size (as defined in specification) @@ -1947,9 +1955,16 @@ static int send_invoke_response(URLContext *s, RTMPPacket *pkt) pchar = s->filename; } pchar++; - if (strcmp(pchar, filename)) - av_log(s, AV_LOG_WARNING, "Unexpected stream %s, expecting" - " %s\n", filename, pchar); + if (strcmp(pchar, filename)) { + if (rt->strict_paths) { + av_log(s, AV_LOG_ERROR, "Unexpected stream %s, expecting %s. " + "Exiting since rtmp_strict_paths provided.\n", filename, pchar); + return AVERROR(EIO); + } else { + av_log(s, AV_LOG_WARNING, "Unexpected stream %s, expecting" + " %s\n", filename, pchar); + } + } } rt->state = STATE_RECEIVING; } @@ -3119,6 +3134,7 @@ static const AVOption rtmp_options[] = { {"listen", "Listen for incoming rtmp connections", OFFSET(listen), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtmp_listen" }, {"tcp_nodelay", "Use TCP_NODELAY to disable Nagle's algorithm", OFFSET(tcp_nodelay), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC|ENC}, {"timeout", "Maximum timeout (in seconds) to wait for incoming connections. -1 is infinite. Implies -rtmp_listen 1", OFFSET(listen_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC, "rtmp_listen" }, + {"rtmp_strict_paths", "Error instead of warn for mismatch on stream or application path in url", OFFSET(strict_paths), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC}, { NULL }, }; -- 2.35.1