VirtualBox

Changeset 94714 in vbox for trunk/src


Ignore:
Timestamp:
Apr 27, 2022 7:41:12 AM (3 years ago)
Author:
vboxsync
Message:

Main,Settings: Integrate the extension pack cryptographic module in the ExtPack manager etc., bugref:9955

Location:
trunk/src/VBox
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp

    r94643 r94714  
    834834    systemProperties->COMGETTER(DefaultVRDEExtPack)(str.asOutParam());
    835835    RTPrintf(List::tr("Remote desktop ExtPack:          %ls\n"), str.raw());
     836    systemProperties->COMGETTER(DefaultCryptoExtPack)(str.asOutParam());
     837    RTPrintf(List::tr("VM encryption ExtPack:           %ls\n"), str.raw());
    836838    systemProperties->COMGETTER(LogHistoryCount)(&ulValue);
    837839    RTPrintf(List::tr("Log history count:               %u\n"), ulValue);
     
    12131215        Bstr bstrVrdeModule;
    12141216        CHECK_ERROR2I_STMT(extPacks[i], COMGETTER(VRDEModule)(bstrVrdeModule.asOutParam()),hrc=hrcCheck; bstrVrdeModule.setNull());
     1217        Bstr bstrCryptoModule;
     1218        CHECK_ERROR2I_STMT(extPacks[i], COMGETTER(CryptoModule)(bstrCryptoModule.asOutParam()),hrc=hrcCheck; bstrCryptoModule.setNull());
    12151219        BOOL fUsable;
    12161220        CHECK_ERROR2I_STMT(extPacks[i], COMGETTER(Usable)(&fUsable),                     hrc = hrcCheck; fUsable = FALSE);
     
    12231227        RTPrintf(List::tr(
    12241228                   "Pack no.%2zu:   %ls\n"
    1225                    "Version:      %ls\n"
    1226                    "Revision:     %u\n"
    1227                    "Edition:      %ls\n"
    1228                    "Description:  %ls\n"
    1229                    "VRDE Module:  %ls\n"
    1230                    "Usable:       %RTbool\n"
    1231                    "Why unusable: %ls\n"),
     1229                   "Version:        %ls\n"
     1230                   "Revision:       %u\n"
     1231                   "Edition:        %ls\n"
     1232                   "Description:    %ls\n"
     1233                   "VRDE Module:    %ls\n"
     1234                   "Crypto Module:  %ls\n"
     1235                   "Usable:         %RTbool\n"
     1236                   "Why unusable:   %ls\n"),
    12321237                 i, bstrName.raw(),
    12331238                 bstrVersion.raw(),
     
    12361241                 bstrDesc.raw(),
    12371242                 bstrVrdeModule.raw(),
     1243                 bstrCryptoModule.raw(),
    12381244                 fUsable != FALSE,
    12391245                 bstrWhy.raw());
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r94704 r94714  
    1229712297    name="ISystemProperties"
    1229812298    extends="$unknown"
    12299     uuid="e6bf9165-6685-4ebe-96cd-9c1b7ab7f776"
     12299    uuid="a2a3be3d-664a-47e9-a4c5-add220d4ebb1"
    1230012300    wsmap="managed"
    1230112301    rest="managed"
     
    1256212562        For details about VirtualBox Remote Desktop Extension and how to
    1256312563        implement one, please refer to the VirtualBox SDK.
     12564      </desc>
     12565    </attribute>
     12566
     12567    <attribute name="defaultCryptoExtPack" type="wstring">
     12568      <desc>
     12569        The name of the extension pack providing the default cryptographic support
     12570        for full VM encryption.
     12571
     12572        This attribute is for choosing between multiple extension packs
     12573        providing cryptographic support. If only one is installed, it will automatically be the
     12574        default one. The attribute value can be empty if no cryptographic extension
     12575        pack is installed.
    1256412576      </desc>
    1256512577    </attribute>
     
    2515725169  <interface
    2515825170    name="IExtPackBase" extends="$unknown"
    25159     uuid="f25aca3d-0b79-4350-bdd9-a0376cd6e6e3"
     25171    uuid="aa204a12-5b29-45a5-b5d6-c2bafcdb9b0b"
    2516025172    wsmap="suppress"
    2516125173    reservedMethods="4" reservedAttributes="8"
     
    2519625208    <attribute name="VRDEModule" type="wstring" readonly="yes">
    2519725209      <desc>The name of the VRDE module if the extension pack sports one.</desc>
     25210    </attribute>
     25211    <attribute name="CryptoModule" type="wstring" readonly="yes">
     25212      <desc>
     25213        The name of the crypto module if the extension pack sports one.
     25214        This module is required for full VM encryption.
     25215      </desc>
    2519825216    </attribute>
    2519925217    <attribute name="plugIns" type="IExtPackPlugIn" safearray="yes" readonly="yes">
  • trunk/src/VBox/Main/include/ExtPackManagerImpl.h

    r93449 r94714  
    6767    HRESULT getEdition(com::Utf8Str &aEdition);
    6868    HRESULT getVRDEModule(com::Utf8Str &aVRDEModule);
     69    HRESULT getCryptoModule(com::Utf8Str &aCryptoModule);
    6970    HRESULT getPlugIns(std::vector<ComPtr<IExtPackPlugIn> > &aPlugIns);
    7071    HRESULT getUsable(BOOL *aUsable);
     
    131132#endif
    132133    HRESULT     i_checkVrde(void);
     134    HRESULT     i_checkCrypto(void);
    133135    HRESULT     i_getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
     136    HRESULT     i_getCryptoLibraryName(Utf8Str *a_pstrCryptoLibrary);
    134137    HRESULT     i_getLibraryName(const char *a_pszModuleName, Utf8Str *a_pstrLibrary);
    135138    bool        i_wantsToBeDefaultVrde(void) const;
     139    bool        i_wantsToBeDefaultCrypto(void) const;
    136140    HRESULT     i_refresh(bool *pfCanDelete);
    137141#ifndef VBOX_COM_INPROC
     
    200204    HRESULT getEdition(com::Utf8Str &aEdition);
    201205    HRESULT getVRDEModule(com::Utf8Str &aVRDEModule);
     206    HRESULT getCryptoModule(com::Utf8Str &aCryptoModule);
    202207    HRESULT getPlugIns(std::vector<ComPtr<IExtPackPlugIn> > &aPlugIns);
    203208    HRESULT getUsable(BOOL *aUsable);
     
    261266    HRESULT     i_checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
    262267    int         i_getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
     268    HRESULT     i_checkCryptoExtPack(Utf8Str const *a_pstrExtPack);
     269    int         i_getCryptoLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
    263270    HRESULT     i_getLibraryPathForExtPack(const char *a_pszModuleName, const char *a_pszExtPack, Utf8Str *a_pstrLibrary);
    264271    HRESULT     i_getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
     272    HRESULT     i_getDefaultCryptoExtPack(Utf8Str *a_pstrExtPack);
    265273    bool        i_isExtPackUsable(const char *a_pszExtPack);
    266274    void        i_dumpAllToReleaseLog(void);
  • trunk/src/VBox/Main/include/ExtPackUtil.h

    r93115 r94714  
    107107    /** The name of the VRDE module, empty if none. */
    108108    RTCString               strVrdeModule;
     109    /** The name of the cryptographic module, empty if none. */
     110    RTCString               strCryptoModule;
    109111    /** The number of plug-in descriptors. */
    110112    uint32_t                cPlugIns;
  • trunk/src/VBox/Main/include/Global.h

    r93480 r94714  
    5757 */
    5858#define VBOXVRDP_KLUDGE_EXTPACK_NAME    "Built-in-VBoxVRDP"
     59
     60/** The VBoxPuelCrypto kludge extension pack name.
     61 *
     62 * This is not a valid extension pack name (dashes are not allowed), and
     63 * hence will not conflict with real extension packs.
     64 */
     65#define VBOXPUELCRYPTO_KLUDGE_EXTPACK_NAME    "Built-in-VBoxPuelCrypto"
    5966
    6067/**
  • trunk/src/VBox/Main/include/SystemPropertiesImpl.h

    r94643 r94714  
    101101    HRESULT getDefaultVRDEExtPack(com::Utf8Str &aDefaultVRDEExtPack) RT_OVERRIDE;
    102102    HRESULT setDefaultVRDEExtPack(const com::Utf8Str &aDefaultVRDEExtPack) RT_OVERRIDE;
     103    HRESULT getDefaultCryptoExtPack(com::Utf8Str &aDefaultCryptoExtPack) RT_OVERRIDE;
     104    HRESULT setDefaultCryptoExtPack(const com::Utf8Str &aDefaultCryptoExtPack) RT_OVERRIDE;
    103105    HRESULT getLogHistoryCount(ULONG *aLogHistoryCount) RT_OVERRIDE;
    104106    HRESULT setLogHistoryCount(ULONG aLogHistoryCount) RT_OVERRIDE;
     
    185187    HRESULT i_setWebServiceAuthLibrary(const com::Utf8Str &aPath);
    186188    HRESULT i_setDefaultVRDEExtPack(const com::Utf8Str &aExtPack);
     189    HRESULT i_setDefaultCryptoExtPack(const com::Utf8Str &aExtPack);
    187190    HRESULT i_setAutostartDatabasePath(const com::Utf8Str &aPath);
    188191    HRESULT i_setDefaultAdditionsISO(const com::Utf8Str &aPath);
  • trunk/src/VBox/Main/src-all/ExtPackManagerImpl.cpp

    r93449 r94714  
    481481{
    482482    aVRDEModule = m->Desc.strVrdeModule;
     483    return S_OK;
     484}
     485
     486HRESULT ExtPackFile::getCryptoModule(com::Utf8Str &aCryptoModule)
     487{
     488    aCryptoModule = m->Desc.strCryptoModule;
    483489    return S_OK;
    484490}
     
    11561162
    11571163/**
     1164 * Check if the extension pack is usable and has a cryptographic module.
     1165 *
     1166 * @returns S_OK or COM error status with error information.
     1167 *
     1168 * @remarks Caller holds the extension manager lock for reading, no locking
     1169 *          necessary.
     1170 */
     1171HRESULT ExtPack::i_checkCrypto(void)
     1172{
     1173    HRESULT hrc;
     1174    if (   m != NULL
     1175        && m->fUsable)
     1176    {
     1177        if (m->Desc.strCryptoModule.isNotEmpty())
     1178            hrc = S_OK;
     1179        else
     1180            hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a cryptographic module"), m->Desc.strName.c_str());
     1181    }
     1182    else
     1183        hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str());
     1184    return hrc;
     1185}
     1186
     1187/**
    11581188 * Same as checkVrde(), except that it also resolves the path to the module.
    11591189 *
     
    11751205            hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"),
    11761206                           m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str());
     1207    }
     1208    return hrc;
     1209}
     1210
     1211/**
     1212 * Same as i_checkCrypto(), except that it also resolves the path to the module.
     1213 *
     1214 * @returns S_OK or COM error status with error information.
     1215 * @param   a_pstrCryptoLibrary  Where to return the path on success.
     1216 *
     1217 * @remarks Caller holds the extension manager lock for reading, no locking
     1218 *          necessary.
     1219 */
     1220HRESULT ExtPack::i_getCryptoLibraryName(Utf8Str *a_pstrCryptoLibrary)
     1221{
     1222    HRESULT hrc = i_checkCrypto();
     1223    if (SUCCEEDED(hrc))
     1224    {
     1225        if (i_findModule(m->Desc.strCryptoModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3,
     1226                         a_pstrCryptoLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/))
     1227            hrc = S_OK;
     1228        else
     1229            hrc = setError(E_FAIL, tr("Failed to locate the cryptographic module '%s' in extension pack '%s'"),
     1230                           m->Desc.strCryptoModule.c_str(), m->Desc.strName.c_str());
    11771231    }
    11781232    return hrc;
     
    12141268    return m->fUsable
    12151269        && m->Desc.strVrdeModule.isNotEmpty();
     1270}
     1271
     1272/**
     1273 * Check if this extension pack wishes to be the default cryptographic provider.
     1274 *
     1275 * @returns @c true if it wants to and it is in a usable state, otherwise
     1276 *          @c false.
     1277 *
     1278 * @remarks Caller holds the extension manager lock for reading, no locking
     1279 *          necessary.
     1280 */
     1281bool ExtPack::i_wantsToBeDefaultCrypto(void) const
     1282{
     1283    return m->fUsable
     1284        && m->Desc.strCryptoModule.isNotEmpty();
    12161285}
    12171286
     
    20972166{
    20982167    aVRDEModule = m->Desc.strVrdeModule;
     2168    return S_OK;
     2169}
     2170
     2171HRESULT ExtPack::getCryptoModule(com::Utf8Str &aCryptoModule)
     2172{
     2173    aCryptoModule = m->Desc.strCryptoModule;
    20992174    return S_OK;
    21002175}
     
    35093584
    35103585/**
     3586 * Checks that the specified extension pack contains a cryptographic module and that it
     3587 * is shipshape.
     3588 *
     3589 * @returns S_OK if ok, appropriate failure status code with details.
     3590 * @param   a_pstrExtPack   The name of the extension pack.
     3591 */
     3592HRESULT ExtPackManager::i_checkCryptoExtPack(Utf8Str const *a_pstrExtPack)
     3593{
     3594    AutoCaller autoCaller(this);
     3595    HRESULT hrc = autoCaller.rc();
     3596    if (SUCCEEDED(hrc))
     3597    {
     3598        AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
     3599
     3600        ExtPack *pExtPack = i_findExtPack(a_pstrExtPack->c_str());
     3601        if (pExtPack)
     3602            hrc = pExtPack->i_checkCrypto();
     3603        else
     3604            hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
     3605    }
     3606
     3607    return hrc;
     3608}
     3609
     3610/**
     3611 * Gets the full path to the cryptographic library of the specified extension pack.
     3612 *
     3613 * This will do extacly the same as checkCryptoExtPack and then resolve the
     3614 * library path.
     3615 *
     3616 * @returns VINF_SUCCESS if a path is returned, VBox error status and message
     3617 *          return if not.
     3618 * @param   a_pstrExtPack       The extension pack.
     3619 * @param   a_pstrCryptoLibrary Where to return the path.
     3620 */
     3621int ExtPackManager::i_getCryptoLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrCryptoLibrary)
     3622{
     3623    AutoCaller autoCaller(this);
     3624    HRESULT hrc = autoCaller.rc();
     3625    if (SUCCEEDED(hrc))
     3626    {
     3627        AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
     3628
     3629        ExtPack *pExtPack = i_findExtPack(a_pstrExtPack->c_str());
     3630        if (pExtPack)
     3631            hrc = pExtPack->i_getCryptoLibraryName(a_pstrCryptoLibrary);
     3632        else
     3633            hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"),
     3634                           a_pstrExtPack->c_str());
     3635    }
     3636
     3637    return Global::vboxStatusCodeFromCOM(hrc);
     3638}
     3639
     3640
     3641/**
    35113642 * Gets the full path to the specified library of the specified extension pack.
    35123643 *
     
    35683699
    35693700/**
     3701 * Gets the name of the default cryptographic extension pack.
     3702 *
     3703 * @returns S_OK or some COM error status on red tape failure.
     3704 * @param   a_pstrExtPack   Where to return the extension pack name.  Returns
     3705 *                          empty if no extension pack wishes to be the default
     3706 *                          VRDP provider.
     3707 */
     3708HRESULT ExtPackManager::i_getDefaultCryptoExtPack(Utf8Str *a_pstrExtPack)
     3709{
     3710    a_pstrExtPack->setNull();
     3711
     3712    AutoCaller autoCaller(this);
     3713    HRESULT hrc = autoCaller.rc();
     3714    if (SUCCEEDED(hrc))
     3715    {
     3716        AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
     3717
     3718        for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
     3719             it != m->llInstalledExtPacks.end();
     3720             ++it)
     3721        {
     3722            if ((*it)->i_wantsToBeDefaultCrypto())
     3723            {
     3724                *a_pstrExtPack = (*it)->m->Desc.strName;
     3725                break;
     3726            }
     3727        }
     3728    }
     3729    return hrc;
     3730}
     3731
     3732/**
    35703733 * Checks if an extension pack is (present and) usable.
    35713734 *
     
    36063769        {
    36073770            if (pExtPackData->fUsable)
    3608                 LogRel(("  %s (Version: %s r%u%s%s; VRDE Module: %s)\n",
    3609                         pExtPackData->Desc.strName.c_str(),
    3610                         pExtPackData->Desc.strVersion.c_str(),
    3611                         pExtPackData->Desc.uRevision,
    3612                         pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
    3613                         pExtPackData->Desc.strEdition.c_str(),
    3614                         pExtPackData->Desc.strVrdeModule.c_str() ));
    3615             else
    3616                 LogRel(("  %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n",
     3771                LogRel(("  %s (Version: %s r%u%s%s; VRDE Module: %s; Crypto Module: %s)\n",
    36173772                        pExtPackData->Desc.strName.c_str(),
    36183773                        pExtPackData->Desc.strVersion.c_str(),
     
    36213776                        pExtPackData->Desc.strEdition.c_str(),
    36223777                        pExtPackData->Desc.strVrdeModule.c_str(),
     3778                        pExtPackData->Desc.strCryptoModule.c_str() ));
     3779            else
     3780                LogRel(("  %s (Version: %s r%u%s%s; VRDE Module: %s; Crypto Module: %s unusable because of '%s')\n",
     3781                        pExtPackData->Desc.strName.c_str(),
     3782                        pExtPackData->Desc.strVersion.c_str(),
     3783                        pExtPackData->Desc.uRevision,
     3784                        pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
     3785                        pExtPackData->Desc.strEdition.c_str(),
     3786                        pExtPackData->Desc.strVrdeModule.c_str(),
     3787                        pExtPackData->Desc.strCryptoModule.c_str(),
    36233788                        pExtPackData->strWhyUnusable.c_str() ));
    36243789        }
  • trunk/src/VBox/Main/src-all/ExtPackUtil.cpp

    r93115 r94714  
    9090    a_pExtPackDesc->strMainVMModule.setNull();
    9191    a_pExtPackDesc->strVrdeModule.setNull();
     92    a_pExtPackDesc->strCryptoModule.setNull();
    9293    a_pExtPackDesc->cPlugIns = 0;
    9394    a_pExtPackDesc->paPlugIns = NULL;
     
    210211
    211212    /*
     213     * The cryptographic module, optional.
     214     * Accept both none and empty as tokens of no cryptographic module.
     215     */
     216    const char *pszCryptoModule = NULL;
     217    const xml::ElementNode *pCryptoModuleElm = pVBoxExtPackElm->findChildElement("CryptoModule");
     218    if (pCryptoModuleElm)
     219    {
     220        pszCryptoModule = pCryptoModuleElm->getValueN(RT_XML_CONTENT_SMALL);
     221        if (!pszCryptoModule || *pszCryptoModule == '\0')
     222            pszCryptoModule = NULL;
     223        else if (!VBoxExtPackIsValidModuleString(pszCryptoModule))
     224            return &(new RTCString(ExtPackUtil::tr("Invalid cryptographic module string: ")))->append(pszCryptoModule);
     225    }
     226
     227    /*
    212228     * Whether to show the license, optional. (presense is enough here)
    213229     */
     
    238254    a_pExtPackDesc->strMainVMModule = pszMainVMModule;
    239255    a_pExtPackDesc->strVrdeModule   = pszVrdeModule;
     256    a_pExtPackDesc->strCryptoModule = pszCryptoModule;
    240257    a_pExtPackDesc->cPlugIns        = cPlugIns;
    241258    a_pExtPackDesc->paPlugIns       = paPlugIns;
     
    411428    a_pExtPackDesc->strMainVMModule.setNull();
    412429    a_pExtPackDesc->strVrdeModule.setNull();
     430    a_pExtPackDesc->strCryptoModule.setNull();
    413431    a_pExtPackDesc->cPlugIns = 0;
    414432    RTMemFree(a_pExtPackDesc->paPlugIns);
  • trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp

    r94643 r94714  
    103103    i_setVRDEAuthLibrary(Utf8Str::Empty);
    104104    i_setDefaultVRDEExtPack(Utf8Str::Empty);
     105    i_setDefaultCryptoExtPack(Utf8Str::Empty);
    105106
    106107    m->uLogHistoryCount = 3;
     
    11571158
    11581159
     1160HRESULT SystemProperties::getDefaultCryptoExtPack(com::Utf8Str &aExtPack)
     1161{
     1162    HRESULT hrc = S_OK;
     1163    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     1164    Utf8Str strExtPack(m->strDefaultCryptoExtPack);
     1165    if (strExtPack.isNotEmpty())
     1166    {
     1167        if (strExtPack.equals(VBOXPUELCRYPTO_KLUDGE_EXTPACK_NAME))
     1168            hrc = S_OK;
     1169        else
     1170#ifdef VBOX_WITH_EXTPACK
     1171            hrc = mParent->i_getExtPackManager()->i_checkCryptoExtPack(&strExtPack);
     1172#else
     1173            hrc = setError(E_FAIL, tr("The extension pack '%s' does not exist"), strExtPack.c_str());
     1174#endif
     1175    }
     1176    else
     1177    {
     1178#ifdef VBOX_WITH_EXTPACK
     1179        hrc = mParent->i_getExtPackManager()->i_getDefaultCryptoExtPack(&strExtPack);
     1180#endif
     1181        if (strExtPack.isEmpty())
     1182        {
     1183            /*
     1184            * Klugde - check if VBoxPuelCrypto.dll/.so/.dylib is installed.
     1185            * This is hardcoded uglyness, sorry.
     1186            */
     1187            char szPath[RTPATH_MAX];
     1188            int vrc = RTPathAppPrivateArch(szPath, sizeof(szPath));
     1189            if (RT_SUCCESS(vrc))
     1190                vrc = RTPathAppend(szPath, sizeof(szPath), "VBoxPuelCrypto");
     1191            if (RT_SUCCESS(vrc))
     1192                vrc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
     1193            if (RT_SUCCESS(vrc) && RTFileExists(szPath))
     1194            {
     1195                /* Illegal extpack name, so no conflict. */
     1196                strExtPack = VBOXPUELCRYPTO_KLUDGE_EXTPACK_NAME;
     1197            }
     1198        }
     1199    }
     1200
     1201    if (SUCCEEDED(hrc))
     1202          aExtPack = strExtPack;
     1203
     1204    return S_OK;
     1205}
     1206
     1207
     1208HRESULT SystemProperties::setDefaultCryptoExtPack(const com::Utf8Str &aExtPack)
     1209{
     1210    HRESULT hrc = S_OK;
     1211    if (aExtPack.isNotEmpty())
     1212    {
     1213        if (aExtPack.equals(VBOXPUELCRYPTO_KLUDGE_EXTPACK_NAME))
     1214            hrc = S_OK;
     1215        else
     1216#ifdef VBOX_WITH_EXTPACK
     1217            hrc = mParent->i_getExtPackManager()->i_checkCryptoExtPack(&aExtPack);
     1218#else
     1219            hrc = setError(E_FAIL, tr("The extension pack '%s' does not exist"), aExtPack.c_str());
     1220#endif
     1221    }
     1222    if (SUCCEEDED(hrc))
     1223    {
     1224        AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     1225        hrc = i_setDefaultCryptoExtPack(aExtPack);
     1226        if (SUCCEEDED(hrc))
     1227        {
     1228            /* VirtualBox::i_saveSettings() needs the VirtualBox write lock. */
     1229            alock.release();
     1230            AutoWriteLock vboxLock(mParent COMMA_LOCKVAL_SRC_POS);
     1231            hrc = mParent->i_saveSettings();
     1232        }
     1233    }
     1234
     1235    return hrc;
     1236}
     1237
     1238
    11591239HRESULT SystemProperties::getLogHistoryCount(ULONG *count)
    11601240{
     
    18531933    if (FAILED(rc)) return rc;
    18541934
     1935    rc = i_setDefaultCryptoExtPack(data.strDefaultCryptoExtPack);
     1936    if (FAILED(rc)) return rc;
     1937
    18551938    m->uLogHistoryCount  = data.uLogHistoryCount;
    18561939    m->fExclusiveHwVirt  = data.fExclusiveHwVirt;
     
    21182201{
    21192202    m->strDefaultVRDEExtPack = aExtPack;
     2203
     2204    return S_OK;
     2205}
     2206
     2207HRESULT SystemProperties::i_setDefaultCryptoExtPack(const com::Utf8Str &aExtPack)
     2208{
     2209    m->strDefaultCryptoExtPack = aExtPack;
    21202210
    21212211    return S_OK;
  • trunk/src/VBox/Main/xml/Settings.cpp

    r94685 r94714  
    23322332                        pelmGlobalChild->getAttributeValue("webServiceAuthLibrary", systemProperties.strWebServiceAuthLibrary);
    23332333                        pelmGlobalChild->getAttributeValue("defaultVRDEExtPack", systemProperties.strDefaultVRDEExtPack);
     2334                        pelmGlobalChild->getAttributeValue("defaultCryptoExtPack", systemProperties.strDefaultCryptoExtPack);
    23342335                        pelmGlobalChild->getAttributeValue("LogHistoryCount", systemProperties.uLogHistoryCount);
    23352336                        pelmGlobalChild->getAttributeValue("autostartDatabasePath", systemProperties.strAutostartDatabasePath);
     
    26282629    if (systemProperties.strDefaultVRDEExtPack.length())
    26292630        pelmSysProps->setAttribute("defaultVRDEExtPack", systemProperties.strDefaultVRDEExtPack);
     2631    if (systemProperties.strDefaultCryptoExtPack.length())
     2632        pelmSysProps->setAttribute("defaultCryptoExtPack", systemProperties.strDefaultCryptoExtPack);
    26302633    pelmSysProps->setAttribute("LogHistoryCount", systemProperties.uLogHistoryCount);
    26312634    if (systemProperties.strAutostartDatabasePath.length())
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