Module: sip-router
Branch: master
Commit: 18e67ca2d125f87b85c00eb74b057b9c010a8a26
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=18e67ca2d125f87b85c00eb74b057b9c010a8a26

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Thu Nov 25 22:25:01 2010 +0100

permissions(k): changed params from PVAR to SPVE type

- type of fixup params for allow_trusted() updated from PVAR to SPVE
- PVAR can be non-zero terminated string
- SPVE accepts also static string or combination of PVs
- adapted patch submitted by Alex Hermann for crash related to static
  protocol value, FS#102

---

 modules_k/permissions/permissions.c |    4 +-
 modules_k/permissions/trusted.c     |   77 +++++++++++++++++------------------
 2 files changed, 39 insertions(+), 42 deletions(-)

diff --git a/modules_k/permissions/permissions.c 
b/modules_k/permissions/permissions.c
index 4d41817..5beb016 100644
--- a/modules_k/permissions/permissions.c
+++ b/modules_k/permissions/permissions.c
@@ -129,8 +129,8 @@ static cmd_export_t cmds[] = {
                REQUEST_ROUTE | FAILURE_ROUTE},
        {"allow_trusted",  (cmd_function)allow_trusted_0,  0, 0, 0,
                REQUEST_ROUTE | FAILURE_ROUTE},
-       {"allow_trusted",  (cmd_function)allow_trusted_2,  2, fixup_pvar_pvar,
-               fixup_free_pvar_pvar, REQUEST_ROUTE | FAILURE_ROUTE},
+       {"allow_trusted",  (cmd_function)allow_trusted_2,  2, fixup_spve_spve,
+               fixup_free_spve_spve, REQUEST_ROUTE | FAILURE_ROUTE},
        {"allow_uri",      (cmd_function)allow_uri, 2, double_fixup, 0,
                REQUEST_ROUTE | FAILURE_ROUTE|LOCAL_ROUTE},
        {"allow_address",  (cmd_function)allow_address, 3, fixup_igp_pvar_pvar,
diff --git a/modules_k/permissions/trusted.c b/modules_k/permissions/trusted.c
index 77545ad..33cae33 100644
--- a/modules_k/permissions/trusted.c
+++ b/modules_k/permissions/trusted.c
@@ -35,6 +35,7 @@
 #include "../../config.h"
 #include "../../lib/srdb1/db.h"
 #include "../../ip_addr.h"
+#include "../../mod_fix.h"
 #include "../../mem/shm_mem.h"
 #include "../../parser/msg_parser.h"
 #include "../../parser/parse_from.h"
@@ -462,51 +463,47 @@ int allow_trusted_0(struct sip_msg* _msg, char* str1, 
char* str2)
  */
 int allow_trusted_2(struct sip_msg* _msg, char* _src_ip_sp, char* _proto_sp) 
 {
-    pv_spec_t *src_ip_sp, *proto_sp;
-    pv_value_t pv_val;
-    char *src_ip, *proto;
+    str src_ip, proto;
     int proto_int;
 
-    src_ip_sp = (pv_spec_t *)_src_ip_sp;
-    proto_sp = (pv_spec_t *)_proto_sp;
-    
-    if (src_ip_sp && (pv_get_spec_value(_msg, src_ip_sp, &pv_val) == 0)) {
-       if (pv_val.flags & PV_VAL_STR) {
-           src_ip = pv_val.rs.s;
-       } else {
-           LM_ERR("src_ip pvar value is not string\n");
-           return -1;
-       }
-    } else {
-       LM_ERR("src_ip pvar does not exist or has no value\n");
-       return -1;
+    if (_src_ip_sp==NULL
+                       || (fixup_get_svalue(_msg, (gparam_p)_src_ip_sp, 
&src_ip) != 0)) {
+               LM_ERR("src_ip param does not exist or has no value\n");
+               return -1;
     }
     
-    if (proto_sp && (pv_get_spec_value(_msg, proto_sp, &pv_val) == 0)) {
-       if (pv_val.flags & PV_VAL_STR) {
-           strlower(&(pv_val.rs));
-           proto = pv_val.rs.s;
-       } else {
-           LM_ERR("proto pvar value is not string\n");
-           return -1;
-       }
-    } else {
-       LM_ERR("proto pvar does not exist or has no value\n");
-       return -1;
+    if (_proto_sp==NULL
+                       || (fixup_get_svalue(_msg, (gparam_p)_proto_sp, &proto) 
!= 0)) {
+               LM_ERR("proto param does not exist or has no value\n");
+               return -1;
     }
-
-    if (strcmp(proto, "udp") == 0) {
-       proto_int = PROTO_UDP;
-    } else if (strcmp(proto, "tcp") == 0) {
-       proto_int = PROTO_TCP;
-    } else if (strcmp(proto, "tls") == 0) {
-       proto_int = PROTO_TLS;
-    } else if (strcmp(proto, "sctp") == 0) {
-       proto_int = PROTO_SCTP;
-    } else {
-       LM_ERR("unknown protocol %s\n", proto);
-       return -1;
+       if(proto.len!=3 && proto.len!=4)
+               goto error;
+
+       switch(proto.s[0]) {
+               case 'u': case 'U':
+                       if (proto.len==3 && strncasecmp(proto.s, "udp", 3) == 
0) {
+                               proto_int = PROTO_UDP;
+                       } else goto error;
+               break;
+               case 't': case 'T':
+                       if (proto.len==3 && strncasecmp(proto.s, "tcp", 3) == 
0) {
+                               proto_int = PROTO_TCP;
+                       } else if (proto.len==3 && strncasecmp(proto.s, "tls", 
3) == 0) {
+                               proto_int = PROTO_TLS;
+                       } else goto error;
+               break;
+               case 's': case 'S':
+                       if (proto.len==4 && strncasecmp(proto.s, "sctp", 4) == 
0) {
+                               proto_int = PROTO_SCTP;
+                       } else goto error;
+               break;
+               default:
+                       goto error;
     }
 
-    return allow_trusted(_msg, src_ip, proto_int);
+    return allow_trusted(_msg, src_ip.s, proto_int);
+error:
+       LM_ERR("unknown protocol %.*s\n", proto.len, proto.s);
+       return -1;
 }


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to