Hi, attached is patch that should fix any xml related issues. Please test it.
Thanks, Alexander Malysh
smsbox_xml.patch
Description: Binary data
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 <n...@amdtelecom.net> 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: devel@kannel.org >> 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&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 <n...@amdtelecom.net> 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 >>> & and replace with '&'. >>> >>> BR, >>> Nikos >>> ----- Original Message ----- From: "oscar cassetti" >>> <oscar.getstr...@gmail.com> >>> To: "Nikos Balkanas" <nbalka...@gmail.com> >>> Cc: <devel@kannel.org> >>> 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 <nbalka...@gmail.com> >>> 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" >>>> <oscar.getstr...@gmail.com> >>>> To: "Nikos Balkanas" <nbalka...@gmail.com> >>>> 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 <nbalka...@gmail.com> >>>> 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" >>>>> <oscar.getstr...@gmail.com> >>>>> To: "Nikos Balkanas" <n...@amdtelecom.net> >>>>> Cc: <us...@kannel.org> >>>>> 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 & which is >>>>> the right thing to do. >>>>> However when kannel parses the <dlr-url> it doesn't un-escape the & >>>>> 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&to_number=000000000000&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 <n...@amdtelecom.net> >>>>> 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" >>>>>> <oscar.getstr...@gmail.com> >>>>>> To: <us...@kannel.org> >>>>>> 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 & 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&to_number=000000000000&type=%d> >>>>>> >>>>>> However when kannel parses the URL the & 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&to_number=000000000000&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 & 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 >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >> >