Skip to content

Commit 13567e7

Browse files
PPROTECHPPROTECH
authored andcommitted
samples & runtimes for apl 4.2524.0
1 parent 6672090 commit 13567e7

File tree

5 files changed

+152
-14
lines changed

5 files changed

+152
-14
lines changed

dataForHANACloud.tar.gz

23 Bytes
Binary file not shown.

runtimes/java/KxJRT.jar

0 Bytes
Binary file not shown.

sql/check_apl/check_apl.bat

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ if not exist "%SQL_SCRIPT%" (
3939
exit /b 1
4040
)
4141

42+
set "PRECHECK_SQL_SCRIPT=%SCRIPT_DIR%check_create_CHECK_APL_user.sql"
43+
if not exist "%PRECHECK_SQL_SCRIPT%" (
44+
echo Error: SQL script not found at "%PRECHECK_SQL_SCRIPT%"
45+
exit /b 1
46+
)
47+
4248
REM Default values
4349
set "DEFAULT_DB_HOST=hana:30015"
4450
set "DEFAULT_DB_USER=SYSTEM"
@@ -103,7 +109,7 @@ if "%DB_PASSWORD%"=="" (
103109
if "!DB_PASSWORD!"=="" set "DB_PASSWORD=%DEFAULT_DB_PASSWORD%"
104110
)
105111
if "%CHECK_APL_PASSWORD%"=="" (
106-
set /p CHECK_APL_PASSWORD=Enter CHECK_APL user password; Do not forget your current password policy! [Password1]:
112+
set /p CHECK_APL_PASSWORD=Enter CHECK_APL user password; Do not forget your current password policy [Password01Password01]:
107113
if "!CHECK_APL_PASSWORD!"=="" set "CHECK_APL_PASSWORD=%DEFAULT_CHECK_APL_PASSWORD%"
108114
)
109115
if "%SIGNAL_ERROR%"=="" (
@@ -138,19 +144,67 @@ if not defined HDBSQL (
138144
exit /b 1
139145
)
140146

141-
REM Build the hdbsql command
147+
echo Checking SAP HANA instance %DB_HOST% as %DB_USER% to %OUTPUT_FILE% ...
148+
echo.
149+
150+
REM Build the hdbsql commands
142151
set "HDBSQL_CMD="%HDBSQL%" -n "%DB_HOST%" -u "%DB_USER%" -p "%DB_PASSWORD%" -V OUTPUT_FORMAT=%OUTPUT_FORMAT%,SIGNAL_ERROR=%SIGNAL_ERROR%,SYSTEM_USER=%DB_USER%,SYSTEM_PASSWORD=%DB_PASSWORD%,CHECK_APL_PASSWORD=%CHECK_APL_PASSWORD% -j -I "%SQL_SCRIPT%" -A -a -F "" "" !EXTRA_ARGS!"
143152

153+
set "PRECHECK_CMD="%HDBSQL%" -n "%DB_HOST%" -u "%DB_USER%" -p "%DB_PASSWORD%" -V SYSTEM_USER=%DB_USER%,SYSTEM_PASSWORD=%DB_PASSWORD%,CHECK_APL_PASSWORD=%CHECK_APL_PASSWORD% -j -I "%PRECHECK_SQL_SCRIPT%" -A -a -F "" "" !EXTRA_ARGS!"
154+
155+
set "CHECK_CONNECTION_CMD="%HDBSQL%" -n "%DB_HOST%" -u "%DB_USER%" -p "%DB_PASSWORD%" "" !EXTRA_ARGS!"
156+
144157
REM Only add >OUTPUT_FILE if not "stdout"
145158
if /I not "%OUTPUT_FILE%"=="stdout" (
146159
set "HDBSQL_CMD=%HDBSQL_CMD% > "%OUTPUT_FILE%""
147160
)
148161

149-
REM Show the command only if requested, masking passwords
162+
echo Running pre-check ...
163+
REM Check if we can connect with provided information
164+
%CHECK_CONNECTION_CMD% >nul 2>nul
165+
if errorlevel 1 (
166+
echo Error: Unable to connect to HANA instance %DB_HOST% as user %DB_USER% with the provided password ^(hdbsql exit code 3 - authentication error^) >&2
167+
exit /b 3
168+
)
169+
echo Connection to HANA instance %DB_HOST% as user %DB_USER% successful.
170+
171+
REM Run the pre-check SQL (check_create_CHECK_APL_user.sql) using the exact same hdb parameters.
172+
REM This script contains pre-checks that must pass before running check_apl.sql.
173+
174+
REM Create temporary file for pre-check output
175+
set "PREOUT=%TEMP%\precheck_%RANDOM%.tmp"
176+
%PRECHECK_CMD% 2>"%PREOUT%"
177+
178+
REM Fatal: check for specific error codes in output
179+
findstr /C:"10001" "%PREOUT%" >nul
180+
if not errorlevel 1 (
181+
echo Fatal Error: pre-check detected %DB_USER% user does not have 'USER ADMIN' privilege >&2
182+
del /f "%PREOUT%" 2>nul
183+
exit /b 10001
184+
)
185+
186+
findstr /C:"10002" "%PREOUT%" >nul
187+
if not errorlevel 1 (
188+
echo Fatal Error: pre-check detected provided password for temporary CHECK_APL user does not match current password policy >&2
189+
del /f "%PREOUT%" 2>nul
190+
exit /b 10002
191+
)
192+
193+
REM Pre-check passed (no fatal errors)
194+
del /f "%PREOUT%" 2>nul
195+
echo Pre-check completed successfully. Actual check can be done
196+
150197
if "%SHOW_CMD_ONLY%"=="1" (
198+
REM Mask passwords in the displayed command and remove double quotes for an unquoted view
151199
set "DISPLAY_CMD=%HDBSQL_CMD%"
200+
if /I not "%OUTPUT_FILE%"=="stdout" (
201+
set "DISPLAY_CMD=%DISPLAY_CMD% > "%OUTPUT_FILE%""
202+
)
152203
setlocal enabledelayedexpansion
153-
set "DISPLAY_CMD=!DISPLAY_CMD:"%DB_PASSWORD%"="****"!"
204+
REM Remove double quotes so the command is shown without quoted arguments (user requested)
205+
set "DISPLAY_CMD=!DISPLAY_CMD:"=!"
206+
REM Mask known passwords: DB system password and CHECK_APL password
207+
set "DISPLAY_CMD=!DISPLAY_CMD:%DB_PASSWORD%=****!"
154208
set "DISPLAY_CMD=!DISPLAY_CMD:SYSTEM_PASSWORD=%DB_PASSWORD%=SYSTEM_PASSWORD=****!"
155209
set "DISPLAY_CMD=!DISPLAY_CMD:CHECK_APL_PASSWORD=%CHECK_APL_PASSWORD%=CHECK_APL_PASSWORD=****!"
156210
echo Final hdbsql command:
@@ -159,11 +213,19 @@ if "%SHOW_CMD_ONLY%"=="1" (
159213
exit /b 0
160214
)
161215

162-
REM Run the check
163-
echo Running check_apl.sql on %DB_HOST% as %DB_USER%, output to %OUTPUT_FILE% ...
164-
%HDBSQL_CMD%
216+
REM Execute the command and filter out SQL warnings containing 'HY000'
217+
if /I not "%OUTPUT_FILE%"=="stdout" (
218+
REM Output to file: filter warnings and redirect to file
219+
%HDBSQL_CMD% | findstr /V "HY000"
220+
set "exit_code=!ERRORLEVEL!"
221+
) else (
222+
REM Output to stdout: filter warnings
223+
%HDBSQL_CMD% | findstr /V "HY000"
224+
set "exit_code=!ERRORLEVEL!"
225+
)
165226

166-
exit /b %ERRORLEVEL%
227+
echo Check completed with exit code !exit_code!.
228+
exit /b !exit_code!
167229

168230
:show_help
169231
echo Usage: check_apl.bat [OPTIONS]
@@ -175,7 +237,7 @@ echo -p ^<password^> HANA DB user password (default: Manager1)
175237
echo -f ^<format^> Output format: md (Markdown), raw, etc. (default: md)
176238
echo -s ^<on^|off^> Signal error in output (default: off)
177239
echo -o ^<output_file^> File path to store output (default: hana.md.txt)
178-
echo --check_apl-password ^<pwd^> Password for CHECK_APL user (default: Password1)
240+
echo --check_apl-password ^<pwd^> Password for CHECK_APL user (default: Password01Password01)
179241
echo --show-cmd-only Show the final hdbsql command and exit
180242
echo --help Show this help message and exit
181243
echo When missing, the script will prompt for mandatory parameters (host,user,password) interactively.

sql/check_apl/check_apl.sh

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ When missing, the script will prompt for mandatory parameters (host,user,passwor
5858
Extra hdbsql parameters can be passed after the mandatory ones, and they will be appended to the hdbsql command.
5959
6060
Examples:
61-
$0 -h hana:30015 -u SYSTEM -p MyPassword -o /tmp/hana.txt
61+
$0 -h hana:30015 -u SYSTEM -p MyPassword -o /tmp/hana.md.txt
6262
$0 -h hana:30015 -u SYSTEM -p MyPassword -o /tmp/hana.md.txt -e -ssltrustcert
6363
6464
EOF
@@ -168,6 +168,12 @@ if [[ ! -f "$SQL_SCRIPT" ]]; then
168168
exit 1
169169
fi
170170

171+
PRECHECK_SQL_SCRIPT="$SCRIPT_DIR/check_create_CHECK_APL_user.sql"
172+
if [[ ! -f "$PRECHECK_SQL_SCRIPT" ]]; then
173+
echo "Error: SQL script not found at $PRECHECK_SQL_SCRIPT"
174+
exit 1
175+
fi
176+
171177
echo "Checking SAP HANA instance $DB_HOST as $DB_SYSTEM to $OUTPUT_FILE ..."
172178
echo
173179

@@ -177,10 +183,20 @@ HDBSQL_CMD="\"$HDBSQL\" -n \"$DB_HOST\" \
177183
-V OUTPUT_FORMAT=\"$OUTPUT_FORMAT\",SIGNAL_ERROR=\"$SIGNAL_ERROR\",SYSTEM_USER=\"$HANA_SYSTEM_USER\",SYSTEM_PASSWORD=\"$HANA_SYSTEM_USER_PASSWORD\",CHECK_APL_PASSWORD=\"$CHECK_APL_PASSWORD\" \
178184
-j -I \"$SQL_SCRIPT\" -A -a -F ' '"
179185

186+
PRECHECK_CMD="\"$HDBSQL\" -n \"$DB_HOST\" \
187+
-u \"$HANA_SYSTEM_USER\" \
188+
-p \"$HANA_SYSTEM_USER_PASSWORD\" \
189+
-V SYSTEM_USER=\"$HANA_SYSTEM_USER\",SYSTEM_PASSWORD=\"$HANA_SYSTEM_USER_PASSWORD\",CHECK_APL_PASSWORD=\"$CHECK_APL_PASSWORD\" \
190+
-j -I \"$PRECHECK_SQL_SCRIPT\" -A -a -F ' '"
191+
192+
CHECK_CONNECTION_CMD="\"$HDBSQL\" -n \"$DB_HOST\" -u \"$HANA_SYSTEM_USER\" -p \"$HANA_SYSTEM_USER_PASSWORD\" \"\""
193+
180194
# Inject unknown/extra parameters
181195
if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then
182196
for arg in "${EXTRA_ARGS[@]}"; do
183197
HDBSQL_CMD="$HDBSQL_CMD $arg"
198+
PRECHECK_CMD="$PRECHECK_CMD $arg"
199+
CHECK_CONNECTION_CMD="$CHECK_CONNECTION_CMD $arg"
184200
done
185201
fi
186202

@@ -190,11 +206,46 @@ if [[ -n "$OUTPUT_FILE" && "$OUTPUT_FILE" != "stdout" ]]; then
190206
DISPLAY_HDBSQL_CMD="$DISPLAY_HDBSQL_CMD -o \"$OUTPUT_FILE\""
191207
fi
192208

193-
if [[ "$SHOW_CMD_ONLY" -eq 1 ]]; then
194-
# Mask passwords in the displayed command
209+
echo "Running pre-check ..."
210+
# Check if we can connect with provided informations
211+
set +e
212+
eval $CHECK_CONNECTION_CMD > /dev/null 2>&1
213+
if [[ $? -ne 0 ]]; then
214+
echo "Error: Unable to connect to HANA instance $DB_HOST as user $HANA_SYSTEM_USER with the provided password (hdbsql exit code 3 - authentication error)" >&2
215+
exit 3
216+
fi
217+
echo "Connection to HANA instance $DB_HOST as user $HANA_SYSTEM_USER successful."
218+
219+
# Run the pre-check SQL (check_create_CHECK_APL_user.sql) using the exact same hdb parameters.
220+
# This script contains pre-checks that must pass before running check_apl.sql.
221+
222+
set -e
223+
PREOUT="$(mktemp)"
224+
eval $PRECHECK_CMD 2>"$PREOUT"
225+
# Fatal: check for specific error codes in output
226+
if grep -q '10001' "$PREOUT"; then
227+
echo "Fatal Error: pre-check detected $HANA_SYSTEM_USER user does not have 'USER ADMIN' privilege" >&2
228+
rm -f "$PREOUT"
229+
exit 10001
230+
fi
231+
if grep -q '10002' "$PREOUT"; then
232+
echo "Fatal Error: pre-check detected provided password for temporary CHECK_APL user does not match current password policy" >&2
233+
rm -f "$PREOUT"
234+
exit 10002
235+
fi
236+
# Pre-check passed (no fatal errors)
237+
rm -f "$PREOUT"
238+
echo "Pre-check completed successfully. Actual check can be done"
239+
240+
if [[ "${SHOW_CMD_ONLY:-0}" -eq 1 ]]; then
241+
# Mask passwords in the displayed command and remove double quotes for an unquoted view
195242
DISPLAY_CMD="$DISPLAY_HDBSQL_CMD"
196-
DISPLAY_CMD="${DISPLAY_CMD//\"$HANA_SYSTEM_USER_PASSWORD\"/\"****\"}"
197-
DISPLAY_CMD="${DISPLAY_CMD//SYSTEM_PASSWORD=\\\"$HANA_SYSTEM_USER_PASSWORD\\\"/SYSTEM_PASSWORD=\\\"****\\\"}"
243+
# Remove double quotes so the command is shown without quoted arguments (user requested)
244+
DISPLAY_CMD="${DISPLAY_CMD//\"/}"
245+
# Mask known passwords: DB system password and CHECK_APL password (also HANA_SYSTEM_USER_PASSWORD)
246+
DISPLAY_CMD="${DISPLAY_CMD//$DB_SYSTEM_PASSWORD/****}"
247+
DISPLAY_CMD="${DISPLAY_CMD//$HANA_SYSTEM_USER_PASSWORD/****}"
248+
DISPLAY_CMD="${DISPLAY_CMD//$CHECK_APL_PASSWORD/****}"
198249
echo "Final hdbsql command:"
199250
echo "$DISPLAY_CMD"
200251
exit 0
@@ -211,4 +262,5 @@ else
211262
exit_code=${PIPESTATUS[0]}
212263
fi
213264

265+
echo "Check completed with exit code $exit_code."
214266
exit $exit_code
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-- @configSQL
2+
DO BEGIN
3+
IF NOT EXISTS(SELECT * FROM "SYS"."EFFECTIVE_PRIVILEGES" WHERE "USER_NAME"=CURRENT_USER AND "PRIVILEGE"='USER ADMIN') THEN
4+
SIGNAL SQL_ERROR_CODE 10001 SET MESSAGE_TEXT = 'User ' || CURRENT_USER || ' does not have USER ADMIN privilege';
5+
END IF;
6+
END;
7+
DO BEGIN
8+
IF EXISTS(SELECT * FROM USERS WHERE USER_NAME='CHECK_APL') THEN
9+
EXECUTE IMMEDIATE 'DROP USER CHECK_APL CASCADE';
10+
END IF;
11+
END;
12+
13+
CREATE USER CHECK_APL PASSWORD &CHECK_APL_PASSWORD;
14+
15+
DO BEGIN
16+
IF EXISTS(SELECT * FROM "SYS"."EFFECTIVE_PRIVILEGES" WHERE "USER_NAME"=CURRENT_USER AND "PRIVILEGE"='USER ADMIN') THEN
17+
IF EXISTS(SELECT * FROM USERS WHERE USER_NAME='CHECK_APL') THEN
18+
EXECUTE IMMEDIATE 'DROP USER CHECK_APL CASCADE';
19+
ELSE
20+
SIGNAL SQL_ERROR_CODE 10002 SET MESSAGE_TEXT = 'Probably, the password &CHECK_APL_PASSWORD does not match current HANA Password policy';
21+
END IF;
22+
END IF;
23+
END;
24+

0 commit comments

Comments
 (0)