Hi Mike,

your quick and easy patch fixes the problem right away. For my problem it
is good to go!

Thanks for the quick response and solution.

Olaf

P.S. Using UTF-8 does no good, I had tried this before.

Michael Becke <[EMAIL PROTECTED]> wrote on 13.11.2003 03:59:43:

> Hello Olaf,
>
> Here's a quick patch that fixes the immediate problem.  From reading
> RFC 2616 and 2617 it seems to me that we should have been using
> ISO-8859-1 as the encoding instead of US-ASCII.  Please give this patch
> a try.
>
> Mike
>
>
>
>
> On Nov 12, 2003, at 3:32 PM, [EMAIL PROTECTED] wrote:
>
> > Hi,
> >
> > today an administrator reported a password related problem within one
> > of
> > our applications to me. I tracked down the problem that the user had
> > used
> > the german "Umlaute" äöü in his password.
> >
> > Our application tried to log in to another web site using a get method
> > from
> > HTTPClient 2.0 rc2 setting basic authentification, but authentification
> > failed because of the non ASCII characters.
> >
> > We used the password "ä-ö-ü" for testing and it turned out that
> > HTTPClient
> > translates this to "ZGg6Py0/LT8=". Internet Explorer and Mozilla
> > translates
> > this to "ZGg65C32Lfw=". Using
> > org.apache.commons.httpclient.util.Base64.decode with the wrong string
> > results in "?-?-?" where the second string results in the correct
> > "ä-ö-ü",
> > so encode and decode are not symetric.
> >
> > Using the code below (I found some time ago on the internet) to
> > translate
> > the password into the base64 version results in the correct string.
> >
> > For me the question is, if a password with non ASCII characters is not
> > allowed at all (in the HTTPClient documentation I could not find a
> > hint in
> > this direction or I have missed it), but even if not, browsers seem to
> > support it, so the used Base64-encoding class seems to be bugy and
> > should
> > be fixed in 2.0, before it is completely replaced for 2.1.
> >
> > Any thoughts or hints are welcome.
> >
> > Regards,
> > Olaf
> >
> >
> >
> >
> >
> > public class Base64
> > {
> > static String BaseTable[] = {
> >       "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
> > "N",
> > "O", "P",
> >       "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c",
> > "d",
> > "e", "f",
> >       "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
> > "t",
> > "u", "v",
> >       "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8",
> > "9",
> > "+", "/"
> >   };
> >
> >   public static String encode(String text) {
> >     int n = text.length();
> >     if (n < 1)
> >       return text; // no bytes to encode!?!
> >     StringBuffer output = new StringBuffer(n);
> >
> >     // read the entire file into the byte array
> >     byte bytes[] = new byte[ (n)];
> >     bytes = text.getBytes();
> >
> >     byte buf[] = new byte[4]; // array of base64 characters
> >
> >     int n3byt = n / 3; // how 3 bytes groups?
> >     int nrest = n % 3; // the remaining bytes from the grouping
> >     int k = n3byt * 3; // we are doing 3 bytes at a time
> >     int linelength = 0; // current linelength
> >     int i = 0; // index
> >
> >     // do the 3-bytes groups ...
> >     while (i < k) {
> >       buf[0] = (byte) ( (bytes[i] & 0xFC) >> 2);
> >       buf[1] = (byte) ( ( (bytes[i] & 0x03) << 4) |
> >                        ( (bytes[i + 1] & 0xF0) >> 4));
> >       buf[2] = (byte) ( ( (bytes[i + 1] & 0x0F) << 2) |
> >                        ( (bytes[i + 2] & 0xC0) >> 6));
> >       buf[3] = (byte) (bytes[i + 2] & 0x3F);
> >
> >
> > output.append(BaseTable[buf[0]]).append(BaseTable[buf[1]]).append(
> >           BaseTable[buf[2]]).append(BaseTable[buf[3]]);
> >
> >       if ( (linelength += 4) >= 76) {
> >         output.append("\r\n");
> >         linelength = 0;
> >       }
> >       i += 3;
> >     }
> >
> >     // deals with with the padding ...
> >     if (nrest == 2) {
> >       // 2 bytes left
> >       buf[0] = (byte) ( (bytes[k] & 0xFC) >> 2);
> >       buf[1] = (byte) ( ( (bytes[k] & 0x03) << 4) |
> >                        ( (bytes[k + 1] & 0xF0) >> 4));
> >       buf[2] = (byte) ( (bytes[k + 1] & 0x0F) << 2);
> >     }
> >     else if (nrest == 1) {
> >       // 1 byte left
> >       buf[0] = (byte) ( (bytes[k] & 0xFC) >> 2);
> >       buf[1] = (byte) ( (bytes[k] & 0x03) << 4);
> >     }
> >
> >     if (nrest > 0) {
> >       // send the padding
> >       if ( (linelength += 4) >= 76)
> >         output.append("\r\n");
> >       output.append(BaseTable[buf[0]]).append(BaseTable[buf[1]]);
> >       // Thanks to R. Claerman for the bug fix here!
> >       if (nrest == 2) {
> >         output.append(BaseTable[buf[2]]);
> >       }
> >       else {
> >         output.append("=");
> >       }
> >       output.append("=");
> >     }
> >     return output.toString();
> >   }
> > }
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
[EMAIL PROTECTED]
> For additional commands, e-mail: commons-httpclient-dev-
> [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to