~ubuntu-branches/ubuntu/lucid/wine1.2/lucid

« back to all changes in this revision

Viewing changes to dlls/urlmon/sec_mgr.c

  • Committer: Bazaar Package Importer
  • Author(s): Scott Ritchie
  • Date: 2010-02-19 15:26:37 UTC
  • mfrom: (1.1.11 upstream)
  • Revision ID: james.westby@ubuntu.com-20100219152637-uitvrrt68l4xbag7
Tags: 1.1.39-0ubuntu1
* New upstream release
  - Support for registry symbolic links.
  - Many MSI fixes.
  - Build process improvements.
  - MSXML cleanups and fixes.
  - A number of MSHTML improvements.
  - Various bug fixes.
* debian/control: build with mpg123 on amd64
  - The 1.10.1 prerelease should fix the previous build failure. (LP: #522916)

Show diffs side-by-side

added added

removed removed

Lines of Context:
147
147
    DWORD size=0;
148
148
    HRESULT hres;
149
149
 
150
 
    secur_url = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR));
151
150
    *zone = -1;
152
151
 
153
 
    hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, secur_url, INTERNET_MAX_URL_LENGTH, &size, 0);
154
 
    if(hres != S_OK)
155
 
        strcpyW(secur_url, url);
 
152
    hres = CoInternetGetSecurityUrl(url, &secur_url, PSU_SECURITY_URL_ONLY, 0);
 
153
    if(hres != S_OK) {
 
154
        size = strlenW(url)*sizeof(WCHAR);
 
155
 
 
156
        secur_url = heap_alloc(size);
 
157
        if(!secur_url)
 
158
            return E_OUTOFMEMORY;
 
159
 
 
160
        memcpy(secur_url, url, size);
 
161
    }
156
162
 
157
163
    hres = CoInternetParseUrl(secur_url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(WCHAR), &size, 0);
158
164
    if(FAILED(hres) || !*schema) {
1234
1240
 */
1235
1241
HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved)
1236
1242
{
1237
 
    WCHAR url[INTERNET_MAX_URL_LENGTH], domain[INTERNET_MAX_URL_LENGTH];
 
1243
    WCHAR buf1[INTERNET_MAX_URL_LENGTH], buf2[INTERNET_MAX_URL_LENGTH];
 
1244
    LPWSTR url, domain;
1238
1245
    DWORD len;
1239
1246
    HRESULT hres;
1240
1247
 
1241
1248
    TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
1242
1249
 
1243
 
    hres = CoInternetParseUrl(pwzUrl, PARSE_SECURITY_URL, 0, url, INTERNET_MAX_URL_LENGTH, &len, 0);
1244
 
    if(hres==S_OK) {
1245
 
        if(psuAction == PSU_DEFAULT)
1246
 
            hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain,
1247
 
                    INTERNET_MAX_URL_LENGTH, &len, 0);
1248
 
 
1249
 
        if(psuAction==PSU_SECURITY_URL_ONLY || hres!=S_OK) {
1250
 
            len = lstrlenW(url)+1;
1251
 
            *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
1252
 
            if(!*ppwzSecUrl)
1253
 
                return E_OUTOFMEMORY;
1254
 
 
1255
 
            memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
1256
 
            return S_OK;
 
1250
    url = buf1;
 
1251
    domain = buf2;
 
1252
    strcpyW(url, pwzUrl);
 
1253
 
 
1254
    while(1) {
 
1255
        hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, domain, INTERNET_MAX_URL_LENGTH, &len, 0);
 
1256
        if(hres!=S_OK || !strcmpW(url, domain))
 
1257
            break;
 
1258
 
 
1259
        if(url == buf1) {
 
1260
            url = buf2;
 
1261
            domain = buf1;
 
1262
        } else {
 
1263
            url = buf1;
 
1264
            domain = buf2;
1257
1265
        }
1258
 
 
 
1266
    }
 
1267
 
 
1268
    if(psuAction==PSU_SECURITY_URL_ONLY) {
 
1269
        len = lstrlenW(url)+1;
 
1270
        *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
 
1271
        if(!*ppwzSecUrl)
 
1272
            return E_OUTOFMEMORY;
 
1273
 
 
1274
        memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
 
1275
        return S_OK;
 
1276
    }
 
1277
 
 
1278
    hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain,
 
1279
            INTERNET_MAX_URL_LENGTH, &len, 0);
 
1280
    if(SUCCEEDED(hres)) {
1259
1281
        len++;
1260
1282
        *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
1261
1283
        if(!*ppwzSecUrl)
1265
1287
        return S_OK;
1266
1288
    }
1267
1289
 
1268
 
    if(psuAction == PSU_DEFAULT) {
1269
 
        hres = CoInternetParseUrl(pwzUrl, PARSE_ROOTDOCUMENT, 0, url, 0, &len, 0);
1270
 
        if(hres == S_FALSE) {
1271
 
            hres = CoInternetParseUrl(pwzUrl, PARSE_SCHEMA, 0, domain,
1272
 
                    INTERNET_MAX_URL_LENGTH, &len, 0);
 
1290
    hres = CoInternetParseUrl(url, PARSE_ROOTDOCUMENT, 0, domain, 0, &len, 0);
 
1291
    if(hres == S_FALSE) {
 
1292
        hres = CoInternetParseUrl(url, PARSE_SCHEMA, 0, domain,
 
1293
                INTERNET_MAX_URL_LENGTH, &len, 0);
 
1294
        if(hres == S_OK) {
 
1295
            domain[len] = ':';
 
1296
            hres = CoInternetParseUrl(url, PARSE_DOMAIN, 0, domain+len+1,
 
1297
                    INTERNET_MAX_URL_LENGTH-len-1, &len, 0);
1273
1298
            if(hres == S_OK) {
1274
 
                domain[len] = ':';
1275
 
                hres = CoInternetParseUrl(pwzUrl, PARSE_DOMAIN, 0, domain+len+1,
1276
 
                        INTERNET_MAX_URL_LENGTH-len-1, &len, 0);
1277
 
                if(hres == S_OK) {
1278
 
                    len = lstrlenW(domain)+1;
1279
 
                    *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
1280
 
                    if(!*ppwzSecUrl)
1281
 
                        return E_OUTOFMEMORY;
 
1299
                len = lstrlenW(domain)+1;
 
1300
                *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
 
1301
                if(!*ppwzSecUrl)
 
1302
                    return E_OUTOFMEMORY;
1282
1303
 
1283
 
                    memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
1284
 
                    return S_OK;
1285
 
                }
 
1304
                memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
 
1305
                return S_OK;
1286
1306
            }
1287
1307
        }
1288
1308
    }
1289
1309
 
1290
 
    len = lstrlenW(pwzUrl)+1;
 
1310
    len = lstrlenW(url)+1;
1291
1311
    *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
1292
1312
    if(!*ppwzSecUrl)
1293
1313
        return E_OUTOFMEMORY;
1294
1314
 
1295
 
    memcpy(*ppwzSecUrl, pwzUrl, len*sizeof(WCHAR));
 
1315
    memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
1296
1316
    return S_OK;
1297
1317
}