Hi,

patch commited to CVS.

Thanks,
Alexander Malysh

Am 16.03.2010 um 12:20 schrieb Alexander Malysh:

> Hi,
> 
> attached is patch that should fix any xml related issues. Please test it.
> 
> Thanks,
> Alexander Malysh<smsbox_xml.patch>
> 
> Am 27.02.2010 um 10:03 schrieb oscar cassetti:
> 
>> Any development on this?
>> 
>> On Mon, Feb 22, 2010 at 1:32 PM, Nikos Balkanas <[email protected]> wrote:
>>> Well, this is just it. A workaround. Since solution is simple &
>>> straightforward, I think the best thing is to make kannel XML fully
>>> compatible.
>>> 
>>> BR,
>>> Nikos
>>> 
>>> ----- Original Message -----
>>> From: Konstantin Vayner
>>> To: oscar cassetti ; Nikos Balkanas
>>> Cc: [email protected]
>>> Sent: Monday, February 22, 2010 2:55 PM
>>> Subject: Re: XML Post and dlr-url
>>> Hi guys,
>>> Another possible workaround may be using PHP configuration (in case you're
>>> using php as a server side scripting).
>>> Take a look at this php.ini option:
>>> http://php.net/manual/en/ini.core.php#ini.arg-separator.input
>>> testcase:
>>> pon...@localhost:~/www$ cat .htaccess
>>> php_value arg_separator.input "&;"
>>> pon...@localhost:~/www$ cat dump_request.php
>>> <?php var_dump($_REQUEST); ?>
>>> pon...@localhost:~/www$ lynx -source
>>> 'http://localhost/~poncha/dump_request.php?foo=bar&amp;bar=baz'
>>> array(3) {
>>>  ["foo"]=>
>>>  string(3) "bar"
>>>  ["amp"]=>
>>>  string(0) ""
>>>  ["bar"]=>
>>>  string(3) "baz"
>>> }
>>> Regards,
>>>  Konstantin
>>> On Mon, Feb 22, 2010 at 8:07 AM, Nikos Balkanas <[email protected]> wrote:
>>>> 
>>>> That was my suggestion, too. But verify with debugger to make sure.
>>>> 
>>>> Do not use the same approach for <udh>. There is no need and you should
>>>> not require POST XML to be urlencoded. Just scan the value in dlr-url for
>>>> &amp; and replace with '&'.
>>>> 
>>>> BR,
>>>> Nikos
>>>> ----- Original Message ----- From: "oscar cassetti"
>>>> <[email protected]>
>>>> To: "Nikos Balkanas" <[email protected]>
>>>> Cc: <[email protected]>
>>>> Sent: Monday, February 22, 2010 1:48 AM
>>>> Subject: Re: XML Post and dlr-url
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> I believe the problem is in the functions static void
>>>> get_x_kannel_from_xml in smsbox.c
>>>> around the line 804 (source code kannel 1.4.3)
>>>> 
>>>> get_tag(tmp, octstr_imm("dlr-url"), dlr_url, 0, 0);
>>>> O_DESTROY(tmp);
>>>> 
>>>> I think that that the same strategy adopted for the tag <ud> could be
>>>> used also for the dlr-url tag assuming that this will be uri-encoded.
>>>> 
>>>> 
>>>> Oscar
>>>> 
>>>> 
>>>> 
>>>> On Sun, Feb 21, 2010 at 6:35 PM, Nikos Balkanas <[email protected]>
>>>> wrote:
>>>>> 
>>>>> Sure. Start by checking the get_tag function in smsbox.c. Verify with
>>>>> debugger, since it is only my guess looking at the code.
>>>>> 
>>>>> BR,
>>>>> Nikos
>>>>> ----- Original Message ----- From: "oscar cassetti"
>>>>> <[email protected]>
>>>>> To: "Nikos Balkanas" <[email protected]>
>>>>> Sent: Sunday, February 21, 2010 10:38 AM
>>>>> Subject: Re: XML Post and dlr-url
>>>>> 
>>>>> 
>>>>> Yes, I can use a workaround by passing only one parameter to GET query
>>>>> and use a internal separator within the string to actually separate
>>>>> the different parts.
>>>>> 
>>>>> If you can point me where the problem is (like function or source
>>>>> file) I could I have a look myself.
>>>>> 
>>>>> Oscar
>>>>> 
>>>>> On Sun, Feb 21, 2010 at 2:26 AM, Nikos Balkanas <[email protected]>
>>>>> wrote:
>>>>>> 
>>>>>> OK. Looks like a bug. I'll take a look at it when I get some time. In
>>>>>> the
>>>>>> meantime can you live with the illegal XML?
>>>>>> 
>>>>>> Nikos
>>>>>> ----- Original Message ----- From: "oscar cassetti"
>>>>>> <[email protected]>
>>>>>> To: "Nikos Balkanas" <[email protected]>
>>>>>> Cc: <[email protected]>
>>>>>> Sent: Saturday, February 20, 2010 2:18 PM
>>>>>> Subject: Re: XML Post and dlr-url
>>>>>> 
>>>>>> 
>>>>>> But that's what I did in the second test. I didn't URL-escape
>>>>>> anything, I just let the Perl XML writer escape & with &amp; which is
>>>>>> the right thing to do.
>>>>>> However when kannel parses the <dlr-url> it doesn't un-escape the &amp;
>>>>>> to
>>>>>> &.
>>>>>> As a result the query URL used by kannel looks like this one below
>>>>>> 
>>>>>> 
>>>>>> 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':
>>>>>> 
>>>>>> which produces on my entry point this
>>>>>> 
>>>>>> GET =
>>>>>> Array
>>>>>> (
>>>>>> [send_history_id] => 13853220
>>>>>> [amp;to_number] => 000000000000
>>>>>> [amp;type] => 8
>>>>>> )
>>>>>> 
>>>>>> Note the amp;to_number for example. If the dlr-url was escaped
>>>>>> properly this one should have just been to_number .
>>>>>> 
>>>>>> Finally in third and last test I produced an illegal XML by not
>>>>>> escaping the & and it worked:
>>>>>> 
>>>>>> 
>>>>>> 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':
>>>>>> 
>>>>>> and on my entry point
>>>>>> GET =
>>>>>> Array
>>>>>> (
>>>>>> [send_history_id] => 13853221
>>>>>> [to_number] => 000000000000
>>>>>> [type] => 8
>>>>>> )
>>>>>> 
>>>>>> 
>>>>>> The issue is that I need to use an invalid XML to produced the right
>>>>>> result. The problem is related to non un-escaping the <dlr-url>
>>>>>> element.
>>>>>> 
>>>>>> Oscar
>>>>>> 
>>>>>> On Sat, Feb 20, 2010 at 2:09 AM, Nikos Balkanas <[email protected]>
>>>>>> wrote:
>>>>>>> 
>>>>>>> So, in XML POST you shouldn't urlencode anything. And it will work.
>>>>>>> What's
>>>>>>> your issue then?
>>>>>>> 
>>>>>>> Nikos
>>>>>>> ----- Original Message ----- From: "oscar cassetti"
>>>>>>> <[email protected]>
>>>>>>> To: <[email protected]>
>>>>>>> Sent: Saturday, February 20, 2010 12:36 AM
>>>>>>> Subject: Re: XML Post and dlr-url
>>>>>>> 
>>>>>>> 
>>>>>>> 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 <[email protected]>
>>>>>>> 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