Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2015-10-29 10:01:09 +00:00
commit e8bb385d6d

29
proc.c
View File

@ -48,6 +48,7 @@ struct tmuxpeer {
void *arg; void *arg;
}; };
static int peer_check_version(struct tmuxpeer *, struct imsg *);
static void proc_update_event(struct tmuxpeer *); static void proc_update_event(struct tmuxpeer *);
static void static void
@ -56,7 +57,6 @@ proc_event_cb(unused int fd, short events, void *arg)
struct tmuxpeer *peer = arg; struct tmuxpeer *peer = arg;
ssize_t n; ssize_t n;
struct imsg imsg; struct imsg imsg;
int v;
if (!(peer->flags & PEER_BAD) && (events & EV_READ)) { if (!(peer->flags & PEER_BAD) && (events & EV_READ)) {
if ((n = imsg_read(&peer->ibuf)) == -1 || n == 0) { if ((n = imsg_read(&peer->ibuf)) == -1 || n == 0) {
@ -72,14 +72,7 @@ proc_event_cb(unused int fd, short events, void *arg)
break; break;
log_debug("peer %p message %d", peer, imsg.hdr.type); log_debug("peer %p message %d", peer, imsg.hdr.type);
v = imsg.hdr.peerid; if (peer_check_version(peer, &imsg) != 0) {
if (imsg.hdr.type != MSG_VERSION &&
v != PROTOCOL_VERSION) {
log_debug("peer %p bad version %d", peer, v);
proc_send(peer, MSG_VERSION, -1, NULL, 0);
peer->flags |= PEER_BAD;
if (imsg.fd != -1) if (imsg.fd != -1)
close(imsg.fd); close(imsg.fd);
imsg_free(&imsg); imsg_free(&imsg);
@ -114,6 +107,24 @@ proc_signal_cb(int signo, unused short events, void *arg)
tp->signalcb(signo); tp->signalcb(signo);
} }
static int
peer_check_version(struct tmuxpeer *peer, struct imsg *imsg)
{
int version;
version = imsg->hdr.peerid & 0xff;
if (imsg->hdr.type != MSG_VERSION && version != PROTOCOL_VERSION) {
log_debug("peer %p bad version %d", peer, version);
proc_send(peer, MSG_VERSION, -1, NULL, 0);
peer->flags |= PEER_BAD;
return (-1);
}
imsg->hdr.peerid >>= 8;
return (0);
}
static void static void
proc_update_event(struct tmuxpeer *peer) proc_update_event(struct tmuxpeer *peer)
{ {