Use the ibuf_fd_*() API for file descriptor passing and also ibuf_set()
instead of ibuf_seek().
--
:wq Claudio
Index: http.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/http.c,v
retrieving revision 1.76
diff -u -p -r1.76 http.c
--- http.c 12 Jun 2023 15:27:52 -0000 1.76
+++ http.c 12 Jun 2023 16:03:16 -0000
@@ -2150,7 +2150,7 @@ proc_http(char *bind_addr, int fd)
io_read_str(b, &mod);
/* queue up new requests */
- http_req_new(id, uri, mod, 0, b->fd);
+ http_req_new(id, uri, mod, 0, ibuf_fd_get(b));
ibuf_free(b);
}
}
Index: io.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/io.c,v
retrieving revision 1.22
diff -u -p -r1.22 io.c
--- io.c 14 Dec 2022 15:19:16 -0000 1.22
+++ io.c 16 Jun 2023 14:37:42 -0000
@@ -41,7 +41,7 @@ io_new_buffer(void)
if ((b = ibuf_dynamic(64, INT32_MAX)) == NULL)
err(1, NULL);
- ibuf_reserve(b, sizeof(size_t)); /* can not fail */
+ ibuf_add_zero(b, sizeof(size_t)); /* can not fail */
return b;
}
@@ -88,7 +88,7 @@ io_close_buffer(struct msgbuf *msgbuf, s
size_t len;
len = ibuf_size(b) - sizeof(len);
- memcpy(ibuf_seek(b, 0, sizeof(len)), &len, sizeof(len));
+ ibuf_set(b, 0, &len, sizeof(len));
ibuf_close(msgbuf, b);
}
@@ -280,7 +280,7 @@ io_buf_recvfd(int fd, struct ibuf **ib)
for (i = 0; i < j; i++) {
f = ((int *)CMSG_DATA(cmsg))[i];
if (i == 0)
- b->fd = f;
+ ibuf_fd_set(b, f);
else
close(f);
}
Index: main.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
retrieving revision 1.241
diff -u -p -r1.241 main.c
--- main.c 30 May 2023 16:02:28 -0000 1.241
+++ main.c 12 Jun 2023 07:09:58 -0000
@@ -341,7 +341,7 @@ http_fetch(unsigned int id, const char *
io_str_buffer(b, uri);
io_str_buffer(b, last_mod);
/* pass file as fd */
- b->fd = fd;
+ ibuf_fd_set(b, fd);
io_close_buffer(&httpq, b);
}
@@ -362,7 +362,7 @@ rrdp_http_fetch(unsigned int id, const c
b = io_new_buffer();
io_simple_buffer(b, &type, sizeof(type));
io_simple_buffer(b, &id, sizeof(id));
- b->fd = pi[0];
+ ibuf_fd_set(b, pi[0]);
io_close_buffer(&rrdpq, b);
http_fetch(id, uri, last_mod, pi[1]);
Index: rrdp.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/rrdp.c,v
retrieving revision 1.30
diff -u -p -r1.30 rrdp.c
--- rrdp.c 3 May 2023 07:51:08 -0000 1.30
+++ rrdp.c 16 Jun 2023 15:06:58 -0000
@@ -431,20 +431,20 @@ rrdp_input_handler(int fd)
io_read_str(b, &session_id);
io_read_buf(b, &serial, sizeof(serial));
io_read_str(b, &last_mod);
- if (b->fd != -1)
+ if (ibuf_fd_avail(b))
errx(1, "received unexpected fd");
rrdp_new(id, local, notify, session_id, serial, last_mod);
break;
case RRDP_HTTP_INI:
- if (b->fd == -1)
- errx(1, "expected fd not received");
s = rrdp_get(id);
if (s == NULL)
errx(1, "http ini, rrdp session %u does not exist", id);
if (s->state != RRDP_STATE_WAIT)
errx(1, "%s: bad internal state", s->local);
- s->infd = b->fd;
+ s->infd = ibuf_fd_get(b);
+ if (s->infd == -1)
+ errx(1, "expected fd not received");
s->state = RRDP_STATE_PARSE;
if (s->aborted) {
rrdp_abort_req(s);
@@ -454,7 +454,7 @@ rrdp_input_handler(int fd)
case RRDP_HTTP_FIN:
io_read_buf(b, &res, sizeof(res));
io_read_str(b, &last_mod);
- if (b->fd != -1)
+ if (ibuf_fd_avail(b))
errx(1, "received unexpected fd");
s = rrdp_get(id);
@@ -472,7 +472,7 @@ rrdp_input_handler(int fd)
s = rrdp_get(id);
if (s == NULL)
errx(1, "file, rrdp session %u does not exist", id);;
- if (b->fd != -1)
+ if (ibuf_fd_avail(b))
errx(1, "received unexpected fd");
io_read_buf(b, &ok, sizeof(ok));
if (ok != 1)
@@ -482,7 +482,7 @@ rrdp_input_handler(int fd)
rrdp_finished(s);
break;
case RRDP_ABORT:
- if (b->fd != -1)
+ if (ibuf_fd_avail(b))
errx(1, "received unexpected fd");
s = rrdp_get(id);
if (s != NULL)