[Kamailio-Users] rewriteuser with AVP

Samuel Muller sml at 720.fr
Wed Nov 5 14:25:46 CET 2008


Hello Ravi ,

i'm using radiator but not freeradius, actually my users are stored into an
user flat file.

here you can have an example of user :

0123452000 at sip.720.fr   User-Password = "2000"
                        User-Name = "0123452000",
                        Sip-User-ID = "0123452000",
                        Sip-User-Realm = "sip.720.fr",
                        Sip-URI-User = "0123452000 at sip.720.fr",
                        Sip-Rpid = "0123452000",
                        Sip-Group = "full",
                        Sip-AVP = "asserted_id:0123452000"

and concerning services attributes, you have to declare them like this :

=> in kamailio.cfg (or openser.cfg, ser.cfg, opensips.cfg) :

modparam("acc|auth_radius", "service_type", 15)
modparam("avp_radius", "caller_service_type", 30)
modparam("avp_radius", "callee_service_type", 31)

if you're using peering module :
modparam("peering", "verify_destination_service_type", 21)
modparam("peering", "verify_source_service_type", 22)

=> in the radius dictionary (for radiusclient-ng, and the dictionary used by
your radius server)

### Service-Type Values ###
VALUE   Service-Type            Call-Check              10      # RFC2865,
uri_radius
VALUE   Service-Type            Group-Check             12      #
Proprietary, group_radius
VALUE   Service-Type            Sip-Session             15      #
Schulzrinne, acc/auth radius
VALUE   Service-Type            Sip-Verify-Destination  20      #
Proprietary, peering
VALUE   Service-Type            Sip-Verify-Source       21      #
Proprietary, peering
VALUE   Service-Type            Sip-Caller-AVPs         30      #
Proprietary, avp_radius
VALUE   Service-Type            Sip-Callee-AVPs         31      #
Proprietary, avp_radius

=> then, in your radius server config, you must add one handler per
service-type

example for radiator, just a base config based on flat user file:

<Handler Service-Type=Sip-Verify-Destination>
        RewriteUsername         s/^sip:(.*)/$1/
        <AuthBy FILE>
                NoCheckPassword
                Filename %D/user.peer
                NoDefault
        </AuthBy>
</Handler>


I can't help you actually for a radius DB, 'cause i'm working on it.

cheers,

.Sam.

-- 
Samuel MULLER
Ingénieur Reseaux & Telecom
720 DEGRES
+33 (0)663 128 505
sml at 720.fr



On Wed, Nov 5, 2008 at 1:28 PM, LetMeKnow <
sunkara.raviprakash.feb14 at gmail.com> wrote:

> Hello Samuel,
> Can you check the radius services attributes
>
> is you using users.conf or radius databases.
>
> can see this url
> http://www.kamailio.org/docs/openser-radius-1.0.x.html#freeradius_users
>
>
>
> Thanks &Regards
> Ravi Prakash Sunkara
> VoIP Architect & JAVA-SIP Developer
> +91-9999882776
>
>
> 2008/11/5 Samuel Muller <sml at 720.fr>
>
>> Hello all,
>>
>> I've a little question :
>> I got a username in an AVP by avp_load_radius, and I would rewrite the uri
>> with it.
>>
>> The objectives is to replace the r-uri by an ipbx uri, then forward the
>> call to it by a new branch (to not loose the phone number requested).
>> in this case :  0123452000 is behind a spa9000. The user 0123452000 has an
>> AVP called "ipbx", that i'm using to do some groups and permissions (plus
>> the rewrite).
>>
>> actually, it does not work, i tried many ways :
>>
>>         # load radius attributes of the callee
>>         if (!avp_load_radius("callee"))
>>         {
>>                 xlog("L_INFO","-> user unknown in radius usr db : $ru");
>>                 route(15);      # route PSTN
>>         }
>>
>>         # verify the AVPs we got (caller and callee)
>>         xlog("L_INFO", " -AVP------------------------------------- ");
>>         avp_print();
>>         xlog("L_INFO", " ----------------------------------------- ");
>>
>>         # callee is behind an ipbx (avp ipbx) ?
>>         if (is_avp_set("$avp(s:callee_ipbx)"))
>>         {
>>                 xlog("L_INFO", "-> callee is behind an ipbx :
>> $avp(s:callee_ipbx)");
>>                 setflag(14);    # flag IPBX
>>                 #subst_user('/$rU$/$avp(s:callee_ipbx)/');
>>                 #rewriteuri("sip:$avp(s:callee_ipbx)@$rd"**);
>>                 rewriteuser($avp(s:callee_ipbx));
>>         }
>>
>>         # callee in usrloc ?
>>         if (lookup("location"))
>>         {
>>                 append_hf("P-hint: usrloc applied\r\n");
>>                 xlog("L_INFO","-> registered user called : $tu");
>>                 route(7);       # route FORWARD
>>         }
>>         else
>>         {
>>                 xlog("L_INFO","-> 480: local user not found in usrloc :
>> $tu");
>>                 sl_send_reply("480","Temporarily Unavailable");
>>                 drop;
>>         }
>>
>> and in the debugs log :
>>
>> Nov  5 13:04:51 ser0 kamailio[2930]:
>> -ROUTE--INBOUND--------------------------
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: rc_auth
>> Success
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: AVP
>> 'callee_asserted_id'/0='0123452000'/0 has been added
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: AVP
>> 'callee_ipbx'/0='spa9000'/0 has been added
>> Nov  5 13:04:51 ser0 kamailio[2930]:
>> -AVP-------------------------------------
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> p=0x7fb3d7e5cfe8, flags=0x0003
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Iname=<callee_ipbx>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Ival_str=<spa9000 / 7>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> p=0x7fb3d7e5cf88, flags=0x0003
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Iname=<callee_asserted_id>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Ival_str=<0123452000 / 10>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> p=0x7fb3d7e5ced8, flags=0x0003
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Iname=<caller_asserted_id>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> ^I^I^Ival_str=<0123451011 / 10>
>> Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
>> p=0x7fb3d7e5ce38, flags=0x0003
>> Nov  5 13:04:51 ser0 kamailio[2930]:
>> -----------------------------------------
>> Nov  5 13:04:51 ser0 kamailio[2930]: -> callee is behind an ipbx : spa9000
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:registrar:lookup: '$avp(
>> s at sip.720.fr' Not found in usrloc
>> Nov  5 13:04:51 ser0 kamailio[2930]: -> 480: local user not found in
>> usrloc : sip:0123452000 at sip.720.fr <sip%3A0123452000 at sip.720.fr>
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:parse_headers:
>> flags=ffffffffffffffff
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:check_via_address: params
>> 77.246.81.162, 192.168.0.134, 0
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:destroy_avp_list: destroying
>> list 0x7fb3d7e5d040
>> Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:receive_msg: cleaning up
>>
>>
>> -> But, if I did it by :
>>
>>         if (uri =~ "^sip:012345200{1}")
>>         {
>>                 rewriteuri("sip:spa9000 at sip.720.fr<sip%3Aspa9000 at sip.720.fr>
>> ");
>>         }
>>         if (lookup("location"))
>>         {
>>                 append_hf("P-hint: usrloc applied\r\n");
>>                 xlog("L_INFO","-> registered user called : $tu");
>>                 route(7);       # route FORWARD
>>         }
>>
>> it works great, and the call is ok (the ipbx forward correctly the request
>> the phone behind him).
>>
>>
>> Anyone has an idea ? thanks in advance !
>>
>>
>> --
>> Samuel MULLER
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.kamailio.org
>> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/users/attachments/20081105/f67f1182/attachment.htm 


More information about the Users mailing list