From: <rsbecker@nexbridge.com>
To: "'Junio C Hamano'" <gitster@pobox.com>,
"'Usman Akinyemi'" <usmanakinyemi202@gmail.com>
Cc: <git@vger.kernel.org>, <christian.couder@gmail.com>, <ps@pks.im>,
<johncai86@gmail.com>, <Johannes.Schindelin@gmx.de>,
<me@ttaylorr.com>, <phillip.wood@dunelm.org.uk>,
<sunshine@sunshineco.com>,
"'Christian Couder'" <chriscool@tuxfamily.org>
Subject: RE: [PATCH v2 5/6] connect: advertise OS version
Date: Fri, 17 Jan 2025 17:47:46 -0500 [thread overview]
Message-ID: <00bb01db6931$d7cd6dc0$87684940$@nexbridge.com> (raw)
In-Reply-To: <xmqq4j1xjd2m.fsf@gitster.g>
On January 17, 2025 5:22 PM, Junio C Hamano wrote:
>Usman Akinyemi <usmanakinyemi202@gmail.com> writes:
>
>> As some issues that can happen with a Git client can be operating
>> system specific, it can be useful for a server to know which OS a
>> client is using. In the same way it can be useful for a client to know
>> which OS a server is using.
>
>Hmph. The other end may be running different version of Git, and the
version
>difference of _our_ software is probably more relevant.
>For that matter, they may even be running something entirely different from
our
>software, like Gerrit. So I am not sure I am convinced that os-version
thing is a good
>thing to have with that paragraph.
>
>> Let's introduce a new protocol (`os-version`) allowing Git clients and
>> servers to exchange operating system information. The protocol is
>> controlled by the new `transfer.advertiseOSVersion` config option.
>
>The last sentence is redundant and can safely removed. The next paragraph
>describes it better than "is controlled by".
>
>> Add the `transfer.advertiseOSVersion` config option to address privacy
>> concerns. It defaults to `true` and can be changed to `false`. When
>> enabled, this option makes clients and servers send each other the OS
>> name (e.g., "Linux" or "Windows"). The information is retrieved using
>> the 'sysname' field of the `uname(2)` system call.
>
>Add "or its equivalent" at the end.
>macOS may have one, but it probably is not quite correct to say that
Windows have
>uname system call (otherwise we wouldn't be emulating it on top of
GetVersion
>ourselves).
>
>> However, there are differences between `uname(1)` (command-line
>> utility) and `uname(2)` (system call) outputs on Windows. These
>> discrepancies complicate testing on Windows platforms. For example:
>> - `uname(1)` output: MINGW64_NT-10.0-20348.3.4.10-87d57229.x86_64\
>> .2024-02-14.20:17.UTC.x86_64
>> - `uname(2)` output: Windows.10.0.20348
>>
>> On Windows, uname(2) is not actually system-supplied but is instead
>> already faked up by Git itself. We could have overcome the test issue
>> on Windows by implementing a new `uname` subcommand in `test-tool`
>> using uname(2), but except uname(2), which would be tested against
>> itself, there would be nothing platform specific, so it's just simpler
>> to disable the tests on Windows.
>
>OK.
>
>> +transfer.advertiseOSVersion::
>> + When `true`, the `os-version` capability is advertised by clients
and
>> + servers. It makes clients and servers send to each other a string
>> + representing the operating system name, like "Linux" or "Windows".
>> + This string is retrieved from the `sysname` field of the struct
returned
>> + by the uname(2) system call. Defaults to true.
>
>Presumably, both ends of the connection independently choose whether they
>enable or disable this variable, so we have 2x2=4 combinations (here,
versions of
>Git before the os-version capability support is introduced behave the same
way as
>an installation with this configuration variable set to false).
>
>And among these four combinations, only one of them results in "send to
each
>other", but the description above is fuzzy.
>
>> diff --git a/connect.c b/connect.c
>> index 10fad43e98..6d5792b63c 100644
>> --- a/connect.c
>> +++ b/connect.c
>> @@ -492,6 +492,9 @@ static void send_capabilities(int fd_out, struct
>packet_reader *reader)
>> if (server_supports_v2("agent"))
>> packet_write_fmt(fd_out, "agent=%s",
git_user_agent_sanitized());
>>
>> + if (server_supports_v2("os-version") &&
>advertise_os_version(the_repository))
>> + packet_write_fmt(fd_out, "os-version=%s",
>os_version_sanitized());
>
>Not a new problem, because the new code is pretty-much a straight copy from
the
>existing "agent" code, but do we ever use unsanitized versions of
git-user-agent and
>os-version? If not, I am wondering if we should sanitize immediately when
we
>obtain the raw string and keep it, get rid of _santized() function from the
public API,
>and make anybody calling git_user_agent() and os_version() to get sanitized
safe-
>to-use strings.
>
>I see http.c throws git_user_agent() without doing any sanitization at the
cURL
>library, but it may be a mistake that we may want to fix (outside the scope
of this
>topic). Since the contrast between the
>os_version() vs the os_version_sanitized() is *new* in this series,
however, we
>probably would want to get it right from the beginning.
>
>So the question is again, do we ever need to use os_version() that is a raw
string
>that may require sanitizing? I do not think of any offhand.
uname(2) is definitely not portable. uname(1) is almost always available,
but
there is no guarantee about uname(2). I am not entirely happy having my
builds break if having to write one between rc0 and rc1 when this rolls. How
is this being handled? os_version() is also not portable. What if we had
something that asked for specific elements of the string, by name or id.
next prev parent reply other threads:[~2025-01-17 22:48 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-06 10:30 [PATCH 0/4][Outreachy] Introduce os-version Capability with Configurable Options Usman Akinyemi
2025-01-06 10:30 ` [PATCH 1/4] version: refactor redact_non_printables() Usman Akinyemi
2025-01-06 22:35 ` Eric Sunshine
2025-01-08 12:58 ` Usman Akinyemi
2025-01-06 10:30 ` [PATCH 2/4] version: refactor get_uname_info() Usman Akinyemi
2025-01-06 16:04 ` Junio C Hamano
2025-01-08 13:06 ` Usman Akinyemi
2025-01-06 10:30 ` [PATCH 3/4] connect: advertise OS version Usman Akinyemi
2025-01-06 16:22 ` Junio C Hamano
2025-01-08 13:06 ` Usman Akinyemi
2025-01-08 16:15 ` Junio C Hamano
2025-01-09 14:25 ` Usman Akinyemi
2025-01-09 15:46 ` Junio C Hamano
2025-01-10 17:56 ` Usman Akinyemi
2025-01-10 19:24 ` Junio C Hamano
2025-01-11 11:07 ` Usman Akinyemi
2025-01-13 15:46 ` Junio C Hamano
2025-01-13 18:26 ` Usman Akinyemi
2025-01-13 19:47 ` Junio C Hamano
2025-01-13 20:07 ` rsbecker
2025-01-06 23:17 ` Eric Sunshine
2025-01-08 13:14 ` Usman Akinyemi
2025-01-06 10:30 ` [PATCH 4/4] version: introduce osversion.command config for os-version output Usman Akinyemi
2025-01-17 10:46 ` [PATCH v2 0/6][Outreachy] Introduce os-version Capability with Configurable Options Usman Akinyemi
2025-01-17 10:46 ` [PATCH v2 1/6] version: refactor redact_non_printables() Usman Akinyemi
2025-01-17 18:26 ` Junio C Hamano
2025-01-17 19:48 ` Junio C Hamano
2025-01-20 17:10 ` Usman Akinyemi
2025-01-21 8:12 ` Christian Couder
2025-01-21 18:01 ` Junio C Hamano
2025-01-17 10:46 ` [PATCH v2 2/6] version: refactor get_uname_info() Usman Akinyemi
2025-01-17 10:46 ` [PATCH v2 3/6] version: extend get_uname_info() to hide system details Usman Akinyemi
2025-01-17 18:27 ` Junio C Hamano
2025-01-17 10:46 ` [PATCH v2 4/6] t5701: add setup test to remove side-effect dependency Usman Akinyemi
2025-01-17 19:31 ` Junio C Hamano
2025-01-20 17:32 ` Usman Akinyemi
2025-01-20 19:52 ` Junio C Hamano
2025-01-21 13:43 ` Usman Akinyemi
2025-01-17 10:46 ` [PATCH v2 5/6] connect: advertise OS version Usman Akinyemi
2025-01-17 19:35 ` Junio C Hamano
2025-01-17 22:22 ` Junio C Hamano
2025-01-17 22:47 ` rsbecker [this message]
2025-01-17 23:04 ` Junio C Hamano
2025-01-20 18:15 ` Usman Akinyemi
2025-01-21 19:06 ` Junio C Hamano
2025-01-17 10:46 ` [PATCH v2 6/6] version: introduce osversion.command config for os-version output Usman Akinyemi
2025-01-17 21:44 ` Eric Sunshine
2025-01-20 18:17 ` Usman Akinyemi
2025-01-20 18:41 ` Eric Sunshine
2025-01-20 19:08 ` Usman Akinyemi
2025-01-17 22:33 ` Junio C Hamano
2025-01-17 22:49 ` rsbecker
2025-01-17 23:06 ` Junio C Hamano
2025-01-17 23:18 ` rsbecker
2025-01-20 18:58 ` Usman Akinyemi
2025-01-21 19:14 ` Junio C Hamano
2025-01-21 19:51 ` rsbecker
2025-01-24 12:21 ` [PATCH v3 0/6][Outreachy] Introduce os-version Capability with Configurable Options Usman Akinyemi
2025-01-24 12:21 ` [PATCH v3 1/6] version: replace manual ASCII checks with isprint() for clarity Usman Akinyemi
2025-01-24 18:13 ` Junio C Hamano
2025-01-24 12:21 ` [PATCH v3 2/6] version: refactor redact_non_printables() Usman Akinyemi
2025-01-24 12:21 ` [PATCH v3 3/6] version: refactor get_uname_info() Usman Akinyemi
2025-01-24 12:21 ` [PATCH v3 4/6] version: extend get_uname_info() to hide system details Usman Akinyemi
2025-01-24 12:21 ` [PATCH v3 5/6] t5701: add setup test to remove side-effect dependency Usman Akinyemi
2025-01-24 18:12 ` Junio C Hamano
2025-01-24 12:21 ` [PATCH v3 6/6] connect: advertise OS version Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 0/6][Outreachy] extend agent capability to include OS name Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 1/6] version: replace manual ASCII checks with isprint() for clarity Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 2/6] version: refactor redact_non_printables() Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 3/6] version: refactor get_uname_info() Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 4/6] version: extend get_uname_info() to hide system details Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 5/6] t5701: add setup test to remove side-effect dependency Usman Akinyemi
2025-02-05 18:52 ` [PATCH v4 6/6] agent: advertise OS name via agent capability Usman Akinyemi
2025-02-05 21:48 ` Junio C Hamano
2025-02-06 6:37 ` Usman Akinyemi
2025-02-06 15:13 ` Junio C Hamano
2025-02-07 17:27 ` Usman Akinyemi
2025-02-07 17:57 ` Junio C Hamano
2025-02-07 19:25 ` Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 0/6][Outreachy] extend agent capability to include OS name Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 1/6] version: replace manual ASCII checks with isprint() for clarity Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 2/6] version: refactor redact_non_printables() Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 3/6] version: refactor get_uname_info() Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 4/6] version: extend get_uname_info() to hide system details Usman Akinyemi
2025-02-14 12:36 ` [PATCH v5 5/6] t5701: add setup test to remove side-effect dependency Usman Akinyemi
2025-02-14 21:49 ` Junio C Hamano
2025-02-14 12:36 ` [PATCH v5 6/6] agent: advertise OS name via agent capability Usman Akinyemi
2025-02-14 22:07 ` Junio C Hamano
2025-02-15 15:29 ` Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 0/6][Outreachy] extend agent capability to include OS name Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 1/6] version: replace manual ASCII checks with isprint() for clarity Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 2/6] version: refactor redact_non_printables() Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 3/6] version: refactor get_uname_info() Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 4/6] version: extend get_uname_info() to hide system details Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 5/6] t5701: add setup test to remove side-effect dependency Usman Akinyemi
2025-02-15 15:50 ` [PATCH v6 6/6] agent: advertise OS name via agent capability Usman Akinyemi
2025-02-18 17:14 ` Junio C Hamano
2025-02-18 17:09 ` [PATCH v6 0/6][Outreachy] extend agent capability to include OS name Junio C Hamano
2025-01-24 18:39 ` [PATCH v3 0/6][Outreachy] Introduce os-version Capability with Configurable Options Junio C Hamano
2025-01-27 13:38 ` Christian Couder
2025-01-27 15:26 ` Junio C Hamano
2025-01-31 14:30 ` Christian Couder
2025-01-31 16:37 ` Junio C Hamano
2025-01-31 19:42 ` Usman Akinyemi
2025-01-31 20:15 ` Junio C Hamano
2025-01-31 19:46 ` Usman Akinyemi
2025-01-31 20:17 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='00bb01db6931$d7cd6dc0$87684940$@nexbridge.com' \
--to=rsbecker@nexbridge.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johncai86@gmail.com \
--cc=me@ttaylorr.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
--cc=sunshine@sunshineco.com \
--cc=usmanakinyemi202@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.