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
This commit is contained in:
brooks 2019-01-18 21:30:06 +00:00
parent d06a69787c
commit 3d6c5e19e8
4 changed files with 16 additions and 14 deletions

View File

@ -54,6 +54,15 @@
* stream connection through which the conversation takes place. * 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. * Client->server request message format.
*/ */
@ -63,8 +72,8 @@ typedef struct {
u_char answer; /* not used */ u_char answer; /* not used */
u_char pad; u_char pad;
u_int32_t id_num; /* message id */ u_int32_t id_num; /* message id */
struct osockaddr addr; /* old (4.3) style */ struct tsockaddr addr; /* old (4.3) style */
struct osockaddr ctl_addr; /* old (4.3) style */ struct tsockaddr ctl_addr; /* old (4.3) style */
int32_t pid; /* caller's process id */ int32_t pid; /* caller's process id */
#define NAME_SIZE 12 #define NAME_SIZE 12
char l_name[NAME_SIZE];/* caller's name */ 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 answer; /* respose to request message, see below */
u_char pad; u_char pad;
u_int32_t id_num; /* message id */ u_int32_t id_num; /* message id */
struct osockaddr addr; /* address for establishing conversation */ struct tsockaddr addr; /* address for establishing conversation */
} CTL_RESPONSE; } CTL_RESPONSE;
#define TALK_VERSION 1 /* protocol version */ #define TALK_VERSION 1 /* protocol version */

View File

@ -114,7 +114,8 @@ main(int argc, char *argv[])
continue; continue;
} }
lastmsgtime = time(0); 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_family = ntohs(mp->ctl_addr.sa_family);
ctl_addr.sa_len = sizeof(ctl_addr); ctl_addr.sa_len = sizeof(ctl_addr);
process_request(mp, &response); process_request(mp, &response);

View File

@ -77,13 +77,9 @@ invite_remote(void)
itimer.it_interval = itimer.it_value; itimer.it_interval = itimer.it_value;
if (listen(sockt, 5) != 0) if (listen(sockt, 5) != 0)
p_error("Error on attempt to listen for caller"); p_error("Error on attempt to listen for caller");
#ifdef MSG_EOR
/* copy new style sockaddr to old, swap family (short in old) */ /* 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); 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 */ msg.id_num = htonl(-1); /* an impossible id_num */
invitation_waiting = 1; invitation_waiting = 1;
announce_invite(); announce_invite();

View File

@ -59,13 +59,9 @@ check_local(void)
struct sockaddr addr; struct sockaddr addr;
/* the rest of msg was set up in get_names */ /* the rest of msg was set up in get_names */
#ifdef MSG_EOR
/* copy new style sockaddr to old, swap family (short in old) */ /* 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); msg.ctl_addr.sa_family = htons(ctl_addr.sin_family);
#else
msg.ctl_addr = *(struct sockaddr *)&ctl_addr;
#endif
/* must be initiating a talk */ /* must be initiating a talk */
if (!look_for_invite(rp)) if (!look_for_invite(rp))
return (0); return (0);