Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2010 09:24:23 GMT
From:      Alex Deiter <alex.deiter@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/144682: [PATCH] net/udpxy: update from 1.0.14 up to 1.0.15
Message-ID:  <201003120924.o2C9ON6b041019@www.freebsd.org>
Resent-Message-ID: <201003120930.o2C9U2cl081711@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         144682
>Category:       ports
>Synopsis:       [PATCH] net/udpxy: update from 1.0.14 up to 1.0.15
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 12 09:30:02 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Alex Deiter
>Release:        9.0-CURRENT
>Organization:
N/A
>Environment:
FreeBSD x60.deiter.net.ru 9.0-CURRENT FreeBSD 9.0-CURRENT #0: Tue Feb 16 17:22:58 MSK 2010     root@x60.deiter.net.ru:/usr/obj/usr/src/sys/X60  amd64

>Description:
net/udpxy: update from 1.0.14 up to 1.0.15

Changes in Build 15 (XX-Mar-2010) by upstream:

(*) FIXED: not compiling with -O2/O3 flags under gcc 
    (select additional options in USER_OPT env variable)
(*) FIXED: would not allow running more than one udpxy daemon

Changes in port:

* add udpxy_port variable for rc script (default value 4022)
* set properly variable for pidfile
* enable client statistics by default
* allow to set IPv4 address/interface to listen|multicast via -a|-m

Thanks a lot!
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- net/udpxy/Makefile.orig	2010-03-12 10:02:53.329479936 +0300
+++ net/udpxy/Makefile	2010-03-12 10:03:38.459055532 +0300
@@ -6,8 +6,7 @@
 #
 
 PORTNAME=	udpxy
-PORTVERSION=	1.0.14
-PORTREVISION=	1
+PORTVERSION=	1.0.15
 CATEGORIES=	net
 MASTER_SITES=	SF/${PORTNAME}/${PORTNAME}/${RELEASE_MASCOT}-${PORTVERSION:R}
 DISTNAME=	${PORTNAME}.${PORTVERSION:R}-${RELEASE_MASCOT}-${PORTVERSION:E}
--- net/udpxy/distinfo.orig	2010-03-12 10:02:58.687546206 +0300
+++ net/udpxy/distinfo	2010-03-12 10:05:24.131403509 +0300
@@ -1,3 +1,3 @@
-MD5 (udpxy.1.0-Chipmunk-14.tgz) = 96c7a71bddd90c85721926af0435bab9
-SHA256 (udpxy.1.0-Chipmunk-14.tgz) = 11f0efa7726c6daeb6b7b40a06507d5818662f55548857786a90b8610cef8010
-SIZE (udpxy.1.0-Chipmunk-14.tgz) = 79232
+MD5 (udpxy.1.0-Chipmunk-15.tgz) = ef992c1f2f4622439252968c8e920b20
+SHA256 (udpxy.1.0-Chipmunk-15.tgz) = ca2ded933336c7cd6afe530539a85624b2cd497a11b79dc6cf051be25e91f14c
+SIZE (udpxy.1.0-Chipmunk-15.tgz) = 79093
--- net/udpxy/files/udpxy.in.orig	2010-03-12 10:07:03.014665411 +0300
+++ net/udpxy/files/udpxy.in	2010-03-12 11:56:18.695609022 +0300
@@ -6,20 +6,29 @@
 # PROVIDE: udpxy
 # REQUIRE: NETWORKING
 
-# The following variables are provided to control startup of udpxy:
-# rc configuration file (eg /etc/rc.conf):
+# Define these udpxy_* variables in one of these files:
+#	/etc/rc.conf
+#	/etc/rc.conf.local
+#	/etc/rc.conf.d/udpxy
+#
 # udpxy_enable (bool):	Set to "NO" by default.
 #			Set it to "YES" to enable udpxy.
-# udpxy_flags (str):	Set to "" by default.
-#			Extra flags passed to start command.
+# udpxy_port (number):	Set to "4022" by default.
+#			Set listening port number.
+# udpxy_flags (str):    Set to "-S" by default.
+#                       Extra flags passed to start command.
 
 . %%RC_SUBR%%
 
 name="udpxy"
-rcvar=`set_rcvar`
-command="%%PREFIX%%/sbin/${name}"
-command_args="${udpxy_flags}"
+rcvar=$(set_rcvar)
+
 udpxy_enable=${udpxy_enable-"NO"}
+udpxy_port=${udpxy_port-"4022"}
+udpxy_flags=${udpxy_flags-"-S"}
+command="%%PREFIX%%/sbin/${name}"
+pidfile="/var/run/${name}${udpxy_port}.pid"
+command_args="-p ${udpxy_port} ${udpxy_flags}"
 
 load_rc_config $name
 run_rc_command "$1"
--- net/udpxy/files/patch-ifaddr.c.orig	2010-03-12 12:04:16.690720291 +0300
+++ net/udpxy/files/patch-ifaddr.c	2010-01-15 00:16:52.727321532 +0300
@@ -0,0 +1,149 @@
+--- ifaddr.c.orig	2010-01-14 23:49:24.515378502 +0300
++++ ifaddr.c	2010-01-14 23:50:07.723908032 +0300
+@@ -10,6 +10,7 @@
+ #include <stdlib.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <ifaddrs.h>
+ 
+ #include <assert.h>
+ #include <limits.h>
+@@ -21,114 +22,29 @@
+  */
+ int
+ if2addr( const char* ifname,
+-             struct sockaddr *addr, size_t addrlen )
++             struct sockaddr_in *addr, size_t addrlen )
+ {
+-    int rc, sockfd;
+-    char *buf, *rec;
+-    size_t buflen, sa_len;
+-    int last_len;
+-    struct ifconf  ifc;
+-    struct ifreq   ifr;
+-
+-    static size_t IFC_TABLE_SIZE;
+-
+-    static const size_t IFC_ENTRIES = 32;
+-    static const size_t MAX_IFCBUF_SIZE = (1024 * 256);
+-
+-    IFC_TABLE_SIZE = sizeof(struct ifreq) * IFC_ENTRIES;
++    int rc = -1;
++    struct ifaddrs *ifr, *ifc;
++    struct sockaddr_in *sin;
+ 
+     assert( ifname && addr && addrlen );
+-    rc = 0;
+-
+-    /* acquire the list of network interfaces */
+-
+-    sockfd = socket( AF_INET, SOCK_DGRAM, 0 );
+-    if( -1 == sockfd ) return -1;
+-
+-    buf = NULL; buflen = IFC_TABLE_SIZE; last_len = 0;
+-    for( ; buflen < MAX_IFCBUF_SIZE; buflen += IFC_TABLE_SIZE ) {
+-        if( NULL == (buf = malloc( buflen )) ) {
+-            rc = -1;
+-            break;
+-        }
+-
+-        ifc.ifc_len = buflen;
+-        ifc.ifc_buf = buf;
+-        if( ioctl( sockfd, SIOCGIFCONF, &ifc ) < 0 ) {
+-            if( (EINVAL != errno) || (last_len != 0) ) {
+-                rc = errno;
+-                break;
+-            }
+-        }
+-        else {
+-            if( ifc.ifc_len == last_len )
+-                break;
+-            else
+-                last_len = ifc.ifc_len;
+-        }
+-
+-        free( buf );
+-        buf = NULL;
+-    } /* for */
+-
+-    (void) close( sockfd );
+-    if( buflen > MAX_IFCBUF_SIZE ) rc = -1;
+-
+-    if( 0 != rc ) {
+-        if( NULL != buf ) free( buf );
+-        return rc;
+-    }
+ 
+-    assert( ifc.ifc_buf );
++    getifaddrs(&ifr);
+ 
+-    /* look for ifname in the list */
+-
+-    for( rec = ifc.ifc_buf; rec < (ifc.ifc_buf + ifc.ifc_len); ) {
+-        (void) memcpy( &ifr, rec, sizeof(struct ifreq) );
+-
+-        #ifdef NO_SOCKADDR_SA_LEN
+-        switch( ifr.ifr_addr.sa_family )
+-        {
+-            case AF_INET:
+-                sa_len = sizeof(struct sockaddr); break;
+-#ifndef NO_INET6_SUPPORT
+-            case AF_INET6:
+-                sa_len = sizeof(struct sockaddr_in6); break;
+-#endif
+-            default:
+-                rc = -1; break;
+-        }
+-        #else
+-        sa_len = ifr.ifr_addr.sa_len;
+-        #endif
+-        if( 0 != rc ) break;
+-
+-        if( ifr.ifr_addr.sa_family != AF_INET )
++    for (ifc = ifr; ifc != NULL; ifc = ifc->ifa_next) {
++	if (strcmp(ifc->ifa_name, ifname) != 0)
+             continue;
+-
+-        if( 0 == strncmp(ifname, ifr.ifr_name, sizeof(struct ifreq)) ) {
+-            if( addrlen < sa_len ) {
+-                rc = -1;
+-                break;
+-            }
+-
+-            (void) memcpy( addr, &(ifr.ifr_addr), sa_len );
+-            break;
+-        }
+-        else {
+-            /* rec += (sa_len + sizeof( ifr.ifr_name )); */
+-            /**** the above is per R. Stevens' book and not working
+-             **** on 64-bit Linux */
+-
+-            rec += sizeof(ifr);
+-        }
+-    } /* for */
+-
+-    if( rec >= (buf + ifc.ifc_len) ) {
+-        rc = -1;
++        if (ifc->ifa_addr == NULL)
++            continue;
++        sin = (struct sockaddr_in *)ifc->ifa_addr;
++        if (sin->sin_family != AF_INET)
++            continue;
++        memcpy(addr, sin, addrlen);
++        rc = 0;
+     }
+ 
+-    free( buf );
++    freeifaddrs(ifr);
+     return rc;
+ }
+ 
+@@ -147,7 +63,7 @@
+         (void) strncpy( buf, s, len );
+     }
+     else {
+-        rc = if2addr( s, (struct sockaddr*)&saddr, sizeof(saddr) );
++        rc = if2addr( s, (struct sockaddr_in *)&saddr, sizeof(saddr) );
+         if( 0 != rc ) return rc;
+ 
+         (void) strncpy( buf, inet_ntoa(saddr.sin_addr), len );
--- net/udpxy/files/patch-ifaddr.h.orig	2010-03-12 12:04:26.472843492 +0300
+++ net/udpxy/files/patch-ifaddr.h	2010-01-15 00:16:43.151207509 +0300
@@ -0,0 +1,11 @@
+--- ifaddr.h.orig	2010-01-14 23:49:31.288490434 +0300
++++ ifaddr.h	2010-01-14 23:49:56.636770433 +0300
+@@ -21,7 +21,7 @@
+  */
+ int
+ if2addr( const char* ifname,
+-         struct sockaddr *addr, size_t addrlen );
++         struct sockaddr_in *addr, size_t addrlen );
+ 
+ 
+ /* convert input parameter into an IPv4-address string


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003120924.o2C9ON6b041019>