(krb5_sockaddr2port): new function for grabbing the port number out of
the sockaddr git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6371 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -45,6 +45,7 @@ struct addr_operations {
|
||||
krb5_address_type atype;
|
||||
size_t max_sockaddr_size;
|
||||
krb5_error_code (*sockaddr2addr)(const struct sockaddr *, krb5_address *);
|
||||
krb5_error_code (*sockaddr2port)(const struct sockaddr *, int16_t *);
|
||||
void (*addr2sockaddr)(const krb5_address *, struct sockaddr *,
|
||||
int *sa_size, int port);
|
||||
void (*h_addr2sockaddr)(const char *, struct sockaddr *, int *, int);
|
||||
@@ -70,6 +71,15 @@ ipv4_sockaddr2addr (const struct sockaddr *sa, krb5_address *a)
|
||||
return krb5_data_copy(&a->address, buf, 4);
|
||||
}
|
||||
|
||||
static krb5_error_code
|
||||
ipv4_sockaddr2port (const struct sockaddr *sa, int16_t *port)
|
||||
{
|
||||
const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
|
||||
|
||||
*port = sin->sin_port;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ipv4_addr2sockaddr (const krb5_address *a,
|
||||
struct sockaddr *sa,
|
||||
@@ -204,6 +214,15 @@ ipv6_sockaddr2addr (const struct sockaddr *sa, krb5_address *a)
|
||||
}
|
||||
}
|
||||
|
||||
static krb5_error_code
|
||||
ipv6_sockaddr2port (const struct sockaddr *sa, int16_port *port)
|
||||
{
|
||||
const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
|
||||
|
||||
*port = sin6->sin6_port;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ipv6_addr2sockaddr (const krb5_address *a,
|
||||
struct sockaddr *sa,
|
||||
@@ -309,13 +328,19 @@ ipv6_parse_addr (const char *address, krb5_address *addr)
|
||||
|
||||
static struct addr_operations at[] = {
|
||||
{AF_INET, KRB5_ADDRESS_INET, sizeof(struct sockaddr_in),
|
||||
ipv4_sockaddr2addr, ipv4_addr2sockaddr,
|
||||
ipv4_h_addr2sockaddr, ipv4_h_addr2addr,
|
||||
ipv4_sockaddr2addr,
|
||||
ipv4_sockaddr2port,
|
||||
ipv4_addr2sockaddr,
|
||||
ipv4_h_addr2sockaddr,
|
||||
ipv4_h_addr2addr,
|
||||
ipv4_uninteresting, ipv4_anyaddr, ipv4_print_addr, ipv4_parse_addr},
|
||||
#ifdef HAVE_IPV6
|
||||
{AF_INET6, KRB5_ADDRESS_INET6, sizeof(struct sockaddr_in6),
|
||||
ipv6_sockaddr2addr, ipv6_addr2sockaddr,
|
||||
ipv6_h_addr2sockaddr, ipv6_h_addr2addr,
|
||||
ipv6_sockaddr2addr,
|
||||
ipv6_sockaddr2port,
|
||||
ipv6_addr2sockaddr,
|
||||
ipv6_h_addr2sockaddr,
|
||||
ipv6_h_addr2addr,
|
||||
ipv6_uninteresting, ipv6_anyaddr, ipv6_print_addr, ipv6_parse_addr}
|
||||
#endif
|
||||
};
|
||||
@@ -359,6 +384,15 @@ krb5_sockaddr2address (const struct sockaddr *sa, krb5_address *addr)
|
||||
return (*a->sockaddr2addr)(sa, addr);
|
||||
}
|
||||
|
||||
krb5_error_code
|
||||
krb5_sockaddr2port (const struct sockaddr *sa, int16_t *port)
|
||||
{
|
||||
struct addr_operations *a = find_af(sa->sa_family);
|
||||
if (a == NULL)
|
||||
return KRB5_PROG_ATYPE_NOSUPP;
|
||||
return (*a->sockaddr2port)(sa, port);
|
||||
}
|
||||
|
||||
krb5_error_code
|
||||
krb5_addr2sockaddr (const krb5_address *addr,
|
||||
struct sockaddr *sa,
|
||||
|
Reference in New Issue
Block a user