Hello,

Thanks for the tip Daniel. I added this before the dispatch_rpc() and other xmlrpc related stuff:

...
if (!www_authorize(”somedomain.local", "subscriber")) {
          www_challenge(”somedomain.local", "1");
          exit;
    };

Seems to work now with the correct username and password retrieved from subscriber table:

After 200OK the dialplan gets reloaded in this example.

POST /RPC HTTP/1.1.
Accept: */*.
Host: 127.0.0.1:5060.
User-Agent: xmlrpcclient.
Content-Type: text/xml.
Content-Length: 0.


T 127.0.0.1:5060 -> 127.0.0.1:57265 [AP]
HTTP/1.1 401 Unauthorized.
Sia: SIP/2.0/TCP 127.0.0.1:57265.
WWW-Authenticate: Digest realm=”somedomain.local", nonce="WSSNE1kki+cE7oCG5vjVrxI/BZRRfmOmXKecloA=", qop="auth".
Content-Length: 0.


T 127.0.0.1:57265 -> 127.0.0.1:5060 [AP]
POST /RPC HTTP/1.1.
Authorization: Digest username="testuser", realm=”somedomain.local", nonce="WSSNE1kki+cE7oCG5vjVrxI/BZRRfmOmXKecloA=", uri="/RPC", cnonce="Yjg5MWU3ZjdkYzYwNmNlMTc1ZmQyMmFmYmZkNGQyN2M=", nc=00000001, qop=auth, response="c99a92d4c402ab592a908f92e82f08e1".
Accept: */*.
Host: 127.0.0.1:5060.
User-Agent: xmlrpcclient.
Content-Type: text/xml.
Content-Length: 167.
.
<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>dialplan.reload</methodName><params><param><value><string></string></value></param></params></methodCall>

T 127.0.0.1:5060 -> 127.0.0.1:57265 [AP]
HTTP/1.1 200 OK.
Sia: SIP/2.0/TCP 127.0.0.1:57265.
Content-Length: 108.

Cheers!

PS. Could not help at noticing Kamailio replying with ”Sia” header in 200OK message. I dont know if this is a bug or not but it looks a lot like ”Via” … :)

—Olli

Daniel-Constantin Mierla <miconda@gmail.com> kirjoitti 23.5.2017 kello 21.23:

You can use the auth/auth_db modules do the the www-digest authentication (which was actually defined first for http) like for sip traffic -- you probably want to do the www not proxy auth, so use the appropriate functions.

Cheers,
Daniel

On Tue, May 23, 2017 at 3:09 PM, Oma <olli.attila@oatel.net> wrote:
Hello,

Username & password would be the desired way.

Cheers,

—Olli

Daniel-Constantin Mierla <miconda@gmail.com> kirjoitti 23.5.2017 kello 15.32:

Hello,

do you want authentication with username and password or IP based authorization?

Cheers,
Daniel

On Tue, May 23, 2017 at 7:04 AM, Olli Attila <olli.attila@oatel.net> wrote:
Hello,

I got the POST request working now by adding the "listen tcp:127.0.0.1:5060". I tested this with dialplan.reload, dialplan.dump and htable.reload. Works ok.

Is there any way to authenticate the request in Kamailio?

Now all of the valid methods included in request: "http://127.0.0.1/RPC" are getting executed and Kamailio returns 200 OK directly.

Cheers,

--Olli




Diego Nadares kirjoitti 2017-05-22 15:06:
Hi Olli,

Did configure kamailio to listen on tcp:127.0.0.1?

Diego

El 22 may. 2017, a las 02:54, Olli Attila <olli.attila@oatel.net> escribió:

Hi,

I'm using kamailio 5.0.0 and trying to use core commands through xmlrpc interface but the requests are failing towards Kamailio.
I have compiled and enabled the xmlrpc module in config and I have this on my kamailio.cfg:


# XMLRPC routing
#!ifdef WITH_XMLRPC
route[XMLRPC] {
 # allow XMLRPC from localhost
 if ((method=="POST" || method=="GET")
     && (src_ip==127.0.0.1)) {
   # close connection only for xmlrpclib user agents (there is a bug in
   # xmlrpclib: it waits for EOF before interpreting the response).
   if ($hdr(User-Agent) =~ "xmlrpclib")
     set_reply_close();
   set_reply_no_connect();
   dispatch_rpc();
   exit;
 }
 send_reply("403", "Forbidden");
 exit;
}
#!endif

I have tried to test this by using curl and calling "core.uptime" method in xml body (core.uptime works when executed through kamcmd commandline tool).
The curl is called from the same machine that I have Kamailio installed on:

"curl -X POST -H 'Host: 127.0.0.1:5060' -H 'User-Agent: xmlrpcclient' -H 'Content-Type: text/xml' -d '<?xml version='1.0'?><methodCall><methodName>core.uptime</methodName><params></params></methodCall>' http://127.0.0.1:5060"

This fails and I only get: "curl: (7) Failed to connect to 127.0.0.1 port 5060: Connection refused"

network traffic shows me this.. firewall is disabled completely when doing the test:
1   0.000000    127.0.0.1 -> 127.0.0.1    TCP 74 55630→5060 [SYN] Seq=0 Win=43690 Len=0 MSS=65495 SACK_PERM=1 TSval=1347930477 TSecr=0 WS=64
2   0.000032    127.0.0.1 -> 127.0.0.1    TCP 54 5060→55630 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

Can anyone help me to get to the right direction with this?

Cheers,

--Olli


_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users



--
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users


_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users




--
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users