VirtualBox

Changeset 68099 in vbox


Ignore:
Timestamp:
Jul 24, 2017 2:32:33 PM (7 years ago)
Author:
vboxsync
Message:

VBoxCredProv/VBoxCredProvCredential.cpp: Emphasize which string is what and free those accordingly in VBoxCredProvCredential::RetrieveCredentials(). Updated documentation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxCredProv/VBoxCredProvCredential.cpp

    r68098 r68099  
    516516    if (RT_SUCCESS(rc))
    517517    {
     518        VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Received credentials for user '%ls'\n", pwszUser);
     519
    518520        /*
    519521         * In case we got a "display name" (e.g. "John Doe")
     
    521523         * to translate the data first ...
    522524         */
    523         PWSTR pwszAcount;
    524         if (TranslateAccountName(pwszUser, &pwszAcount))
    525         {
    526             VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Translated account name %ls -> %ls\n",
    527                                 pwszUser, pwszAcount);
     525        PWSTR pwszExtractedName = NULL;
     526        if (   TranslateAccountName(pwszUser, &pwszExtractedName)
     527            && pwszExtractedName)
     528        {
     529            VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Translated account name '%ls' -> '%ls'\n",
     530                                pwszUser, pwszExtractedName);
    528531
    529532            RTMemWipeThoroughly(pwszUser, (RTUtf16Len(pwszUser) + 1) * sizeof(RTUTF16), 3 /* Passes */);
    530533            RTUtf16Free(pwszUser);
    531534
    532             pwszUser = pwszAcount;
     535            pwszUser = RTUtf16Dup(pwszExtractedName);
     536
     537            CoTaskMemFree(pwszExtractedName);
     538            pwszExtractedName = NULL;
    533539        }
    534540        else
     
    539545             * ([email protected] -> jdoe in domain my-domain.sub.net.com.)
    540546             */
    541             PWSTR pwszDomain;
    542             if (ExtractAccoutData(pwszUser, &pwszAcount, &pwszDomain))
     547            PWSTR pwszExtractedDomain = NULL;
     548            if (ExtractAccoutData(pwszUser, &pwszExtractedName, &pwszExtractedDomain))
    543549            {
    544550                /* Update user name. */
    545                 if (pwszUser)
     551                if (pwszExtractedName)
    546552                {
    547                     RTMemWipeThoroughly(pwszUser, (RTUtf16Len(pwszUser) + 1) * sizeof(RTUTF16), 3 /* Passes */);
    548                     RTUtf16Free(pwszUser);
     553                    if (pwszUser)
     554                    {
     555                        RTMemWipeThoroughly(pwszUser, (RTUtf16Len(pwszUser) + 1) * sizeof(RTUTF16), 3 /* Passes */);
     556                        RTUtf16Free(pwszUser);
     557                    }
     558
     559                    pwszUser = RTUtf16Dup(pwszExtractedName);
     560
     561                    CoTaskMemFree(pwszExtractedName);
     562                    pwszExtractedName = NULL;
    549563                }
    550                 pwszUser = pwszAcount;
    551564
    552565                /* Update domain. */
    553                 if (pwszDomain)
     566                if (pwszExtractedDomain)
    554567                {
    555                     RTMemWipeThoroughly(pwszDomain, (RTUtf16Len(pwszDomain) + 1) * sizeof(RTUTF16), 3 /* Passes */);
    556                     RTUtf16Free(pwszDomain);
     568                    if (pwszDomain)
     569                    {
     570                        RTMemWipeThoroughly(pwszDomain, (RTUtf16Len(pwszDomain) + 1) * sizeof(RTUTF16), 3 /* Passes */);
     571                        RTUtf16Free(pwszDomain);
     572                    }
     573
     574                    pwszDomain = RTUtf16Dup(pwszExtractedDomain);
     575
     576                    CoTaskMemFree(pwszExtractedDomain);
     577                    pwszExtractedDomain = NULL;
    557578                }
    558                 pwszDomain = pwszDomain;
    559 
    560                 VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Extracted account data pwszAccount=%ls, pwszDomain=%ls\n",
    561                                     pwszUser, pwszDomain);
     579
     580                VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Extracted account name '%ls' + domain '%ls'\n",
     581                                    pwszUser ? pwszUser : L"<NULL>", pwszDomain ? pwszDomain : L"<NULL>");
    562582            }
    563583        }
     
    574594        setField(VBOXCREDPROV_FIELDID_DOMAINNAME, pwszDomain,   true /* fNotifyUI */);
    575595    }
     596
     597    VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Wiping ...\n");
    576598
    577599    VbglR3CredentialsDestroyUtf16(pwszUser, pwszPassword, pwszDomain, 3 /* cPasses */);
     
    697719/**
    698720 * Searches the account name based on a display (real) name (e.g. "John Doe" -> "jdoe").
    699  * Result "ppwszAccoutName" needs to be freed with CoTaskMemFree!
     721 *
     722 * @return  TRUE if translation of the account name was successful, FALSE if not.
     723 * @param   pwszDisplayName         Display name to extract account name from.
     724 * @param   ppwszAccoutName         Where to store the extracted account name on success.
     725 *                                  Needs to be free'd with CoTaskMemFree().
    700726 */
    701727BOOL VBoxCredProvCredential::TranslateAccountName(PWSTR pwszDisplayName, PWSTR *ppwszAccoutName)
     
    814840 *
    815841 * This might be a principal or FQDN string.
     842 *
     843 * @return  TRUE if extraction of the account name was successful, FALSE if not.
     844 * @param   pwszAccountData         (Raw) account data string to extract data from.
     845 * @param   ppwszAccoutName         Where to store the extracted account name on success.
     846 *                                  Needs to be free'd with CoTaskMemFree().
     847 * @param   ppwszDomain             Where to store the extracted domain name on success.
     848 *                                  Needs to be free'd with CoTaskMemFree().
    816849 */
    817850BOOL VBoxCredProvCredential::ExtractAccoutData(PWSTR pwszAccountData, PWSTR *ppwszAccoutName, PWSTR *ppwszDomain)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette