<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Mark,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The logs you provided don’t show the code hitting the case for 1 at all. Have you verified the value of $retcode is what you think it is? You might consider adding it to the log print.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:black">Ben Newlin </span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Users <users-bounces@lists.opensips.org> on behalf of Mark Farmer <farmorg@gmail.com><br>
<b>Reply-To: </b>OpenSIPS users mailling list <users@lists.opensips.org><br>
<b>Date: </b>Tuesday, September 3, 2019 at 9:25 AM<br>
<b>To: </b>OpenSIPS users mailling list <users@lists.opensips.org><br>
<b>Subject: </b>[OpenSIPS-Users] Switch Statement Trouble<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hi everyone, can anyone tell me what's going wrong here please?
<o:p></o:p></p>
<div>
<p class="MsoNormal">I'm having a problem with my switch statement in that  $retcode 1 ends up falling into the processing for -1, -2, -3<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"># If the client is not already authenticated, check the return code and look for multiple failures<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                www_authorize("", "subscriber");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                switch ($retcode)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        case 0: # false<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                xlog("CUSTOM_LOG: Client NOT authenticated");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                break;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        case 1: # true<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                xlog("CUSTOM_LOG: Client authenticated");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                break;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        case -3: # stale nonce<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        case -2: # invalid passwd<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        case -1: # no such user<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                xlog("CUSTOM_LOG: Failed Authentication Attempt (Return Code: $retcode) for $ru To: $tu - Checking for Dictionary attack");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                # Is the attribute AuthFail_$si present in cache?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                if ( cache_fetch("local","AuthFail_$si",$avp(failed_no)) ) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        xlog("CUSTOM_LOG: Failure Attempts for $ru ($fU) is now $avp(failed_no) (Return Code: $retcode)");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        # If so, how many failures so far?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        if ( $(avp(failed_no){<a href="http://s.int">s.int</a>}) >= $var(max_auth_fail) ) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                                xlog("CUSTOM_LOG: SECURITY ALERT: $var(max_auth_fail) failed auth attempts for $fU from $si - Blocking IP Address");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                                # Looks like bad people - Block the source IP<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                                exec("sudo /sbin/ipset add $var(ipset) $$SIP_SRCIP");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                                xlog("CUSTOM_LOG: $si added to ipset $var(ipset))");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        # If authentication is failing, increment the value of AuthFail_$si by 1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        xlog("CUSTOM_LOG: Incrementing AuthFail_$si");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        cache_add("local","AuthFail_$si",1,60);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                } else {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        # If the attribute AuthFail_$si is not present - add it<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        xlog("CUSTOM_LOG: Adding Cache entry AuthFail_$si");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                        cache_store("local","AuthFail_$si","1",60);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                break;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                        default:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                # If non of the above is true, try to authenticate the user<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                xlog("CUSTOM_LOG: No Subscriber in database for $ru ($fU) - Challenging");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                www_challenge("", 0);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">--------------<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">From my logs:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">CUSTOM_LOG: Failed Authentication Attempt (Return Code: 1) for sip:XXX.XXX.XXX.XXX To: sip:5003@XXX.XXX.XXX.XXX - Checking for Dictionary attack<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">CUSTOM_LOG: Failure Attempts for sip:XXX.XXX.XXX.XXX (5003) is now 1 (Return Code: 1)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">CUSTOM_LOG: Incrementing AuthFail_XXX.XXX.XXX.XXX<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Version info:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">version: opensips 3.0.0 (x86_64/linux)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, HP_MALLOC, DBG_MALLOC, CC_O0, FAST_LOCK-ADAPTIVE_WAIT<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">poll method support: poll, epoll, sigio_rt, select.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">git revision: 435890a06<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">main.c compiled on 13:19:25 Jun 21 2019 with gcc 7<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Many thanks<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Mark.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>