Browse Source

- Fix problem in the allow_address() and allow_source_address() functions,
they worked properly only with /0, /8, /16, /24, /32 netmasks so far.
Related to bug #1888101, reported from Giovanni Coriasco
- add a small testcase for the permission module


git-svn-id: https://openser.svn.sourceforge.net/svnroot/openser/trunk@4432 689a6050-402a-0410-94f2-e92a70836424

Henning Westerholt 17 years ago
parent
commit
78b223da64
2 changed files with 131 additions and 0 deletions
  1. 63 0
      test/unit/35.cfg
  2. 68 0
      test/unit/35.sh

+ 63 - 0
test/unit/35.cfg

@@ -0,0 +1,63 @@
+# OpenSER config for lookup / registrar testing
+
+#------------------------Global configuration----------------------------------
+debug=3
+fork=yes
+log_stderror=no
+listen=127.0.0.1
+port=5060
+dns=no
+rev_dns=no
+
+#-----------------------Loading Modules-------------------------------------
+mpath="../modules/"
+loadmodule "db_mysql/db_mysql.so"
+loadmodule "usrloc/usrloc.so"
+loadmodule "registrar/registrar.so"
+loadmodule "sl/sl.so"
+loadmodule "tm/tm.so"
+loadmodule "permissions/permissions.so"
+loadmodule "maxfwd/maxfwd.so"
+loadmodule "mi_fifo/mi_fifo.so"
+loadmodule "xlog/xlog.so"
+
+
+#-----------------------Module parameters-------------------------------------
+modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
+modparam("usrloc", "db_mode", 3)
+modparam("usrloc|permissions", "db_url", "mysql://openser:openserrw@localhost/openser")
+
+#-----------------------Routing configuration---------------------------------#
+route{
+if (!mf_process_maxfwd_header("10")) {
+	sl_send_reply("483","Too Many Hops");
+	exit();
+}
+
+if (!allow_address("0", "$si", "$sp") || !allow_source_address("0")) {
+	#xlog("permissions");
+        sl_send_reply("403", "Forbidden");
+}
+
+if(!lookup ("location")){
+	sl_send_reply("404", "Not Found");
+}
+
+if(method==INVITE){
+	if (!t_relay()) {
+		sl_reply_error();
+	}
+}
+if (method== ACK) {
+	if (!t_relay()) {
+		sl_reply_error();
+	}
+}
+if (method==BYE){
+	if (!t_relay("0x04")) {
+		sl_reply_error();
+	}
+}
+exit();
+}
+

+ 68 - 0
test/unit/35.sh

@@ -0,0 +1,68 @@
+#!/bin/bash
+# check permissions module functionality
+
+# Copyright (C) 2008 1&1 Internet AG
+#
+# This file is part of openser, a free SIP server.
+#
+# openser is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version
+#
+# openser is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+source include/require
+
+if ! (check_sipp && check_openser); then
+	exit 0
+fi ;
+
+CFG=35.cfg
+SRV=5060
+UAS=5070
+UAC=5080
+IP="127.0.0.31"
+MASK=27
+
+# add an registrar entry to the db;
+mysql --show-warnings -B -u openser --password=openserrw -D openser -e "INSERT INTO location (username,contact,socket,user_agent,cseq,q) VALUES (\"foo\",\"sip:foo@localhost:$UAS\",\"udp:127.0.0.1:$UAS\",\"ser_test\",1,-1);"
+
+mysql --show-warnings -B -u openser --password=openserrw -D openser -e "INSERT INTO address (ip_addr, mask) VALUES ('$IP', '$MASK');"
+
+../openser -w . -f $CFG &> /dev/null
+sipp -sn uas -bg -i localhost -m 10 -f 2 -p $UAS &> /dev/null
+sipp -sn uac -s foo 127.0.0.1:$SRV -i localhost -m 10 -f 2 -p $UAC &> /dev/null
+ret=$?
+mysql --show-warnings -B -u openser --password=openserrw -D openser -e "DELETE FROM address WHERE (ip_addr='$IP' AND mask='$MASK');"
+
+if [ "$ret" -eq 0 ] ; then
+	killall sipp
+	IP="127.47.6.254"
+	MASK=10
+	mysql --show-warnings -B -u openser --password=openserrw -D openser -e "INSERT INTO address (ip_addr, mask) VALUES ('$IP', '$MASK');"
+	
+	../scripts/openserctl fifo address_reload
+	#../scripts/openserctl fifo address_dump
+
+	sipp -sn uas -bg -i localhost -m 10 -f 2 -p $UAS &> /dev/null
+	sipp -sn uac -s foo 127.0.0.1:$SRV -i localhost -m 10 -f 2 -p $UAC &> /dev/null
+	ret=$?
+	mysql --show-warnings -B -u openser --password=openserrw -D openser -e "DELETE FROM address WHERE (ip_addr='$IP' AND mask='$MASK');"
+fi;
+
+
+# cleanup
+killall -9 sipp > /dev/null 2>&1
+killall -9 openser > /dev/null 2>&1
+
+mysql  --show-warnings -B -u openser --password=openserrw -D openser -e "DELETE FROM location WHERE ((contact = \"sip:foo@localhost:$UAS\") and (user_agent = \"ser_test\"));"
+
+exit $ret;