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: d27b725abf
This commit is contained in:
parent
ed698d3028
commit
3f10c66270
|
@ -246,10 +246,7 @@ static bool line_begins(const char *s, size_t m, const char *word) {
|
|||
const char *p;
|
||||
|
||||
p = memory_startswith(s, m, word);
|
||||
if (!p)
|
||||
return false;
|
||||
|
||||
return IN_SET(*p, 0, ' ');
|
||||
return p && (p == (s + m) || *p == ' ');
|
||||
}
|
||||
|
||||
static int verify_anonymous_token(sd_bus *b, const char *p, size_t l) {
|
||||
|
|
Loading…
Reference in New Issue