URL-Handling: de-Url-Escapify username and Passwords.
authorWilfried Goesgens <dothebart@citadel.org>
Fri, 13 Jul 2012 09:34:02 +0000 (11:34 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Fri, 13 Jul 2012 09:34:02 +0000 (11:34 +0200)
libcitadel/lib/libcitadel.h
libcitadel/lib/urlhandling.c

index a110baf251fd23fda95229a1c19de41baba70942..71d2ec8f2b0d144a143621dde4f047c6926d90a5 100644 (file)
@@ -392,6 +392,8 @@ struct ParsedURL {
        struct sockaddr_in6 Addr;
        ParsedURL *Next;
        int IsRelay;
+       StrBuf *UsrName;
+       StrBuf *Password;
 };
 
 void FreeURL(ParsedURL** Url);
index f350ea7d403fb41c9570c7df5157009bd28f44fa..4cca8a1f5481362c807853cd1893d93add597fb1 100644 (file)
@@ -26,6 +26,8 @@ void FreeURL(ParsedURL** Url)
                FreeStrBuf(&(*Url)->URL);
                FreeStrBuf(&(*Url)->UrlWithoutCred);
                FreeStrBuf(&(*Url)->CurlCreds);
+               FreeStrBuf(&(*Url)->UsrName);
+               FreeStrBuf(&(*Url)->Password);
                if ((*Url)->Next != NULL)
                        FreeURL(&(*Url)->Next);
                free(*Url);
@@ -131,6 +133,19 @@ int ParseURL(ParsedURL **Url, StrBuf *UrlStr, unsigned short DefaultPort)
                ((struct sockaddr_in *)&(url->Addr))->sin_family = AF_INET;
            }   
        }
+
+       if (url->User != NULL) {
+               url->UsrName = NewStrBufPlain(url->User, pUserEnd - url->User);
+               StrBufUnescape(url->UsrName, 0);
+               url->User = ChrPtr(url->UsrName);
+       }
+
+       if (url->Pass != NULL) {
+               url->Password = NewStrBufPlain(url->Pass, pCredEnd - url->Pass);
+               StrBufUnescape(url->Password, 0);
+               url->Pass = ChrPtr(url->Password);
+       }
+
        if (*Url != NULL)
                url->Next = *Url;
        *Url = url;