Merge in latest local changes and improvements:

o Allow radius and presence modules to be turned off;

o don't override CFLAGS;

o don't duplicate error messages to the console;

o postgresql backend doesn't set NULL flag on results properly, so that
  don't use VAL_NULL() macros on them;

o reconnect to MySQL db when necessary;

o relax transaction matching rules, so that it works with wider range of
  phones;

o add some missed sanity checks in usrloc;

o ignore incoming UDP messages that are shorter than certain limin (128
  bytes). They cannot be SIP messages anyway.
This commit is contained in:
Maxim Sobolev 2006-04-21 06:30:43 +00:00
parent 08d7206941
commit dfa121d9d9
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=160058
12 changed files with 198 additions and 22 deletions

View file

@ -7,6 +7,7 @@
PORTNAME= ser
PORTVERSION= 0.9.6
PORTREVISION= 1
CATEGORIES= net
MASTER_SITES= http://download.berlios.de/ser/ \
http://download2.berlios.de/ser/
@ -15,9 +16,6 @@ DISTNAME= ${PORTNAME}-${PORTVERSION}_src
MAINTAINER= sobomax@FreeBSD.org
COMMENT= A very fast and configurable SIP proxy
LIB_DEPENDS= radiusclient-ng.2:${PORTSDIR}/net/radiusclient \
xml2.5:${PORTSDIR}/textproc/libxml2
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
USE_GMAKE= yes
@ -28,6 +26,8 @@ MAN8= ser.8
MAN5= ser.cfg.5
MANCOMPRESSED= no
.include <bsd.port.pre.mk>
.if !defined(WITHOUT_MYSQL)
USE_MYSQL= yes
PLIST_SUB+= MYSQL=""
@ -44,7 +44,23 @@ PLIST_SUB+= POSTGRESQL="@comment "
MAKE_ENV+= POSTGRESQL=postgres
.endif
.include <bsd.port.pre.mk>
.if !defined(WITHOUT_PRESENCE)
USE_PA= yes
PLIST_SUB+= PA=""
LIB_DEPENDS+= xml2.5:${PORTSDIR}/textproc/libxml2
.else
PLIST_SUB+= PA="@comment "
MAKE_ENV+= PA=pa
.endif
.if !defined(WITHOUT_RADIUS)
USE_RADIUS= yes
PLIST_SUB+= RADIUS=""
LIB_DEPENDS+= radiusclient-ng.2:${PORTSDIR}/net/radiusclient
.else
PLIST_SUB+= RADIUS="@comment "
MAKE_ENV+= RADIUS="auth_radius group_radius uri_radius avp_radius"
.endif
.if ${ARCH} == "sparc64" || ${ARCH} == "ia64"
BROKEN= Does not compile completely on sparc64 or ia64

View file

@ -3,7 +3,7 @@ $FreeBSD$
--- Makefile.orig
+++ Makefile
@@ -45,13 +45,12 @@
@@ -46,13 +46,12 @@
skip_modules?=
# if not set on the cmd. line or the env, exclude this modules:
@ -17,11 +17,11 @@ $FreeBSD$
cpl-c \
- auth_radius group_radius uri_radius avp_radius \
- pa
+ group_radius uri_radius avp_radius
+ $(RADIUS) $(PA)
# always exclude the CVS dir
override exclude_modules+= CVS $(skip_modules)
@@ -263,7 +262,7 @@
@@ -268,7 +267,7 @@
chmod 644 $(cfg-prefix)/$(cfg-dir)ser.cfg.sample
if [ -z "${skip_cfg_install}" -a \
! -f $(cfg-prefix)/$(cfg-dir)ser.cfg ]; then \
@ -29,8 +29,8 @@ $FreeBSD$
+ cp $(cfg-prefix)/$(cfg-dir)ser.cfg.sample \
$(cfg-prefix)/$(cfg-dir)ser.cfg; \
fi
# $(INSTALL-CFG) etc/ser.cfg $(cfg-prefix)/$(cfg-dir)
@@ -272,10 +271,10 @@
# radius dictionary
@@ -280,10 +279,10 @@
$(INSTALL-TOUCH) $(bin-prefix)/$(bin-dir)/ser
$(INSTALL-BIN) ser $(bin-prefix)/$(bin-dir)
$(INSTALL-TOUCH) $(bin-prefix)/$(bin-dir)/sc

View file

@ -1,5 +1,8 @@
--- Makefile.defs.orig Wed Jan 11 03:55:58 2006
+++ Makefile.defs Thu Mar 2 19:08:17 2006
$FreeBSD$
--- Makefile.defs.orig
+++ Makefile.defs
@@ -169,10 +169,11 @@
INSTALL-TOUCH = touch # used to create the file first (good to
# make solaris install work)
@ -32,7 +35,7 @@
ifeq ($(CC_NAME), gcc)
#common stuff
- CFLAGS=-g -O9 -funroll-loops -Wcast-align $(PROFILE) \
+ CFLAGS=-funroll-loops -Wcast-align $(PROFILE) \
+ CFLAGS+=-funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
@ -132,7 +135,15 @@
LDFLAGS+=-g $(PROFILE)
MOD_LDFLAGS=-G $(LDFLAGS)
endif
@@ -1034,7 +1034,7 @@
@@ -1028,13 +1028,14 @@
ifeq ($(OS), freebsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN \
- -DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG
+ -DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG \
+ -I$(LOCALBASE)/include
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
LIBS= -pthread -lfl #dlopen is in libc
else

View file

@ -0,0 +1,14 @@
$FreeBSD$
--- daemonize.c
+++ daemonize.c
@@ -198,7 +198,7 @@
}
if (log_stderr==0)
- openlog(name, LOG_PID|LOG_CONS, log_facility);
+ openlog(name, LOG_PID, log_facility);
/* LOG_CONS, LOG_PERRROR ? */
return 0;

View file

@ -3,7 +3,7 @@ $FreeBSD$
--- main.c.orig
+++ main.c
@@ -249,6 +251,10 @@
@@ -251,6 +251,10 @@
be default yes, good for trouble-shooting
*/
int server_signature=1;
@ -14,3 +14,11 @@ $FreeBSD$
/* should ser try to locate outbound interface on multihomed
* host? by default not -- too expensive
*/
@@ -350,6 +354,7 @@
void cleanup(show_status)
{
/*clean-up*/
+ setlogmask(LOG_UPTO(LOG_INFO));
if (mem_lock)
shm_unlock(); /* hack: force-unlock the shared memory lock in case
some process crashed and let it locked; this will

View file

@ -0,0 +1,44 @@
$FreeBSD$
--- modules/auth_db/authorize.c
+++ modules/auth_db/authorize.c
@@ -101,7 +101,7 @@
}
pkg_free(col);
- if ((RES_ROW_N(*res) == 0) || VAL_NULL(ROW_VALUES(RES_ROWS(*res)))) {
+ if (RES_ROW_N(*res) == 0) {
DBG("get_ha1(): no result for user \'%.*s@%.*s\'\n",
_username->user.len, ZSW(_username->user.s), (use_domain ? (_domain->len) : 0), ZSW(_domain->s));
return 1;
@@ -212,9 +212,7 @@
rpid.s = NULL;
rpid.len = 0;
for (i = 0; i < avps_str_n; i++) {
- if (avps_str[i].len != 4
- || VAL_NULL(&(result->rows[0].values[1 + avps_int_n + i]))
- || memcmp(avps_str[i].s, "rpid", 4) != 0)
+ if (avps_str[i].len != 4 || memcmp(avps_str[i].s, "rpid", 4) != 0)
continue;
rpid.s = (char*)VAL_STRING(&(result->rows[0].values[1 + avps_int_n + i]));
if(rpid.s!=NULL)
@@ -230,8 +228,6 @@
return -1;
case AUTHORIZED:
for (i = 0; i < avps_int_n; i++) {
- if(VAL_NULL(&(result->rows[0].values[1 + i])))
- continue;
iname.s = &(avps_int[i]);
ivalue.n = VAL_INT(&(result->rows[0].values[1 + i]));
add_avp(AVP_NAME_STR, iname, ivalue);
@@ -240,8 +236,7 @@
}
for (i = 0; i < avps_str_n; i++) {
value.s = (char*)VAL_STRING(&(result->rows[0].values[1 + avps_int_n + i]));
- if(VAL_NULL(&(result->rows[0].values[1 + avps_int_n + i]))
- || value.s==NULL)
+ if(value.s==NULL)
continue;
iname.s = &(avps_str[i]);
value.len = strlen(value.s);

View file

@ -0,0 +1,15 @@
$FreeBSD$
--- modules/mysql/my_con.c
+++ modules/mysql/my_con.c
@@ -70,6 +70,9 @@
goto err;
}
+ /* Enable reconnection explictly */
+ ptr->con->reconnect = 1;
+
ptr->timestamp = time(0);
ptr->id = id;

View file

@ -1,9 +1,9 @@
$FreeBSD$
--- modules/tm/t_lookup.c.orig Fri Jul 16 00:18:34 2004
+++ modules/tm/t_lookup.c Tue Jul 27 21:01:37 2004
@@ -97,8 +97,8 @@
--- modules/tm/t_lookup.c.orig
+++ modules/tm/t_lookup.c
@@ -103,8 +103,8 @@
#include "t_msgbuilder.h" /* for t_lookup_callid */
#define EQ_VIA_LEN(_via)\
@ -14,7 +14,7 @@ $FreeBSD$
@@ -116,7 +116,7 @@
@@ -122,7 +122,7 @@
#define EQ_VIA_STR(_via)\
( memcmp( t_msg->_via->name.s,\
p_msg->_via->name.s,\
@ -23,3 +23,14 @@ $FreeBSD$
)==0 )
@@ -264,8 +264,10 @@
if (memcmp(inv_via->host.s, ack_via->host.s,
ack_via->host.len)!=0)
return 0;
+#if 0
if (inv_via->port!=ack_via->port)
return 0;
+#endif
if (inv_via->transport.len!=ack_via->transport.len)
return 0;
if (memcmp(inv_via->transport.s, ack_via->transport.s,

View file

@ -0,0 +1,16 @@
$FreeBSD$
--- modules/usrloc/urecord.c
+++ modules/usrloc/urecord.c
@@ -502,8 +502,8 @@
ptr = _r->contacts;
while(ptr) {
- if ((_c->len == ptr->c.len) &&
- !memcmp(_c->s, ptr->c.s, _c->len)) {
+ if (_c == NULL || ((_c->len == ptr->c.len) &&
+ !memcmp(_c->s, ptr->c.s, _c->len))) {
*_co = ptr;
return 0;
}

View file

@ -0,0 +1,25 @@
$FreeBSD$
--- parser/msg_parser.h.orig
+++ parser/msg_parser.h
@@ -193,6 +193,7 @@
struct hdr_field* accept_disposition;
struct hdr_field* diversion;
struct hdr_field* rpid;
+ struct hdr_field* server;
char* eoh; /* pointer to the end of header (if found) or null */
char* unparsed; /* here we stopped parsing*/
@@ -287,7 +288,11 @@
/* topmost Via is part of transaction key as well ! */
src[5]= msg->via1->host;
+#if 0
src[6]= msg->via1->port_str;
+#else
+ src[6].len = 0;
+#endif
if (msg->via1->branch) {
src[7]= msg->via1->branch->value;
MDStringArray ( cv, src, 8 );

View file

@ -0,0 +1,16 @@
$FreeBSD$
--- udp_server.c
+++ udp_server.c
@@ -432,6 +432,10 @@
continue; /* goto skip;*/
else goto error;
}
+ if (len < 128) {
+ /* Message is too short, just drop it already */
+ continue;
+ }
/* we must 0-term the messages, receive_msg expects it */
buf[len]=0; /* no need to save the previous char */

View file

@ -9,7 +9,7 @@ lib/ser/modules/acc.so
lib/ser/modules/auth.so
lib/ser/modules/auth_db.so
lib/ser/modules/auth_diameter.so
lib/ser/modules/auth_radius.so
%%RADIUS%%lib/ser/modules/auth_radius.so
lib/ser/modules/avp.so
lib/ser/modules/avp_db.so
lib/ser/modules/avpops.so
@ -31,7 +31,7 @@ lib/ser/modules/msilo.so
lib/ser/modules/mediaproxy.so
lib/ser/modules/nathelper.so
lib/ser/modules/options.so
lib/ser/modules/pa.so
%%PA%%lib/ser/modules/pa.so
lib/ser/modules/pdt.so
lib/ser/modules/permissions.so
lib/ser/modules/pike.so
@ -62,7 +62,7 @@ sbin/serunix
%%DOCSDIR%%/README.auth
%%DOCSDIR%%/README.auth_db
%%DOCSDIR%%/README.auth_diameter
%%DOCSDIR%%/README.auth_radius
%%RADIUS%%%%DOCSDIR%%/README.auth_radius
%%DOCSDIR%%/README.avp
%%DOCSDIR%%/README.avp_db
%%DOCSDIR%%/README.avpops
@ -81,7 +81,7 @@ sbin/serunix
%%DOCSDIR%%/README.msilo
%%DOCSDIR%%/README.nathelper
%%DOCSDIR%%/README.options
%%DOCSDIR%%/README.pa
%%PA%%%%DOCSDIR%%/README.pa
%%DOCSDIR%%/README.pdt
%%DOCSDIR%%/README.permissions
%%DOCSDIR%%/README.pike