VirtualBox

Changeset 84150 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
May 5, 2020 5:48:08 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
137750
Message:

Guest Control/VBoxService: Also made attribute allocation of VBOXSERVICECTRLSESSIONSTARTUPINFO + VBOXSERVICECTRLPROCSTARTUPINFO dynamic. bugref:9320

Location:
trunk/src/VBox/Additions/common/VBoxService
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h

    r84149 r84150  
    337337 * @{ */
    338338extern int                      VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo);
     339extern int                      VgsvcGstCtrlSessionStartupInfoInitEx(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo, size_t cbUser, size_t cbPassword, size_t cbDomain);
    339340extern void                     VgsvcGstCtrlSessionStartupInfoDestroy(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo);
    340341
     
    352353 * @{ */
    353354extern int                      VgsvcGstCtrlProcessStartupInfoInit(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
    354 extern int                      VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, size_t cbEnv, size_t cbArgs);
     355extern int                      VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, size_t cbCmd, size_t cbUser, size_t cbPassword, size_t cbDomain, size_t cbArgs, size_t cbEnv);
    355356extern void                     VgsvcGstCtrlProcessStartupInfoDestroy(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
    356357extern void                     VgsvcGstCtrlProcessStartupInfoFree(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo);
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp

    r84147 r84150  
    6666 * @returns VBox status code.
    6767 * @param   pStartupInfo        Process startup info to initializes.
     68 * @param   cbCmd               Size (in bytes) to use for the command buffer.
     69 * @param   cbUser              Size (in bytes) to use for the user name buffer.
     70 * @param   cbPassword          Size (in bytes) to use for the password buffer.
     71 * @param   cbDomain            Size (in bytes) to use for the domain buffer.
    6872 * @param   cbArgs              Size (in bytes) to use for the arguments buffer.
    6973 * @param   cbEnv               Size (in bytes) to use for the environment buffer.
    7074 */
    7175int VgsvcGstCtrlProcessStartupInfoInitEx(PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo,
     76                                         size_t cbCmd,
     77                                         size_t cbUser, size_t cbPassword, size_t cbDomain,
    7278                                         size_t cbArgs, size_t cbEnv)
    7379{
    7480    AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
     81    AssertReturn(cbCmd,           VERR_INVALID_PARAMETER);
     82    AssertReturn(cbUser,          VERR_INVALID_PARAMETER);
     83    AssertReturn(cbPassword,      VERR_INVALID_PARAMETER);
     84    AssertReturn(cbDomain,        VERR_INVALID_PARAMETER);
    7585    AssertReturn(cbArgs,          VERR_INVALID_PARAMETER);
    7686    AssertReturn(cbEnv,           VERR_INVALID_PARAMETER);
     
    8898    do
    8999    {
    90         ALLOC_STR(Cmd,      sizeof(char) * GUESTPROCESS_MAX_CMD_LEN);
     100        ALLOC_STR(Cmd,      cbCmd);
    91101        ALLOC_STR(Args,     cbArgs);
    92102        ALLOC_STR(Env,      cbEnv);
    93         ALLOC_STR(User,     sizeof(char) * GUESTPROCESS_MAX_USER_LEN);
    94         ALLOC_STR(Password, sizeof(char) * GUESTPROCESS_MAX_PASSWORD_LEN);
    95         ALLOC_STR(Domain,   sizeof(char) * GUESTPROCESS_MAX_DOMAIN_LEN);
     103        ALLOC_STR(User,     cbUser);
     104        ALLOC_STR(Password, cbPassword);
     105        ALLOC_STR(Domain,   cbDomain);
    96106
    97107        return VINF_SUCCESS;
     
    113123{
    114124    return VgsvcGstCtrlProcessStartupInfoInitEx(pStartupInfo,
     125                                                GUESTPROCESS_MAX_CMD_LEN,
     126                                                GUESTPROCESS_MAX_USER_LEN,  GUESTPROCESS_MAX_PASSWORD_LEN,
     127                                                GUESTPROCESS_MAX_DOMAIN_LEN,
    115128                                                GUESTPROCESS_MAX_ARGS_LEN, GUESTPROCESS_MAX_ENV_LEN);
    116129}
     
    179192    if (pStartupInfo->cb##a_Str) \
    180193    { \
     194        pStartupInfoDup->psz##a_Str = (char *)RTStrDup(pStartupInfo->psz##a_Str); \
     195        AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
     196        pStartupInfoDup->cb##a_Str  = strlen(pStartupInfoDup->psz##a_Str) + 1 /* Include terminator */; \
     197    }
     198
     199#define DUP_MEM(a_Str) \
     200    if (pStartupInfo->cb##a_Str) \
     201    { \
    181202        pStartupInfoDup->psz##a_Str = (char *)RTMemDup(pStartupInfo->psz##a_Str, pStartupInfo->cb##a_Str); \
    182203        AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
     
    185206
    186207            DUP_STR(Cmd);
    187             DUP_STR(Args);
    188             DUP_STR(Env);
     208            DUP_MEM(Args);
     209            DUP_MEM(Env);
    189210            DUP_STR(User);
    190211            DUP_STR(Password);
     
    192213
    193214#undef DUP_STR
     215#undef DUP_MEM
    194216
    195217            return pStartupInfoDup;
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp

    r84148 r84150  
    10351035
    10361036/**
    1037  * Initializes a session startup info.
     1037 * Initializes a session startup info, extended version.
    10381038 *
    10391039 * @returns VBox status code.
    10401040 * @param   pStartupInfo        Session startup info to initializes.
    1041  */
    1042 int VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo)
     1041 * @param   cbUser              Size (in bytes) to use for the user name buffer.
     1042 * @param   cbPassword          Size (in bytes) to use for the password buffer.
     1043 * @param   cbDomain            Size (in bytes) to use for the domain name buffer.
     1044 */
     1045int VgsvcGstCtrlSessionStartupInfoInitEx(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo,
     1046                                         size_t cbUser, size_t cbPassword, size_t cbDomain)
    10431047{
    10441048    AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
     
    10561060    do
    10571061    {
    1058         ALLOC_STR(User,     sizeof(char) * GUESTPROCESS_MAX_USER_LEN);
    1059         ALLOC_STR(Password, sizeof(char) * GUESTPROCESS_MAX_PASSWORD_LEN);
    1060         ALLOC_STR(Domain,   sizeof(char) * GUESTPROCESS_MAX_DOMAIN_LEN);
     1062        ALLOC_STR(User,     cbUser);
     1063        ALLOC_STR(Password, cbPassword);
     1064        ALLOC_STR(Domain,   cbDomain);
    10611065
    10621066        return VINF_SUCCESS;
     
    10681072    VgsvcGstCtrlSessionStartupInfoDestroy(pStartupInfo);
    10691073    return VERR_NO_MEMORY;
     1074}
     1075
     1076/**
     1077 * Initializes a session startup info.
     1078 *
     1079 * @returns VBox status code.
     1080 * @param   pStartupInfo        Session startup info to initializes.
     1081 */
     1082int VgsvcGstCtrlSessionStartupInfoInit(PVBOXSERVICECTRLSESSIONSTARTUPINFO pStartupInfo)
     1083{
     1084    return VgsvcGstCtrlSessionStartupInfoInitEx(pStartupInfo,
     1085                                                GUESTPROCESS_MAX_USER_LEN, GUESTPROCESS_MAX_PASSWORD_LEN,
     1086                                                GUESTPROCESS_MAX_DOMAIN_LEN);
    10701087}
    10711088
     
    11271144    if (pStartupInfo->cb##a_Str) \
    11281145    { \
    1129         pStartupInfoDup->psz##a_Str = (char *)RTMemDup(pStartupInfo->psz##a_Str, pStartupInfo->cb##a_Str); \
     1146        pStartupInfoDup->psz##a_Str = (char *)RTStrDup(pStartupInfo->psz##a_Str); \
    11301147        AssertPtrBreak(pStartupInfoDup->psz##a_Str); \
    1131         pStartupInfoDup->cb##a_Str  = pStartupInfo->cb##a_Str; \
     1148        pStartupInfoDup->cb##a_Str  = strlen(pStartupInfoDup->psz##a_Str) + 1 /* Include terminator */; \
    11321149    }
    11331150            DUP_STR(User);
Note: See TracChangeset for help on using the changeset viewer.

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