[SR-Users] Bug in LDAP module?

Daniel-Constantin Mierla miconda at gmail.com
Tue Dec 28 11:28:28 CET 2010


Hello,

looking in the sources, at least for 3.x, ldap module does not connect 
to server from timer process, the one that executes failure route for 
local timeout.

I will fix it.

Cheers,
Daniel

On 12/27/10 5:03 PM, Pan B. Christensen wrote:
> Hello,
> We are using kamailio 1.5 and we have the following problem with 
> ldap_search:
> A call comes in. If it is to a VOIP user, it will be routed to 
> kamailio, and eventually go to the ldap lookup route: route[10] to 
> look up the user.
> This is always successful (LDAP can connect).
> It will then look up user preferences (call forwarding etc.) from SQL 
> in route[12] and route based on this result in route[13].
> If the result is "CFU (call forward unconditional) = on", the URI is 
> changed and route[10] (LDAP lookup) is called again.
> This is always successful (LDAP can connect).
> If the result is "CFB (call forward busy) = on" and the user is busy, 
> the URI is changed and route[10] (LDAP lookup) is called again.
> This is also always successful (LDAP can connect).
> If the result is "CFNR (call forward no reply) = on", the timeout is 
> changed and the call is delivered to the phone through route[14] 
> (location) and route[15] (relay).
> If the user does not answer, the URI is changed in failure_route[1] 
> and route[10] is called.
> For some unknown reason, ldap_search always fails in this scenario 
> with the messages: "ldap_session not found", "couldn't get ldap 
> session" and then "no LDAP entry found".
> Why?
> And why does this result in the -1 return code and not the -2 return 
> code for ldap_search?
> The only differences I can think of is that the unsuccessful scenario 
> comes from FAILURE_ROUTE instead of REQUEST_ROUTE, and that longer 
> time has passed since the original invite.
> Here's a sample log:
> NOTE the three ERROR lines, the INFO line and the ROUTE 10 line.
> Dec 27 13:31:55 [3373]: INVITE received from sip:<CALLER>@<SBC_IP> 
> <source IP: <SBC_IP>> to sip:<CALLEE>@<KAM_IP>:
> Dec 27 13:31:55 [3373]: ERROR:ldap:ldap_reconnect: [ldapprod]: LDAP 
> reconnect successful
> Dec 27 13:31:55 [3373]: ROUTE 10: LDAP returned: UID = <UID>, 
> voipSipPrimaryUri = <PRIMARY_URI>, voipExtensionUri = 
> sip:<CALLEE>@<DOMAIN>
> Dec 27 13:31:55 [3373]: ROUTE 12: Effective user properties for UID 
> <UID>: CFU: off <FORWARDTO>, CFB: off <FORWARDTO>, CFNR: on:25 
> <FORWARDTO>, CFNC: off <FORWARDTO>, VM: <CALLEE>, busy_level: 1, DBrows: 1
> Dec 27 13:31:55 [3373]: -------------------- Calling 
> sip:<CALLEE>@<DOMAIN> for 25 seconds. --------------------
> Dec 27 13:31:55 [3373]: ROUTE 15: Sending 105 INVITE from 
> sip:<CALLER>@<SBC_IP> to sip:<CALLEE>@<CALLEE_IP> (via <<null>>)
> Dec 27 13:31:55 [3383]: Response 100 Trying to Cseq 102 INVITE 
> received from <PROTO>:<CALLEE_IP>:<PORT>
> Dec 27 13:31:55 [3385]: Response 180 Ringing to Cseq 102 INVITE 
> received from <PROTO>:<CALLEE_IP>:<PORT>
> Dec 27 13:32:20 [3388]: FAILURE_ROUTE 1: Timeout for: 104 INVITE from 
> <CALLER> -> <CALLEE>
> Dec 27 13:32:20 [3388]: -------------------- Forwarding on no reply to 
> <FORWARDTO> --------------------
> Dec 27 13:32:20 [3388]: ERROR:ldap:get_connected_ldap_session: 
> [ldapprod]: ldap_session not found
> Dec 27 13:32:20 [3388]: ERROR:ldap:lds_search: [ldapprod]: couldn't 
> get ldap session
> Dec 27 13:32:20 [3388]: INFO:ldap:ldap_search_impl: no LDAP entry found
> Dec 27 13:32:20 [3388]: ROUTE 11: Number lookup results for 
> <FORWARDTO>: Node: VOIP.
> Dec 27 13:32:20 [3388]: CONFIG ERROR: VOIP number not found in LDAP. 
> Hanging up.
> Dec 27 13:32:20 [3373]: Response 487 Request Cancelled to Cseq 102 
> INVITE received from <PROTO>:<CALLEE_IP>:<PORT>
> Here's the ldap config file:
> [ldapprod]
> ldap_server_url = "ldap://ldap.<DOMAIN <ldap://ldap.%3CDOMAIN>>"
> ldap_network_timeout = 500
> ldap_client_bind_timeout = 500
> kamailio config snippets (in case you need them):
> # LDAP lookup for UID and primary URI
> route[10] {
> ...
>   ldap_search("ldap://ldapprod/<DN>?uid,voipSipPrimaryUri,voipExtensionUri?one?(&(objectClass=voipAddress)(|(voipSipUri=sip:$rU at uio.no)(|(voipSipUri=$var(uri))(voipSipUri=$var(e164uri 
> <ldap://ldapprod/%3CDN%3E?uid,voipSipPrimaryUri,voipExtensionUri?one?%28&%28objectClass=voipAddress%29%28%7C%28voipSipUri=sip:$rU@uio.no%29%28%7C%28voipSipUri=$var%28uri%29%29%28voipSipUri=$var%28e164uri>)))))");
>   if ($retcode < 1) {
>    switch ($retcode) {
>    case -1:
>     # no LDAP entry found
>     route(11);
>     return(1);
>    case -2:
>     # internal error
>     sl_send_reply("500", "Internal server error");
>     exit;
>    }
>   }
>   ldap_result("uid/$avp(s:uid)");
>   $avp(s:exten) = null;
>   if (!ldap_result("voipExtensionUri/$avp(s:exten)")) {
>    xlog("L_INFO", "voipExtensionUri not found.\n");
>   }
>   if (!ldap_result("voipSipPrimaryUri/$avp(s:p-uri)")) {
>    xlog("L_WARN", "voipSipPrimaryUri not found.\n");
>    #exit here?
>   }
>   if (isflagset(1)) {
>    xlog("L_INFO", "ROUTE 10: LDAP returned: UID = $avp(s:uid), 
> voipSipPrimaryUri = $avp(s:p-uri), voipExtensionUri = $avp(s:exten)\n");
>   }
>   if $avp(s:exten) != null {
>    $ru=$avp(s:exten);
>   } else {
>    $ru=$avp(s:p-uri);
>   }
>   route(12);
>  }
> }
> # Number lookup. Non-VoIP URI's go here.
> route[11] {
> ...
> }
> # Database lookup for call forwarding.
> route[12] {
> ...
> }
> # Call forwarding logic
> route[13] {
>  if (is_method("INVITE")) {
>   $avp(s:uio_timer_avp) = "300";
>   if ($avp(s:cfu_status) == "on") {
>    # Forward immediately
>    xlog("L_INFO", "-------------------- $rU forwarded unconditionally 
> to $avp(s:cfu_number). --------------------\n");
>    $rU = $avp(s:cfu_number);
>    route(10);
>   }
> ...
>    if ( $var(dlg_busy) >= $avp(s:busy_level) ) {
>     if ($avp(s:cfb_status) == "on") {
>      xlog("L_INFO", "-------------------- $rU has $var(dlg_busy) 
> active calls. Treshold $avp(s:busy_level). Forwarding on busy to 
> $avp(s:cfb_number) --------------------\n");
>      $rU = $avp(s:cfb_number);
>      route(10);
>     }
> ...
>    else if ($avp(s:cfnr_status) == "on") {
>     # Forward to phone with timeout then to $avp(s:cfnr_number).
>     # t_set_fr($avp(s:cfnr_timeout) + "000"); # Recommended method in 
> 3.1. Function does not exist in 1.5. Using old method (avp).
>     $avp(s:uio_timer_avp) = $avp(s:cfnr_timeout);
>     xlog("L_INFO", "-------------------- Calling $ru for 
> $avp(s:uio_timer_avp) seconds. --------------------\n");
>     route(14);
>    }
> ...
> }
> failure_route[1] {
> ...
>   if $avp(s:cfnr_status) == "on" {
>    if (isflagset(1)) {
>     xlog("L_INFO", "FAILURE_ROUTE 1: Timeout for: $mi $rm from $fU -> 
> $rU\n");
>    }
>    revert_uri();
>    $rU = $avp(s:cfnr_number);
>    xlog("L_INFO", "-------------------- Forwarding on no reply to $rU 
> --------------------\n");
>    route(10);
>   }
> ...
> }
> With kind regards,
> Pan
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

-- 
Daniel-Constantin Mierla
Kamailio (OpenSER) Advanced Training
Jan 24-26, 2011, Irvine, CA, USA
http://www.asipto.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20101228/57a2a925/attachment-0001.htm>


More information about the sr-users mailing list