Hi,

I tried few things and I believe I found a bug in the way the
<dlr-url> is parsed.
(1)
First of all I tried to URI-escape the entire dlr-url and it didn't work.
Basically I passed this:
<dlr-url>http%3A%2F%2Flocalhost%2Fdump_me.php%3Fsend_history_id%3D13853219%26to_number%3D000000000000%26t
ype%3D%25d</dlr-url>

And the same appears in the logs

2010-02-19 21:03:32 [1318] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http%3A%2F%2Flocalhost%2Fdump_me.php%3Fsend_history_id

When Kannel is going to parse the url it rejects it:

2010-02-19 21:03:32 [1318] [3] DEBUG: Status: 400 Answer: <DLR-URL
field misformed, rejected>

In this case the message was not sent.
(2)
In a second test I didn't escape URI-escape. I let the Perl XML Writer
to escape the content of <dlr-url> .
In this case & is substituted by &amp;  This can also be seen in smsbox logs.

2010-02-19 21:11:43 [1381] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http://localhost/dump_me.php?send_history_id=13853220&amp;to_number=000000000000&amp;type=%d>

However when kannel parses the URL the &amp; is not changed back to & .
So the result is the following URL is used.

2010-02-19 21:11:44 [1381] [9] DEBUG: Parsing URL
`http://localhost/dump_me.php?send_history_id=13853220&amp;to_number=000000000000&amp;type=8':

I wrote a simple script to catch the content of the GET when kannel
query the <dlr-url> and the result is

GET =
 Array
(
    [send_history_id] => 13853220
    [amp;to_number] => 000000000000
    [amp;type] => 8
)

(3)
Finally I tried to overwrite the <dlr-ulr> so I substituted &amp; with &
so the request looks like this one below:

<?xml version="1.0" encoding="UTF-8"?>
<message><submit><da><number>000000000000</number></da><oa><number>000000000000</number></oa><ud>%E2%82%ACee</ud><statusrequest><dlr-mask>31</dlr-mask><dlr-url>http://localhost/dump_me.php?send_history_id=13853221&to_number=000000000000&type=%d</dlr-url></statusrequest><!--
request from application to Kannel
--><from><username>xxxxxxx</username><password>xxxxxxx</password></from></submit></message>

Note that this XML is technically wrong. However this produces the
right result as ti can be seen from the logs:

 2010-02-19 21:28:17 [1381] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http://localhost/dump_me.php?send_history_id=13853221&to_number=000000000000&type=%d>

2010-02-19 21:28:18 [1381] [9] DEBUG: Parsing URL
`http://localhost/dump_me.php?send_history_id=13853221&to_number=3538706323
46&type=8':
2010-02-19 21:28:18 [1381] [9] DEBUG:   Scheme: http://
2010-02-19 21:28:18 [1381] [9] DEBUG:   Host: localhost
2010-02-19 21:28:18 [1381] [9] DEBUG:   Port: 80
2010-02-19 21:28:18 [1381] [9] DEBUG:   Username: (null)
2010-02-19 21:28:18 [1381] [9] DEBUG:   Password: (null)
2010-02-19 21:28:18 [1381] [9] DEBUG:   Path: /dump_me.php
2010-02-19 21:28:18 [1381] [9] DEBUG:   Query:
send_history_id=13853221&to_number=353870632346&type=8
2010-02-19 21:28:18 [1381] [9] DEBUG:   Fragment: (null)

And also from my entry point I was able to get the three parameters correctly

GET =
 Array
(
    [send_history_id] => 13853221
    [to_number] => 000000000000
    [type] => 8
)

In summary I believe that an incorrect XML produces the right result.
The problem looks to me e that the <dlr-ulr> is not escaped correctly.

Here some details
Kannel smsbox version 1.4.3
xml2-config --version  2.6.32

Any suggestion?

Thank you,
Oscar

On Thu, Feb 18, 2010 at 3:09 PM, Nikos Balkanas <n...@amdtelecom.net> wrote:
> Well, urlencoding is not right, still. In your URL ytou need to encode /, &
> and ?. Don't need to encode = or 8. But I think you want to encode &type=%d.
> That should be %26type=%%d
>
> So is this working or not? What do you mean by 3 parmaters, not 2? This is
> the dlr-url you send in your XML.
>
> BR,
> Nikos
>

Reply via email to