X-Git-Url: https://git.saurik.com/apple/ipsec.git/blobdiff_plain/869d26af2154b0619928167c83079c8c0bf7163d..85f41bec1acc617e559a0eb4ae1c926b61c3169f:/ipsec-tools/libipsec/policy_parse.y diff --git a/ipsec-tools/libipsec/policy_parse.y b/ipsec-tools/libipsec/policy_parse.y index 74d1e35..7e84cc3 100644 --- a/ipsec-tools/libipsec/policy_parse.y +++ b/ipsec-tools/libipsec/policy_parse.y @@ -84,7 +84,7 @@ #include <errno.h> #include "config.h" - +#include "var.h" #include "ipsec_strerror.h" #include "libpfkey.h" @@ -105,17 +105,17 @@ static int offset = 0; /* offset of pbuf */ static int p_dir, p_type, p_protocol, p_mode, p_level, p_reqid; static u_int32_t p_priority = 0; static long p_priority_offset = 0; -static struct sockaddr *p_src = NULL; -static struct sockaddr *p_dst = NULL; +static struct sockaddr_storage *p_src = NULL; +static struct sockaddr_storage *p_dst = NULL; struct _val; extern void yyerror __P((char *msg)); -static struct sockaddr *parse_sockaddr __P((struct _val *addrbuf, +static struct sockaddr_storage *parse_sockaddr __P((struct _val *addrbuf, struct _val *portbuf)); static int rule_check __P((void)); static int init_x_policy __P((void)); -static int set_x_request __P((struct sockaddr *, struct sockaddr *)); -static int set_sockaddr __P((struct sockaddr *)); +static int set_x_request __P((struct sockaddr_storage *, struct sockaddr_storage *)); +static int set_sockaddr __P((struct sockaddr_storage *)); static void policy_parse_request_init __P((void)); static void *policy_parse __P((const char *, int)); @@ -390,7 +390,7 @@ yyerror(msg) return; } -static struct sockaddr * +static struct sockaddr_storage * parse_sockaddr(addrbuf, portbuf) struct _val *addrbuf; struct _val *portbuf; @@ -399,7 +399,7 @@ parse_sockaddr(addrbuf, portbuf) char *addr; char *serv = NULL; int error; - struct sockaddr *newaddr = NULL; + struct sockaddr_storage *newaddr = NULL; int addr_len; int serv_len; @@ -481,7 +481,7 @@ rule_check() return -1; } } - else if (p_src->sa_family != p_dst->sa_family) { + else if (p_src->ss_family != p_dst->ss_family) { __ipsec_errcode = EIPSEC_FAMILY_MISMATCH; return -1; } @@ -508,7 +508,7 @@ init_x_policy() tlen = sizeof(struct sadb_x_policy); memset(pbuf, 0, tlen); - p = (struct sadb_x_policy *)pbuf; + p = ALIGNED_CAST(struct sadb_x_policy *)pbuf; p->sadb_x_policy_len = 0; /* must update later */ p->sadb_x_policy_exttype = SADB_X_EXT_POLICY; p->sadb_x_policy_type = p_type; @@ -534,15 +534,15 @@ init_x_policy() static int set_x_request(src, dst) - struct sockaddr *src, *dst; + struct sockaddr_storage *src, *dst; { struct sadb_x_ipsecrequest *p; int reqlen; u_int8_t *n; reqlen = sizeof(*p) - + (src ? sysdep_sa_len(src) : 0) - + (dst ? sysdep_sa_len(dst) : 0); + + (src ? sysdep_sa_len((struct sockaddr *)src) : 0) + + (dst ? sysdep_sa_len((struct sockaddr *)dst) : 0); tlen += reqlen; /* increment to total length */ n = realloc(pbuf, tlen); @@ -552,7 +552,7 @@ set_x_request(src, dst) } pbuf = n; - p = (struct sadb_x_ipsecrequest *)&pbuf[offset]; + p = ALIGNED_CAST(struct sadb_x_ipsecrequest *)&pbuf[offset]; // Wcast-align fix - malloc'd buffer/offset 64 bit multiple p->sadb_x_ipsecrequest_len = reqlen; p->sadb_x_ipsecrequest_proto = p_protocol; p->sadb_x_ipsecrequest_mode = p_mode; @@ -569,7 +569,7 @@ set_x_request(src, dst) static int set_sockaddr(addr) - struct sockaddr *addr; + struct sockaddr_storage *addr; { if (addr == NULL) { __ipsec_errcode = EIPSEC_NO_ERROR; @@ -578,9 +578,9 @@ set_sockaddr(addr) /* tlen has already incremented */ - memcpy(&pbuf[offset], addr, sysdep_sa_len(addr)); + memcpy(&pbuf[offset], addr, sysdep_sa_len((struct sockaddr *)addr)); - offset += sysdep_sa_len(addr); + offset += sysdep_sa_len((struct sockaddr *)addr); __ipsec_errcode = EIPSEC_NO_ERROR; return 0; @@ -631,7 +631,7 @@ policy_parse(msg, msglen) } /* update total length */ - ((struct sadb_x_policy *)pbuf)->sadb_x_policy_len = PFKEY_UNIT64(tlen); + (ALIGNED_CAST(struct sadb_x_policy *)pbuf)->sadb_x_policy_len = PFKEY_UNIT64(tlen); __ipsec_errcode = EIPSEC_NO_ERROR;