with_radacctdir
with_raddbdir
with_dictdir
-with_udpfromto
with_cap
with_cap_lib_dir
with_cap_include_dir
--with-radacctdir=DIR directory for detail files LOGDIR/radacct
--with-raddbdir=DIR directory for config files SYSCONFDIR/raddb
--with-dictdir=DIR directory for dictionary files DATAROOTDIR/freeradius
- --with-udpfromto compile in support for udpfromto (default=yes)
--with-cap build with cap if available (default=yes)
--with-cap-lib-dir=DIR directory in which to look for cap library files
--with-cap-include-dir=DIR
- WITH_UDPFROMTO=yes
-
-
-# Check whether --with-udpfromto was given.
-if test "${with_udpfromto+set}" = set; then :
- withval=$with_udpfromto; case "$withval" in
- yes|no|'')
- ;;
- no|'')
- ;;
- *)
- as_fn_error $? "--with[out]-udpfromto expects yes|no" "$LINENO" 5
- ;;
- esac
-fi
-
-
- if test x"$withval" == x"yes"; then
-
-$as_echo "#define WITH_UDPFROMTO 1" >>confdefs.h
-
- else
-
-$as_echo "#define WITH_UDPFROMTO /**/" >>confdefs.h
-
- fi
-
-
-
-
WITH_CAP=yes
modconfdir='${raddbdir}/mods-config'
AC_SUBST(modconfdir)
-dnl #############################################################
-dnl #
-dnl # 0d. Enable/disable build time features
-dnl #
-dnl #############################################################
-
-AX_WITH_FEATURE_ARGS([udpfromto],[yes])
-
dnl #############################################################
dnl #
dnl # 0e. Library/include paths
/* define if the server was built with -DNDEBUG */
#undef WITH_NDEBUG
-/* define if you want udpfromto */
-#undef WITH_UDPFROMTO
-
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
*/
void common_packet_debug(request_t *request, fr_radius_packet_t *packet, bool received)
{
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
char if_name[IFNAMSIZ];
#endif
log_request(L_DBG, L_DBG_LVL_1, request, __FILE__, __LINE__, "%s code %u Id %i from %s%pV%s:%i to %s%pV%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"length %zu",
fr_box_ipaddr(packet->socket.inet.dst_ipaddr),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port,
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
packet->socket.inet.ifindex ? "via " : "",
packet->socket.inet.ifindex ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
packet->socket.inet.ifindex ? " " : "",
* request.
*/
if (cl_srcipaddr) {
-#ifdef WITH_UDPFROMTO
switch (c->ipaddr.af) {
case AF_INET:
if (fr_inet_pton4(&c->src_ipaddr, cl_srcipaddr, -1, true, false, true) < 0) {
cf_log_err(cs, "ipaddr was not defined");
goto error;
}
-#else
- WARN("Server not built with udpfromto, ignoring client src_ipaddr");
-#endif
cl_srcipaddr = NULL;
}
*/
void common_packet_debug(request_t *request, fr_radius_packet_t *packet, bool received)
{
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
char if_name[IFNAMSIZ];
#endif
log_request(L_DBG, L_DBG_LVL_1, request, __FILE__, __LINE__, "%s code %u Id %i from %s%pV%s:%i to %s%pV%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"length %zu",
fr_box_ipaddr(packet->dst_ipaddr),
packet->dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->dst_port,
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
packet->ifindex ? "via " : "",
packet->ifindex ? fr_ifname_from_ifindex(if_name, packet->ifindex) : "",
packet->ifindex ? " " : "",
*/
if (socket_dont_inherit(sockfd) < 0) goto error;
-#ifdef WITH_UDPFROMTO
/*
* Initialize udpfromto for UDP sockets.
*/
fr_strerror_printf("Failed initializing udpfromto: %s", fr_syserror(errno));
goto error;
}
-#endif
/*
* Make sure we don't get v4 and v6 packets on inaddr_any sockets.
#include <freeradius-devel/util/syserror.h>
#include <freeradius-devel/util/udp.h>
-/*
- * This is easier than ifdef's in the function definition.
- */
-#ifdef WITH_UDPFROMTO
-#define UDP_UNUSED
-#else
-#define UDP_UNUSED UNUSED
-#endif
-
#define FR_DEBUG_STRERROR_PRINTF if (fr_debug_lvl) fr_strerror_printf
/** Send a packet via a UDP socket.
* @param[in] dst_port of the packet.
*/
ssize_t udp_send(int sockfd, void *data, size_t data_len, int flags,
- UDP_UNUSED int ifindex,
- UDP_UNUSED fr_ipaddr_t const *src_ipaddr, UDP_UNUSED uint16_t src_port,
+ int ifindex,
+ fr_ipaddr_t const *src_ipaddr, uint16_t src_port,
fr_ipaddr_t const *dst_ipaddr, uint16_t dst_port)
{
int rcode;
*/
if (fr_ipaddr_to_sockaddr(dst_ipaddr, dst_port, &dst, &sizeof_dst) < 0) return -1;
-#ifdef WITH_UDPFROMTO
/*
* And if they don't specify a source IP address, don't
* use udpfromto.
fr_ipaddr_to_sockaddr(src_ipaddr, src_port, &src, &sizeof_src);
rcode = sendfromto(sockfd, data, data_len, 0,
+ ifindex,
(struct sockaddr *)&src, sizeof_src,
- (struct sockaddr *)&dst, sizeof_dst, ifindex);
- } else
-#endif
+ (struct sockaddr *)&dst, sizeof_dst);
+ } else {
rcode = sendto(sockfd, data, data_len, 0,
(struct sockaddr *) &dst, sizeof_dst);
+ }
}
if (rcode < 0) fr_strerror_printf("udp_sendto failed: %s", fr_syserror(errno));
* Receive the packet. The OS will discard any data in the
* packet after "len" bytes.
*/
-#ifdef WITH_UDPFROMTO
if (dst_ipaddr) {
slen = recvfromto(sockfd, data, data_len, sock_flags,
ifindex,
(struct sockaddr *)&src, &sizeof_src);
if (slen <= 0) goto done;
}
-#else
- slen = recvfrom(sockfd, data, data_len, sock_flags,
- (struct sockaddr *)&src, &sizeof_src);
- if (slen <= 0) goto done;
-
- /*
- * Get the destination address, if requested.
- */
- if (dst_ipaddr && (getsockname(sockfd, (struct sockaddr *)&dst, &sizeof_dst) < 0)) {
- return -1;
- }
-
- if (ifindex) *ifindex = 0;
-#endif
if (fr_ipaddr_from_sockaddr(&src, sizeof_src, src_ipaddr, &port) < 0) {
fr_strerror_printf_push("Failed converting sockaddr to ipaddr");
#include <freeradius-devel/build.h>
#include <freeradius-devel/missing.h>
-#ifdef WITH_UDPFROMTO
-# include <freeradius-devel/util/udpfromto.h>
-#endif
#include <freeradius-devel/util/inet.h>
#include <freeradius-devel/util/time.h>
+#include <freeradius-devel/util/udpfromto.h>
#define UDP_FLAGS_NONE (0)
#define UDP_FLAGS_CONNECTED (1 << 0)
#include <freeradius-devel/util/udpfromto.h>
-#ifdef WITH_UDPFROMTO
-
#ifdef HAVE_SYS_UIO_H
# include <sys/uio.h>
#endif
}
#endif /* TESTING */
-#endif /* WITH_UDPFROMTO */
extern "C" {
#endif
-#ifdef WITH_UDPFROMTO
#include <freeradius-devel/build.h>
#include <freeradius-devel/missing.h>
#include <freeradius-devel/util/time.h>
int ifindex,
struct sockaddr *from, socklen_t fromlen,
struct sockaddr *to, socklen_t tolen);
-#endif
-
#ifdef __cplusplus
}
#endif
char src_ipaddr[INET6_ADDRSTRLEN];
char dst_ipaddr[INET6_ADDRSTRLEN];
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#if defined(WITH_IFINDEX_NAME_RESOLUTION)
char if_name[IFNAMSIZ];
#endif
fr_pair_t *vp;
* This really belongs in a utility library
*/
printf("%s %s Id %08x from %s%s%s:%i to %s%s%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"length %zu\n",
dst_ipaddr, sizeof(dst_ipaddr)),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port,
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
packet->socket.inet.ifindex ? "via " : "",
packet->socket.inet.ifindex ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
packet->socket.inet.ifindex ? " " : "",
static void dhcpv4_packet_debug(request_t *request, fr_radius_packet_t *packet, bool received)
{
int i;
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
char if_name[IFNAMSIZ];
#endif
if (!RDEBUG_ENABLED) return;
log_request(L_DBG, L_DBG_LVL_1, request, __FILE__, __LINE__, "%s %s XID %08x from %s%pV%s:%i to %s%pV%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"",
fr_box_ipaddr(packet->socket.inet.dst_ipaddr),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
, packet->socket.inet.ifindex ? "via " : "",
packet->socket.inet.ifindex ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
packet->socket.inet.ifindex ? " " : ""
*/
static void dhcpv6_packet_debug(request_t *request, fr_radius_packet_t *packet, bool received)
{
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
char if_name[IFNAMSIZ];
#endif
if (!RDEBUG_ENABLED) return;
log_request(L_DBG, L_DBG_LVL_1, request, __FILE__, __LINE__, "%s %s XID %08x from %s%pV%s:%i to %s%pV%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"",
fr_box_ipaddr(packet->socket.inet.dst_ipaddr),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
, packet->socket.inet.ifindex ? "via " : "",
packet->socket.inet.ifindex ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
packet->socket.inet.ifindex ? " " : ""
if (data_len > 0) return data_len;
}
-#ifdef WITH_UDPFROMTO
/*
* Overwrite the src ip address on the outbound packet
* with the one specified by the client. This is useful
if (client->src_ipaddr.af != AF_UNSPEC) {
request->reply->socket.inet.src_ipaddr = client->src_ipaddr;
}
-#endif
data_len = fr_radius_encode(buffer, buffer_len, request->packet->data,
client->secret, talloc_array_length(client->secret) - 1,
if (data_len > 0) return data_len;
}
-#ifdef WITH_UDPFROMTO
/*
* Overwrite the src ip address on the outbound packet
* with the one specified by the client. This is useful
if (client->src_ipaddr.af != AF_UNSPEC) {
request->reply->socket.inet.src_ipaddr = client->src_ipaddr;
}
-#endif
fr_cursor_talloc_iter_init(&cursor, &request->reply_pairs, fr_proto_next_encodable, dict_vmps, fr_pair_t);
return RLM_MODULE_HANDLED;
}
-#if 0
-#ifdef WITH_UDPFROMTO
/*
* Overwrite the src ip address on the outbound packet
* with the one specified by the client.
* and other routing issues.
*/
if (request->client && (request->client->src_ipaddr.af != AF_UNSPEC)) {
- request->reply->src_ipaddr = request->client->src_ipaddr;
+ request->reply->socket.inet.src_ipaddr = request->client->src_ipaddr;
}
-#endif
-#endif
if (RDEBUG_ENABLED) common_packet_debug(request, request->reply, false);
break;
{
char src_ipaddr[FR_IPADDR_STRLEN];
char dst_ipaddr[FR_IPADDR_STRLEN];
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
char if_name[IFNAMSIZ];
#endif
if (is_radius_code(packet->code)) {
fr_log(log, L_DBG, __FILE__, __LINE__,
"%s %s Id %i from %s%s%s:%i to %s%s%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"length %zu\n",
fr_inet_ntop(dst_ipaddr, sizeof(dst_ipaddr), &packet->socket.inet.dst_ipaddr),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port,
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
received ? "via " : "",
received ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
received ? " " : "",
} else {
fr_log(log, L_DBG, __FILE__, __LINE__,
"%s code %u Id %i from %s%s%s:%i to %s%s%s:%i "
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
"%s%s%s"
#endif
"length %zu\n",
fr_inet_ntop(dst_ipaddr, sizeof(dst_ipaddr), &packet->socket.inet.dst_ipaddr),
packet->socket.inet.dst_ipaddr.af == AF_INET6 ? "]" : "",
packet->socket.inet.dst_port,
-#if defined(WITH_UDPFROMTO) && defined(WITH_IFINDEX_NAME_RESOLUTION)
+#ifdef WITH_IFINDEX_NAME_RESOLUTION
received ? "via " : "",
received ? fr_ifname_from_ifindex(if_name, packet->socket.inet.ifindex) : "",
received ? " " : "",
#include <freeradius-devel/util/base.h>
#include <freeradius-devel/util/udp.h>
-
-#ifdef WITH_UDPFROMTO
#include <freeradius-devel/util/udpfromto.h>
-#endif
#include <fcntl.h>
#include <ctype.h>
/*
* If the socket is TCP, call write(). Calling sendto()
- * is allowed on some platforms, but it's not nice. Even
- * worse, if UDPFROMTO is defined, we *can't* use it on
- * TCP sockets. So... just call write().
+ * is allowed on some platforms, but it's not nice.
*/
if (packet->socket.proto == IPPROTO_TCP) {
ssize_t rcode;