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 <[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 & > 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 & 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<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 <[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 & 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<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<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 <[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 >>>>> >>>>> >>>> >>>> >>> >>> >> >> > >
