bus-socket: Fix line_begins() to accept word matching full string v239-13.1
authorFilipe Brandenburger <filbranden@google.com>
Tue, 17 Jul 2018 18:32:40 +0000 (11:32 -0700)
committerLukas Nykryn <lnykryn@redhat.com>
Thu, 28 Mar 2019 15:36:45 +0000 (16:36 +0100)
commitcce8d42c8d86167f22c86c226383a40dea28388a
tree5652c8f1f488846856c8464c914bc5e243bc3e7d
parent09ed23dd20cc4ecb45a50081d3bce1ef830e90b7
bus-socket: Fix line_begins() to accept word matching full string

The switch to memory_startswith() changed the logic to only look for a space or
NUL byte after the matched word, but matching the full size should also be
acceptable.

This changed the behavior of parsing of "AUTH\r\n", where m will be set to 4,
since even though the word will match, the check for it being followed by ' '
or NUL will make line_begins() return false.

Tested:

- Using netcat to connect to the private socket directly:
  $ echo -ne '\0AUTH\r\n' | sudo nc -U /run/systemd/private
  REJECTED EXTERNAL ANONYMOUS

- Running the Ignition blackbox test:
  $ sudo sh -c 'PATH=$PWD/bin/amd64:$PATH ./tests.test'
  PASS

Fixes: d27b725abf64a19a6b2f99332b663f17ad046771
(cherry picked from commit 3f10c66270b74530339b3f466c43874bb40c210f)

Resolves: #1692991
src/libsystemd/sd-bus/bus-socket.c