cmd/runAs.cmd (57 lines of code) (raw):
@ECHO OFF
IF "%~1" EQU "" GOTO INVALID_ARGS
IF "%~2" EQU "" GOTO INVALID_ARGS
IF "%~3" EQU "" GOTO INVALID_ARGS
IF "%~4" EQU "" GOTO INVALID_ARGS
IF "%~5" NEQ "" GOTO INVALID_ARGS
REM Define OS bitness
"%~dp0x86\JetBrains.runAs.exe" -t -l:errors
SET "EXIT_CODE=%ERRORLEVEL%"
IF %EXIT_CODE% EQU 64 (
GOTO RUN_AS
)
IF %EXIT_CODE% EQU 32 (
GOTO RUN_AS
)
ECHO.
IF %EXIT_CODE% EQU 1 ECHO ##teamcity[message text='Invoker has no administrative privileges, when running under the Windows service.' status='ERROR']
IF %EXIT_CODE% EQU 2 ECHO ##teamcity[message text='Invoker has no SeAssignPrimaryTokenPrivilege (Replace a process-level token), when running under the Windows service.' status='ERROR']
IF %EXIT_CODE% EQU 3 ECHO ##teamcity[message text='Invoker has no SeTcbPrivilege (Act as part of the operating system), when running under the Windows service.' status='ERROR']
EXIT /B %EXIT_CODE%
:RUN_AS
IF %EXIT_CODE% EQU 64 (
SET RUN_AS_PATH="%~dp0x64\JetBrains.runAs.exe"
IF %3 EQU 64 (
SET CMD_PATH="cmd.exe"
) ELSE (
SET CMD_PATH="%windir%\SysWOW64\cmd.exe"
)
) ELSE (
SET RUN_AS_PATH="%~dp0x86\JetBrains.runAs.exe"
SET CMD_PATH="cmd.exe"
)
REM Check an agent will be able to remove temporary files
SET RUNAS_TMP_FILE=runAs-%RANDOM%-%RANDOM%.tmp
PUSHD %TMP%
%RUN_AS_PATH% -i:auto -l:errors "-p:%~4" "-c:%~1" -b:-10000 %CMD_PATH% /C "type nul > %RUNAS_TMP_FILE%"
del %RUNAS_TMP_FILE% 2>nul
IF EXIST %RUNAS_TMP_FILE% (
%RUN_AS_PATH% -i:auto -l:errors "-p:%~4" "-c:%~1" -b:-10000 %CMD_PATH% /C "del %RUNAS_TMP_FILE% > nul"
ECHO ##teamcity[message text='Incorrect runAs configuration: agent won't be able to remove temporary files created by the build step, see teamcity-agent.log for details .' status='ERROR']
@EXIT -1
)
set RUNAS_TMP_FILE=
POPD
REM Run as user
%RUN_AS_PATH% -i:auto -l:errors "-p:%~4" "-c:%~1" -b:-10000 %CMD_PATH% /C "%~2"
SET "EXIT_CODE=%ERRORLEVEL%"
ECHO.
IF %EXIT_CODE% EQU -10000 ECHO ##teamcity[message text='Unknown error occurred.' status='ERROR']
IF %EXIT_CODE% EQU -10001 ECHO ##teamcity[message text='Invalid usage of the tool.' status='ERROR']
IF %EXIT_CODE% EQU -10002 ECHO ##teamcity[message text='Security error occurred.' status='ERROR']
IF %EXIT_CODE% EQU -10003 ECHO ##teamcity[message text='WIN32 API error occurred.' status='ERROR']
EXIT /B %EXIT_CODE%
:INVALID_ARGS
@ECHO Invalid arguments.
@ECHO Usage: runAs.cmd settings_file_name command_file_name bitness password
@EXIT -1