commit - 46de5bfd0495281e884aa3690525a205c54f2796
commit + 73b7854a862a3132c87d521e0051445221b5edb8
blob - aad3015968e7a131a4484f030d20e680626a55b4
blob + 28b85018e0bd0857fe3c037382a2318f2f331963
--- lib/privsep.c
+++ lib/privsep.c
return NULL;
}
+static const struct got_error *
+recv_imsg_error(struct imsg *imsg, size_t datalen)
+{
+ struct got_imsg_error *ierr;
+
+ if (datalen != sizeof(*ierr))
+ return got_error(GOT_ERR_PRIVSEP_LEN);
+
+ ierr = imsg->data;
+ if (ierr->code == GOT_ERR_ERRNO) {
+ static struct got_error serr;
+ serr.code = GOT_ERR_ERRNO;
+ serr.msg = strerror(ierr->errno_code);
+ return &serr;
+ }
+
+ return got_error(ierr->code);
+}
+
const struct got_error *
got_privsep_recv_imsg(struct imsg *imsg, struct imsgbuf *ibuf,
size_t min_datalen)
}
if (imsg->hdr.len < IMSG_HEADER_SIZE + min_datalen)
- return got_error(GOT_ERR_PRIVSEP_LEN);
-
- return NULL;
-}
-
-static const struct got_error *
-recv_imsg_error(struct imsg *imsg, size_t datalen)
-{
- struct got_imsg_error *ierr;
-
- if (datalen != sizeof(*ierr))
return got_error(GOT_ERR_PRIVSEP_LEN);
- ierr = imsg->data;
- if (ierr->code == GOT_ERR_ERRNO) {
- static struct got_error serr;
- serr.code = GOT_ERR_ERRNO;
- serr.msg = strerror(ierr->errno_code);
- return &serr;
+ if (imsg->hdr.type == GOT_IMSG_ERROR) {
+ size_t datalen = imsg->hdr.len - IMSG_HEADER_SIZE;
+ return recv_imsg_error(imsg, datalen);
}
- return got_error(ierr->code);
+ return NULL;
}
/* Attempt to send an error in an imsg. Complain on stderr as a last resort. */
datalen = imsg.hdr.len - IMSG_HEADER_SIZE;
switch (imsg.hdr.type) {
- case GOT_IMSG_ERROR:
- err = recv_imsg_error(&imsg, datalen);
- break;
case GOT_IMSG_OBJECT:
err = got_privsep_get_imsg_obj(obj, &imsg, ibuf);
break;
len = 0;
switch (imsg.hdr.type) {
- case GOT_IMSG_ERROR:
- err = recv_imsg_error(&imsg, datalen);
- break;
case GOT_IMSG_COMMIT:
if (datalen < sizeof(*icommit)) {
err = got_error(GOT_ERR_PRIVSEP_LEN);
datalen = imsg.hdr.len - IMSG_HEADER_SIZE;
switch (imsg.hdr.type) {
- case GOT_IMSG_ERROR:
- err = recv_imsg_error(&imsg, datalen);
- break;
case GOT_IMSG_BLOB:
if (datalen != sizeof(*iblob)) {
err = got_error(GOT_ERR_PRIVSEP_LEN);