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);