windows-nt/Source/XPSP1/NT/shell/lib/wnetutil.cpp
2020-09-26 16:20:57 +08:00

89 lines
2.4 KiB
C++

#include "stock.h"
#pragma hdrstop
#include <idhidden.h>
#include <regitemp.h>
#include <shstr.h>
#include <shlobjp.h>
#include <lmcons.h>
#include <validc.h>
#include "ccstock2.h"
// Alpha platform doesn't need unicode thunks, seems like this
// should happen automatically in the headerfiles...
//
#if defined(_X86_) || defined(UNIX)
#else
#define NO_W95WRAPS_UNITHUNK
#endif
#include "wininet.h"
#include "w95wraps.h"
// Put stuff to clean up URLs from being spoofed here.
// We don't want to show escaped host names
// We don't want display the username:password combo that's embedded in the url, in the UI.
// So we remove those pieces, and reconstruct the url.
STDAPI_(void) SHCleanupUrlForDisplay(LPTSTR pszUrl)
{
switch (GetUrlScheme(pszUrl))
{
case URL_SCHEME_FTP:
case URL_SCHEME_HTTP:
case URL_SCHEME_HTTPS:
{
URL_COMPONENTS uc = { 0 };
TCHAR szName[INTERNET_MAX_URL_LENGTH];
uc.dwStructSize = sizeof(uc);
uc.dwSchemeLength = uc.dwHostNameLength = uc.dwUserNameLength = uc.dwPasswordLength = uc.dwUrlPathLength = uc.dwExtraInfoLength = 1;
if (InternetCrackUrl(pszUrl, 0, 0, &uc) && uc.lpszHostName)
{
BOOL fRecreate = FALSE;
for (DWORD dw=0; dw < uc.dwHostNameLength; dw++)
{
if (uc.lpszHostName[dw]==TEXT('%'))
{
URL_COMPONENTS uc2 = { 0 };
uc2.dwStructSize = sizeof(uc2);
uc2.dwHostNameLength = ARRAYSIZE(szName);
uc2.lpszHostName = szName;
if (InternetCrackUrl(pszUrl, 0, 0, &uc2))
{
uc.dwHostNameLength = 0;
uc.lpszHostName = szName;
fRecreate = TRUE;
}
break;
}
}
if (uc.lpszUserName || uc.lpszPassword)
{
uc.dwPasswordLength = uc.dwUserNameLength = 0;
uc.lpszUserName = uc.lpszPassword = NULL;
fRecreate = TRUE;
}
if (fRecreate)
{
// The length of the url will be shorter than the original
DWORD cc = lstrlen(pszUrl) + 1;
InternetCreateUrl(&uc, 0, pszUrl, &cc);
}
}
break;
}
default:
break;
}
}