VirtualBox

Changeset 42973 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 24, 2012 12:30:32 PM (12 years ago)
Author:
vboxsync
Message:

tstRTProcCreateEx: Pass %TEMP% and other % stuff to the child process.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTProcCreateEx.cpp

    r39835 r42973  
    6868    /* 8 */ "\\\"\\",
    6969    /* 9 */ "\\\\\"\\",
     70    /*10 */ "%TEMP%",
     71    /*11 */ "%TEMP%\filename",
     72    /*12 */ "%TEMP%postfix",
     73    /*13 */ "Prefix%TEMP%postfix",
     74    /*14 */ "%",
     75    /*15 */ "%%",
     76    /*16 */ "%%%",
     77    /*17 */ "%X",
     78    /*18 */ "%%X",
    7079    NULL
    7180};
     
    7584{
    7685    int rc = RTR3InitExeNoArguments(0);
    77     if (rc)
     86    if (RT_FAILURE(rc))
    7887        return RTMsgInitFailure(rc);
    7988
     
    8594    {
    8695        RTPrintf("GetUserName failed with last error=%ld\n", GetLastError());
    87         return VERR_AUTHENTICATION_FAILURE;
    88     }
    89     else
    90     {
    91 /* Does not work on NT4 (yet). */
    92 #if 0
    93         DWORD cbSid = 0;
    94         DWORD cbDomain = 0;
    95         SID_NAME_USE sidUse;
    96         /* First try to figure out how much space for SID + domain name we need. */
    97         BOOL bRet = LookupAccountName(NULL /* current system*/,
    98                                       szUser,
    99                                       NULL,
    100                                       &cbSid,
    101                                       NULL,
    102                                       &cbDomain,
    103                                       &sidUse);
    104         if (!bRet)
     96        return RTEXITCODE_FAILURE;
     97    }
     98# if 0 /* Does not work on NT4 (yet). */
     99    DWORD cbSid = 0;
     100    DWORD cbDomain = 0;
     101    SID_NAME_USE sidUse;
     102    /* First try to figure out how much space for SID + domain name we need. */
     103    BOOL bRet = LookupAccountName(NULL /* current system*/,
     104                                  szUser,
     105                                  NULL,
     106                                  &cbSid,
     107                                  NULL,
     108                                  &cbDomain,
     109                                  &sidUse);
     110    if (!bRet)
     111    {
     112        DWORD dwErr = GetLastError();
     113        if (dwErr != ERROR_INSUFFICIENT_BUFFER)
    105114        {
    106             DWORD dwErr = GetLastError();
    107             if (dwErr != ERROR_INSUFFICIENT_BUFFER)
    108             {
    109                 RTPrintf("LookupAccountName(1) failed with last error=%ld\n", dwErr);
    110                 return VERR_AUTHENTICATION_FAILURE;
    111             }
     115            RTPrintf("LookupAccountName(1) failed with last error=%ld\n", dwErr);
     116            return RTEXITCODE_FAILURE;
    112117        }
    113 
    114         /* Now try getting the real SID + domain name. */
    115         SID *pSid = (SID *)RTMemAlloc(cbSid);
    116         AssertPtr(pSid);
    117         char *pszDomain = (char *)RTMemAlloc(cbDomain); /* Size in TCHAR! */
    118         AssertPtr(pszDomain);
    119 
    120         if (!LookupAccountName(NULL /* Current system */,
    121                                szUser,
    122                                pSid,
    123                                &cbSid,
    124                                pszDomain,
    125                                &cbDomain,
    126                                &sidUse))
    127         {
    128             RTPrintf("LookupAccountName(2) failed with last error=%ld\n", GetLastError());
    129             return VERR_AUTHENTICATION_FAILURE;
    130         }
    131         RTMemFree(pSid);
    132         RTMemFree(pszDomain);
    133 #endif
    134     }
     118    }
     119
     120    /* Now try getting the real SID + domain name. */
     121    SID *pSid = (SID *)RTMemAlloc(cbSid);
     122    AssertPtr(pSid);
     123    char *pszDomain = (char *)RTMemAlloc(cbDomain); /* Size in TCHAR! */
     124    AssertPtr(pszDomain);
     125
     126    if (!LookupAccountName(NULL /* Current system */,
     127                           szUser,
     128                           pSid,
     129                           &cbSid,
     130                           pszDomain,
     131                           &cbDomain,
     132                           &sidUse))
     133    {
     134        RTPrintf("LookupAccountName(2) failed with last error=%ld\n", GetLastError());
     135        return RTEXITCODE_FAILURE;
     136    }
     137    RTMemFree(pSid);
     138    RTMemFree(pszDomain);
     139# endif
    135140#else
    136141    /** @todo Lookup UID/effective UID, maybe GID? */
    137142#endif
    138     return rc;
     143    return RTEXITCODE_SUCCESS;
    139144}
    140145
     
    174179{
    175180    int rc = RTR3InitExeNoArguments(0);
    176     if (rc)
     181    if (RT_FAILURE(rc))
    177182        return RTMsgInitFailure(rc);
    178183
     184    int cErrors = 0;
    179185    for (int i = 0; i < argc; i++)
    180186        if (strcmp(argv[i], g_apszArgs4[i]))
     
    184190                         "child4: expected='%s'\n",
    185191                         i, argv[i], g_apszArgs4[i]);
    186             rc++;
     192            cErrors++;
    187193        }
    188     return rc;
    189 }
    190 
    191 static void tstRTCreateProcEx4(void)
     194
     195    return cErrors == 0 ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
     196}
     197
     198static void tstRTCreateProcEx4(const char *pszAsUser, const char *pszPassword)
    192199{
    193200    RTTestISub("Argument with spaces and stuff");
     
    195202    RTPROCESS hProc;
    196203    RTTESTI_CHECK_RC_RETV(RTProcCreateEx(g_szExecName, g_apszArgs4, RTENV_DEFAULT, 0 /*fFlags*/, NULL,
    197                                          NULL, NULL, NULL, NULL, &hProc), VINF_SUCCESS);
     204                                         NULL, NULL, pszAsUser, pszPassword, &hProc), VINF_SUCCESS);
    198205    RTPROCSTATUS ProcStatus = { -1, RTPROCEXITREASON_ABEND };
    199206    RTTESTI_CHECK_RC(RTProcWait(hProc, RTPROCWAIT_FLAGS_BLOCK, &ProcStatus), VINF_SUCCESS);
     
    209216{
    210217    int rc = RTR3InitExeNoArguments(0);
    211     if (rc)
     218    if (RT_FAILURE(rc))
    212219        return RTMsgInitFailure(rc);
    213220
     
    218225    RTStrmPrintf(g_pStdOut, "s");
    219226
    220     return 0;
    221 }
    222 
    223 static void tstRTCreateProcEx3(void)
     227    return RTEXITCODE_SUCCESS;
     228}
     229
     230static void tstRTCreateProcEx3(const char *pszAsUser, const char *pszPassword)
    224231{
    225232    RTTestISub("Standard Out+Err");
     
    238245    RTPROCESS hProc;
    239246    RTTESTI_CHECK_RC_RETV(RTProcCreateEx(g_szExecName, apszArgs, RTENV_DEFAULT, 0 /*fFlags*/, NULL,
    240                                          &Handle, &Handle, NULL, NULL, &hProc), VINF_SUCCESS);
     247                                         &Handle, &Handle, pszAsUser, pszPassword, &hProc), VINF_SUCCESS);
    241248    RTTESTI_CHECK_RC(RTPipeClose(hPipeW), VINF_SUCCESS);
    242249
     
    279286{
    280287    int rc = RTR3InitExeNoArguments(0);
    281     if (rc)
     288    if (RT_FAILURE(rc))
    282289        return RTMsgInitFailure(rc);
    283290
     
    285292    RTStrmPrintf(g_pStdOut, "ignore this output\n");
    286293
    287     return 0;
    288 }
    289 
    290 static void tstRTCreateProcEx2(void)
     294    return RTEXITCODE_SUCCESS;
     295}
     296
     297static void tstRTCreateProcEx2(const char *pszAsUser, const char *pszPassword)
    291298{
    292299    RTTestISub("Standard Err");
     
    305312    RTPROCESS hProc;
    306313    RTTESTI_CHECK_RC_RETV(RTProcCreateEx(g_szExecName, apszArgs, RTENV_DEFAULT, 0 /*fFlags*/, NULL,
    307                                          NULL, &Handle, NULL, NULL, &hProc), VINF_SUCCESS);
     314                                         NULL, &Handle, pszAsUser, pszPassword, &hProc), VINF_SUCCESS);
    308315    RTTESTI_CHECK_RC(RTPipeClose(hPipeW), VINF_SUCCESS);
    309316
     
    346353{
    347354    int rc = RTR3InitExeNoArguments(0);
    348     if (rc)
     355    if (RT_FAILURE(rc))
    349356        return RTMsgInitFailure(rc);
     357
    350358    RTPrintf("it works");
    351359    RTStrmPrintf(g_pStdErr, "ignore this output\n");
    352     return 0;
    353 }
    354 
    355 
    356 static void tstRTCreateProcEx1(void)
     360
     361    return RTEXITCODE_SUCCESS;
     362}
     363
     364
     365static void tstRTCreateProcEx1(const char *pszAsUser, const char *pszPassword)
    357366{
    358367    RTTestISub("Standard Out");
     
    371380    RTPROCESS hProc;
    372381    RTTESTI_CHECK_RC_RETV(RTProcCreateEx(g_szExecName, apszArgs, RTENV_DEFAULT, 0 /*fFlags*/, NULL,
    373                                          &Handle, NULL, NULL, NULL, &hProc), VINF_SUCCESS);
     382                                         &Handle, NULL, pszAsUser, pszPassword, &hProc), VINF_SUCCESS);
    374383    RTTESTI_CHECK_RC(RTPipeClose(hPipeW), VINF_SUCCESS);
    375384
     
    442451     * The tests.
    443452     */
    444     tstRTCreateProcEx1();
    445     tstRTCreateProcEx2();
    446     tstRTCreateProcEx3();
    447     tstRTCreateProcEx4();
     453    tstRTCreateProcEx1(pszAsUser, pszPassword);
     454    tstRTCreateProcEx2(pszAsUser, pszPassword);
     455    tstRTCreateProcEx3(pszAsUser, pszPassword);
     456    tstRTCreateProcEx4(pszAsUser, pszPassword);
    448457    if (pszAsUser)
    449458        tstRTCreateProcEx5(pszAsUser, pszPassword);
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