From e4478d7e46876142b5f75cfc93ef649a6bde05ae Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Fri, 18 Jan 2019 21:30:06 +0000 Subject: [PATCH] Use a private definition of osockaddr rather then relying on type namespace polution in sys/socket.h. Also remove support for operation on 4.3BSD. PR: 224529 Differential Revision: https://reviews.freebsd.org/D14505 --- include/protocols/talkd.h | 15 ++++++++++++--- libexec/talkd/talkd.c | 3 ++- usr.bin/talk/invite.c | 6 +----- usr.bin/talk/look_up.c | 6 +----- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/protocols/talkd.h b/include/protocols/talkd.h index f8b74b9c6981..dc79bef77b6e 100644 --- a/include/protocols/talkd.h +++ b/include/protocols/talkd.h @@ -54,6 +54,15 @@ * stream connection through which the conversation takes place. */ +/* + * The talk protocol embeds a 4.3BSD sockaddr. Define our own version + * rather then relying on namespace polution in kernel headers. + */ +struct tsockaddr { + unsigned short sa_family; + char sa_data[14]; +}; + /* * Client->server request message format. */ @@ -63,8 +72,8 @@ typedef struct { u_char answer; /* not used */ u_char pad; u_int32_t id_num; /* message id */ - struct osockaddr addr; /* old (4.3) style */ - struct osockaddr ctl_addr; /* old (4.3) style */ + struct tsockaddr addr; /* old (4.3) style */ + struct tsockaddr ctl_addr; /* old (4.3) style */ int32_t pid; /* caller's process id */ #define NAME_SIZE 12 char l_name[NAME_SIZE];/* caller's name */ @@ -82,7 +91,7 @@ typedef struct { u_char answer; /* respose to request message, see below */ u_char pad; u_int32_t id_num; /* message id */ - struct osockaddr addr; /* address for establishing conversation */ + struct tsockaddr addr; /* address for establishing conversation */ } CTL_RESPONSE; #define TALK_VERSION 1 /* protocol version */ diff --git a/libexec/talkd/talkd.c b/libexec/talkd/talkd.c index 984afbce905a..eb609207b156 100644 --- a/libexec/talkd/talkd.c +++ b/libexec/talkd/talkd.c @@ -114,7 +114,8 @@ main(int argc, char *argv[]) continue; } lastmsgtime = time(0); - (void)memcpy(&ctl_addr, &mp->ctl_addr, sizeof(ctl_addr)); + (void)memcpy(&ctl_addr.sa_data, &mp->ctl_addr.sa_data, + sizeof(ctl_addr.sa_data)); ctl_addr.sa_family = ntohs(mp->ctl_addr.sa_family); ctl_addr.sa_len = sizeof(ctl_addr); process_request(mp, &response); diff --git a/usr.bin/talk/invite.c b/usr.bin/talk/invite.c index 8f811a5c55e4..e000e54b0c35 100644 --- a/usr.bin/talk/invite.c +++ b/usr.bin/talk/invite.c @@ -77,13 +77,9 @@ invite_remote(void) itimer.it_interval = itimer.it_value; if (listen(sockt, 5) != 0) p_error("Error on attempt to listen for caller"); -#ifdef MSG_EOR /* copy new style sockaddr to old, swap family (short in old) */ - msg.addr = *(struct osockaddr *)&my_addr; /* XXX new to old style*/ + msg.addr = *(struct tsockaddr *)&my_addr; msg.addr.sa_family = htons(my_addr.sin_family); -#else - msg.addr = *(struct sockaddr *)&my_addr; -#endif msg.id_num = htonl(-1); /* an impossible id_num */ invitation_waiting = 1; announce_invite(); diff --git a/usr.bin/talk/look_up.c b/usr.bin/talk/look_up.c index 1b6ba327c59f..3c676b9c1ea2 100644 --- a/usr.bin/talk/look_up.c +++ b/usr.bin/talk/look_up.c @@ -59,13 +59,9 @@ check_local(void) struct sockaddr addr; /* the rest of msg was set up in get_names */ -#ifdef MSG_EOR /* copy new style sockaddr to old, swap family (short in old) */ - msg.ctl_addr = *(struct osockaddr *)&ctl_addr; + msg.ctl_addr = *(struct tsockaddr *)&ctl_addr; msg.ctl_addr.sa_family = htons(ctl_addr.sin_family); -#else - msg.ctl_addr = *(struct sockaddr *)&ctl_addr; -#endif /* must be initiating a talk */ if (!look_for_invite(rp)) return (0);