chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tree-wide: add missing includes
[elogind.git]
/
src
/
libelogind
/
sd-bus
/
bus-socket.c
diff --git
a/src/libelogind/sd-bus/bus-socket.c
b/src/libelogind/sd-bus/bus-socket.c
index 9f3756f0c2628b1ea961a0484d06e59afc21f015..d0b1e3d7dc69873c8e6a727ae9198c903df0e7b1 100644
(file)
--- a/
src/libelogind/sd-bus/bus-socket.c
+++ b/
src/libelogind/sd-bus/bus-socket.c
@@
-264,6
+264,8
@@
static bool line_begins(const char *s, size_t m, const char *word) {
static int verify_anonymous_token(sd_bus *b, const char *p, size_t l) {
_cleanup_free_ char *token = NULL;
static int verify_anonymous_token(sd_bus *b, const char *p, size_t l) {
_cleanup_free_ char *token = NULL;
+ size_t len;
+ int r;
if (!b->anonymous_auth)
return 0;
if (!b->anonymous_auth)
return 0;
@@
-276,11
+278,12
@@
static int verify_anonymous_token(sd_bus *b, const char *p, size_t l) {
if (l % 2 != 0)
return 0;
if (l % 2 != 0)
return 0;
- token = unhexmem(p, l);
- if (!token)
- return -ENOMEM;
- if (memchr(token, 0, l/2))
+ r = unhexmem(p, l, (void **) &token, &len);
+ if (r < 0)
+ return 0;
+
+ if (memchr(token, 0, len))
return 0;
return !!utf8_is_valid(token);
return 0;
return !!utf8_is_valid(token);
@@
-288,6
+291,7
@@
static int verify_anonymous_token(sd_bus *b, const char *p, size_t l) {
static int verify_external_token(sd_bus *b, const char *p, size_t l) {
_cleanup_free_ char *token = NULL;
static int verify_external_token(sd_bus *b, const char *p, size_t l) {
_cleanup_free_ char *token = NULL;
+ size_t len;
uid_t u;
int r;
uid_t u;
int r;
@@
-307,11
+311,11
@@
static int verify_external_token(sd_bus *b, const char *p, size_t l) {
if (l % 2 != 0)
return 0;
if (l % 2 != 0)
return 0;
-
token = unhexmem(p, l
);
- if (
!token
)
- return
-ENOMEM
;
+
r = unhexmem(p, l, (void**) &token, &len
);
+ if (
r < 0
)
+ return
0
;
- if (memchr(token, 0, l
/2
))
+ if (memchr(token, 0, l
en
))
return 0;
r = parse_uid(token, &u);
return 0;
r = parse_uid(token, &u);
@@
-502,7
+506,6
@@
static int bus_socket_read_auth(sd_bus *b) {
struct cmsghdr cmsghdr;
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
} control;
struct cmsghdr cmsghdr;
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
} control;
- struct cmsghdr *cmsg;
bool handle_cmsg = false;
assert(b);
bool handle_cmsg = false;
assert(b);
@@
-552,8
+555,10
@@
static int bus_socket_read_auth(sd_bus *b) {
b->rbuffer_size += k;
b->rbuffer_size += k;
- if (handle_cmsg)
- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
+ if (handle_cmsg) {
+ struct cmsghdr *cmsg;
+
+ CMSG_FOREACH(cmsg, &mh)
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) {
int j;
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) {
int j;
@@
-567,6
+572,7
@@
static int bus_socket_read_auth(sd_bus *b) {
} else
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
cmsg->cmsg_level, cmsg->cmsg_type);
} else
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
cmsg->cmsg_level, cmsg->cmsg_type);
+ }
r = bus_socket_auth_verify(b);
if (r != 0)
r = bus_socket_auth_verify(b);
if (r != 0)
@@
-916,7
+922,6
@@
int bus_socket_read_message(sd_bus *bus) {
struct cmsghdr cmsghdr;
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
} control;
struct cmsghdr cmsghdr;
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
} control;
- struct cmsghdr *cmsg;
bool handle_cmsg = false;
assert(bus);
bool handle_cmsg = false;
assert(bus);
@@
-961,8
+966,10
@@
int bus_socket_read_message(sd_bus *bus) {
bus->rbuffer_size += k;
bus->rbuffer_size += k;
- if (handle_cmsg)
- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
+ if (handle_cmsg) {
+ struct cmsghdr *cmsg;
+
+ CMSG_FOREACH(cmsg, &mh)
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) {
int n, *f;
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) {
int n, *f;
@@
-978,7
+985,7
@@
int bus_socket_read_message(sd_bus *bus) {
return -EIO;
}
return -EIO;
}
- f = realloc(bus->fds, sizeof(int)
+
(bus->n_fds + n));
+ f = realloc(bus->fds, sizeof(int)
*
(bus->n_fds + n));
if (!f) {
close_many((int*) CMSG_DATA(cmsg), n);
return -ENOMEM;
if (!f) {
close_many((int*) CMSG_DATA(cmsg), n);
return -ENOMEM;
@@
-990,6
+997,7
@@
int bus_socket_read_message(sd_bus *bus) {
} else
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
cmsg->cmsg_level, cmsg->cmsg_type);
} else
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
cmsg->cmsg_level, cmsg->cmsg_type);
+ }
r = bus_socket_read_message_need(bus, &need);
if (r < 0)
r = bus_socket_read_message_need(bus, &need);
if (r < 0)