From 3adae6b124df46fe6b5d14fb04d9ed79c34f1909 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml Date: Thu, 23 Nov 2023 09:56:47 -0500 Subject: [PATCH 01/10] Get External Security Manager name Signed-off-by: Martin Zeithaml --- build/build_getesm.sh | 47 +++++++++++++++++++++++++++++++ c/getesm.c | 65 +++++++++++++++++++++++++++++++++++++++++++ c/zos.c | 25 +++++++++-------- h/zos.h | 3 ++ 4 files changed, 129 insertions(+), 11 deletions(-) create mode 100755 build/build_getesm.sh create mode 100644 c/getesm.c diff --git a/build/build_getesm.sh b/build/build_getesm.sh new file mode 100755 index 000000000..ae37648a5 --- /dev/null +++ b/build/build_getesm.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +# This program and the accompanying materials are +# made available under the terms of the Eclipse Public License v2.0 which accompanies +# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. + +echo "********************************************************************************" +echo "Building getesm..." + +WORKING_DIR=$(cd $(dirname "$0") && pwd) +COMMON="$WORKING_DIR/.." + +date_stamp=$(date +%Y%m%d%S) +TMP_DIR="${WORKING_DIR}/tmp-${date_stamp}" +mkdir -p "${TMP_DIR}" && cd "${TMP_DIR}" + +rm -f "${COMMON}/bin/getesm" + +xlclang \ + -q64 \ + "-Wc,float(ieee),longname,langlvl(extc99),gonum,goff,ASM,asmlib('SYS1.MACLIB')" \ + -D_OPEN_SYS_FILE_EXT=1 \ + -D_XOPEN_SOURCE=600 \ + -D_OPEN_THREADS=1 \ + -DNOIBMHTTP=1 \ + -DCMGRTEST=1 \ + -I "${COMMON}/h" \ + -o "${COMMON}/bin/getesm" \ + ${COMMON}/c/alloc.c \ + ${COMMON}/c/getesm.c \ + ${COMMON}/c/timeutls.c \ + ${COMMON}/c/utils.c \ + ${COMMON}/c/zos.c + +rm -rf "${TMP_DIR}" + +# This program and the accompanying materials are +# made available under the terms of the Eclipse Public License v2.0 which accompanies +# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. diff --git a/c/getesm.c b/c/getesm.c new file mode 100644 index 000000000..292137758 --- /dev/null +++ b/c/getesm.c @@ -0,0 +1,65 @@ + + +/* + This program and the accompanying materials are + made available under the terms of the Eclipse Public License v2.0 which accompanies + this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html + + SPDX-License-Identifier: EPL-2.0 + + Copyright Contributors to the Zowe Project. +*/ + +#include "stdio.h" +#include "string.h" +#include "zowetypes.h" +#include "zos.h" + +int getESMHelp(int error) { + if (error) + printf("Wrong parameter(s), see help:\n"); + printf("getesm - gets the External Security Manager name and returns RACF, TSS, ACF2 or NONE\n"); + printf(" Format: getesm [-h]\n"); + printf(" Options:\n -h This help\n"); + printf(" Exit values:\n 0 for succesful detection\n 1 otherwise\n"); + return error; +} + +int main(int argc, char *argv[]) { + int rc; + + if ( argc > 1 ){ + if (argc == 2 && strcmp(argv[1], "-h") == 0) + return getESMHelp(0); + else + return getESMHelp(1); + } + + switch(getExternalSecurityManager()) { + case ZOS_ESM_RTSS: + printf("TSS\n"); + return 0; + case ZOS_ESM_RACF: + printf("RACF\n"); + return 0; + case ZOS_ESM_ACF2: + printf("ACF2\n"); + return 0; + case ZOS_ESM_NONE: + printf("NONE\n"); + return 0; + default: + printf("Error processing Communications Vector Table (CVT).\n"); + return 1; + } +} + +/* + This program and the accompanying materials are + made available under the terms of the Eclipse Public License v2.0 which accompanies + this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html + + SPDX-License-Identifier: EPL-2.0 + + Copyright Contributors to the Zowe Project. +*/ diff --git a/c/zos.c b/c/zos.c index af4c8f663..943378785 100644 --- a/c/zos.c +++ b/c/zos.c @@ -206,17 +206,20 @@ int ddnameExists(char *ddname){ ExternalSecurityManager getExternalSecurityManager(void) { CVT *cvt = getCVT(); - - if (!memcmp(cvt->cvtrac, RACF_EYECATCHER, ESM_EYECATCHER_LENGTH)) { - return ZOS_ESM_RACF; - } - else if (!memcmp(cvt->cvtrac, RTSS_EYECATCHER, ESM_EYECATCHER_LENGTH)) { - return ZOS_ESM_RTSS; - } - else if (!memcmp(cvt->cvtrac, ACF2_EYECATCHER, ESM_EYECATCHER_LENGTH)) { - return ZOS_ESM_ACF2; - } - else { + if (cvt->cvtrac) { + if (!memcmp(cvt->cvtrac, RACF_EYECATCHER, ESM_EYECATCHER_LENGTH)) { + return ZOS_ESM_RACF; + } + else if (!memcmp(cvt->cvtrac, RTSS_EYECATCHER, ESM_EYECATCHER_LENGTH)) { + return ZOS_ESM_RTSS; + } + else if (!memcmp(cvt->cvtrac, ACF2_EYECATCHER, ESM_EYECATCHER_LENGTH)) { + return ZOS_ESM_ACF2; + } + else { + return ZOS_ESM_NONE; + } + } else { return ZOS_ESM_NONE; } } diff --git a/h/zos.h b/h/zos.h index b30787fa0..448083c7a 100644 --- a/h/zos.h +++ b/h/zos.h @@ -64,6 +64,8 @@ #define isCallerSRB ZOSCSRB #define isCallerCrossMemory ZOSCXMEM +#define getExternalSecurityManager GETESM + #endif @@ -650,6 +652,7 @@ Addr31 getATCVT(void); void *getIEACSTBL(void); cvtfix *getCVTPrefix(void); ECVT *getECVT(void); +ExternalSecurityManager getExternalSecurityManager(void); typedef struct ocvt_tag{ /* see SYS1.MACLIB(BPXZOCVT) */ char eyecatcher[4]; /* "OCVT" */ From 1d9df1185f0389720ac0ed29a5798e4453194d88 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Thu, 23 Nov 2023 16:05:05 +0100 Subject: [PATCH 02/10] Update CHANGELOG.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f272d1147..343f5ab95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## `2.13.0` - Added support for using "zowe.network" and "components.zss.zowe.network" to set TLS version properties. (#411) +- Added utility for general usage returning the name of External Security Manager ## `2.11.0` From ad3092a0cf2e1a2a6baecbbe0a30c396f474573d Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Mon, 27 Nov 2023 03:57:48 -0500 Subject: [PATCH 03/10] Create getesm.yml Signed-off-by: 1000TurquoisePogs --- .github/workflows/getesm.yml | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/workflows/getesm.yml diff --git a/.github/workflows/getesm.yml b/.github/workflows/getesm.yml new file mode 100644 index 000000000..c7369d3ad --- /dev/null +++ b/.github/workflows/getesm.yml @@ -0,0 +1,74 @@ +name: Build getesm +on: + push: + branches: + - v2.x/staging + - v2.x/master + - v2.x/rc + pull_request: + types: [opened, reopened, synchronize] + workflow_dispatch: + inputs: + PERFORM_RELEASE: + description: '[Release] perform release' + required: false + default: 'false' + + +jobs: + check-permission: + runs-on: ubuntu-latest + steps: + # this action will fail the whole workflow if permission check fails + - name: check permission + uses: zowe-actions/shared-actions/permission-check@main + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + build-test: + runs-on: ubuntu-latest + needs: check-permission + steps: + - name: '[Prep 1] Checkout' + uses: actions/checkout@v2 + + - name: '[Prep 2] Setup jFrog CLI' + uses: jfrog/setup-jfrog-cli@v2 + env: + JF_ARTIFACTORY_1: ${{ secrets.JF_ARTIFACTORY_TOKEN }} + + - name: '[Prep 3] Set date' + id: date + run: echo "date=$(date +'%Y%m%d%S')" >> $GITHUB_OUTPUT + + - name: '[Prep 4] Set version' + id: version + run: echo "version=$(cat build/getesm.proj.env | grep VERSION | cut -f 2 -d=)" >> $GITHUB_OUTPUT + + - name: '[Prep 5] Set branchname' + id: branch + run: echo "branch=$(if [ -n '${{ github.head_ref }}' ]; then echo '${{ github.head_ref }}' | tr '[:lower:]' '[:upper:]'; else echo '${{ github.ref_name }}' | tr '[:lower:]' '[:upper:]'; fi | sed 's@/@-@g')" >> $GITHUB_OUTPUT + + + - name: '[Prep 6] Prepare workflow' + uses: zowe-actions/shared-actions/prepare-workflow@main + + + - name: '[Packaging] Make pax' + uses: zowe-actions/shared-actions/make-pax@main + with: + pax-name: 'getesm' + pax-options: '-x os390 -pp' + pax-local-workspace: './.pax/getesm' + pax-ssh-username: ${{ secrets.SSH_MARIST_USERNAME }} + pax-ssh-password: ${{ secrets.SSH_MARIST_RACF_PASSWORD }} + + - name: '[Publish] Publish' + uses: zowe-actions/shared-actions/publish@main + if: success() + with: + artifacts: | + .pax/utils/getesm.pax + publish-target-path-pattern: libs-snapshot-local/org/zowe/utils/${{ steps.version.outputs.version }}-${{ steps.branch.outputs.branch }} + publish-target-file-pattern: getesm-${{ steps.version.outputs.version }}-${{ steps.date.outputs.date }}.pax + perform-release: ${{ github.event.inputs.PERFORM_RELEASE }} From a02a496da3911e7d070d4042835de756ec63e88f Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Mon, 27 Nov 2023 03:59:47 -0500 Subject: [PATCH 04/10] Create prepare-workspace.sh Signed-off-by: 1000TurquoisePogs --- .pax/getesm/prepare-workspace.sh | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .pax/getesm/prepare-workspace.sh diff --git a/.pax/getesm/prepare-workspace.sh b/.pax/getesm/prepare-workspace.sh new file mode 100644 index 000000000..f9f5a9f79 --- /dev/null +++ b/.pax/getesm/prepare-workspace.sh @@ -0,0 +1,44 @@ +#!/bin/sh -e +set -xe + +################################################################################ +# This program and the accompanying materials are made available under the terms of the +# Eclipse Public License v2.0 which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. +################################################################################ + +################################################################################ +# Prepare folders/files will be uploaded to Build/PAX server +################################################################################ + +# contants +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(dirname "$0") +PAX_WORKSPACE_DIR=.pax/getesm + +# make sure in project root folder +cd $SCRIPT_DIR/../.. + +# prepare pax workspace +echo "[${SCRIPT_NAME}] preparing folders ..." +rm -fr "${PAX_WORKSPACE_DIR}/ascii" && mkdir -p "${PAX_WORKSPACE_DIR}/ascii" +rm -fr "${PAX_WORKSPACE_DIR}/content" && mkdir -p "${PAX_WORKSPACE_DIR}/content" + +echo "[${SCRIPT_NAME}] copying files ..." +cp -R * "${PAX_WORKSPACE_DIR}/ascii" +# move files shouldn't change encoding to IBM-1047 to content folder +rsync -rv \ + --include '*/' \ + --include '*.png' \ + --exclude '*' \ + --prune-empty-dirs --remove-source-files \ + "${PAX_WORKSPACE_DIR}/ascii/" \ + "${PAX_WORKSPACE_DIR}/content/" + +# update build information +# BRANCH_NAME and BUILD_NUMBER is Jenkins environment variable +commit_hash=$(git rev-parse --verify HEAD) From 323c29e2484dc12650e69f31f15932417bbf892c Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Mon, 27 Nov 2023 04:01:00 -0500 Subject: [PATCH 05/10] Create pre-packaging.sh Signed-off-by: 1000TurquoisePogs --- .pax/getesm/pre-packaging.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .pax/getesm/pre-packaging.sh diff --git a/.pax/getesm/pre-packaging.sh b/.pax/getesm/pre-packaging.sh new file mode 100644 index 000000000..7d1ddd32e --- /dev/null +++ b/.pax/getesm/pre-packaging.sh @@ -0,0 +1,31 @@ +#!/bin/sh -e +set -xe + +################################################################################ +# This program and the accompanying materials are made available under the terms of the +# Eclipse Public License v2.0 which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. +################################################################################ + + +# contants +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(pwd) + +# build +echo "$SCRIPT_NAME build getesm ..." +STEPLIB=CBC.SCCNCMP "$SCRIPT_DIR/content/build/build_getesm.sh" + +# clean up content folder +echo "$SCRIPT_NAME cleaning up pax folder ..." +cd "$SCRIPT_DIR" +mv content bak && mkdir -p content + +# move real files to the content folder +echo "$SCRIPT_NAME coping files should be in pax ..." +cd "$SCRIPT_DIR/content" +cp ../bak/bin/getesm . From aa32ebdf1fff6fa0382491ef1c31e11ad0f9e80b Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Mon, 27 Nov 2023 04:02:18 -0500 Subject: [PATCH 06/10] Update and rename getesm.yml to build-getesm.yml Signed-off-by: 1000TurquoisePogs --- .github/workflows/{getesm.yml => build-getesm.yml} | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) rename .github/workflows/{getesm.yml => build-getesm.yml} (91%) diff --git a/.github/workflows/getesm.yml b/.github/workflows/build-getesm.yml similarity index 91% rename from .github/workflows/getesm.yml rename to .github/workflows/build-getesm.yml index c7369d3ad..364415087 100644 --- a/.github/workflows/getesm.yml +++ b/.github/workflows/build-getesm.yml @@ -4,15 +4,12 @@ on: branches: - v2.x/staging - v2.x/master - - v2.x/rc + - v2.x/rc + - v3.x/staging + - v3.x/master + - v3.x/rc pull_request: types: [opened, reopened, synchronize] - workflow_dispatch: - inputs: - PERFORM_RELEASE: - description: '[Release] perform release' - required: false - default: 'false' jobs: @@ -68,7 +65,7 @@ jobs: if: success() with: artifacts: | - .pax/utils/getesm.pax + .pax/getesm/getesm.pax publish-target-path-pattern: libs-snapshot-local/org/zowe/utils/${{ steps.version.outputs.version }}-${{ steps.branch.outputs.branch }} publish-target-file-pattern: getesm-${{ steps.version.outputs.version }}-${{ steps.date.outputs.date }}.pax perform-release: ${{ github.event.inputs.PERFORM_RELEASE }} From 690b5e0fe6b794ab925336aa7bf434424e85f0bc Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Mon, 27 Nov 2023 04:17:46 -0500 Subject: [PATCH 07/10] Update pre-packaging.sh Signed-off-by: 1000TurquoisePogs --- .pax/getesm/pre-packaging.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.pax/getesm/pre-packaging.sh b/.pax/getesm/pre-packaging.sh index 7d1ddd32e..5452ff3ba 100644 --- a/.pax/getesm/pre-packaging.sh +++ b/.pax/getesm/pre-packaging.sh @@ -18,6 +18,10 @@ SCRIPT_DIR=$(pwd) # build echo "$SCRIPT_NAME build getesm ..." +echo "build folder:" +ls -ltr "$SCRIPT_DIR/content/build" +echo "parent folder:" +ls -ltr "$SCRIPT_DIR/content" STEPLIB=CBC.SCCNCMP "$SCRIPT_DIR/content/build/build_getesm.sh" # clean up content folder From 8bd0d53964514036573b531f117f96b99e6ab811 Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Tue, 28 Nov 2023 05:14:31 -0500 Subject: [PATCH 08/10] set x bit Signed-off-by: 1000TurquoisePogs --- .pax/getesm/pre-packaging.sh | 0 .pax/getesm/prepare-workspace.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .pax/getesm/pre-packaging.sh mode change 100644 => 100755 .pax/getesm/prepare-workspace.sh diff --git a/.pax/getesm/pre-packaging.sh b/.pax/getesm/pre-packaging.sh old mode 100644 new mode 100755 diff --git a/.pax/getesm/prepare-workspace.sh b/.pax/getesm/prepare-workspace.sh old mode 100644 new mode 100755 From 7a4da35f102f4b4312f6d40ff78c6077092c6da0 Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Tue, 28 Nov 2023 04:24:34 -0600 Subject: [PATCH 09/10] Create getesm.proj.env Signed-off-by: 1000TurquoisePogs --- build/getesm.proj.env | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 build/getesm.proj.env diff --git a/build/getesm.proj.env b/build/getesm.proj.env new file mode 100644 index 000000000..03632e9de --- /dev/null +++ b/build/getesm.proj.env @@ -0,0 +1,3 @@ +PROJECT="getesm" +VERSION=2.13.0 +DEPS="" From c88a9aa1cd1d0ddbf6ab5de35a94c43389eea09e Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Tue, 28 Nov 2023 04:26:20 -0600 Subject: [PATCH 10/10] Update build-getesm.yml Signed-off-by: 1000TurquoisePogs --- .github/workflows/build-getesm.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-getesm.yml b/.github/workflows/build-getesm.yml index 364415087..813d9aff7 100644 --- a/.github/workflows/build-getesm.yml +++ b/.github/workflows/build-getesm.yml @@ -10,7 +10,12 @@ on: - v3.x/rc pull_request: types: [opened, reopened, synchronize] - + workflow_dispatch: + inputs: + PERFORM_RELEASE: + description: '[Release] perform release' + required: false + default: 'false' jobs: check-permission: @@ -69,3 +74,11 @@ jobs: publish-target-path-pattern: libs-snapshot-local/org/zowe/utils/${{ steps.version.outputs.version }}-${{ steps.branch.outputs.branch }} publish-target-file-pattern: getesm-${{ steps.version.outputs.version }}-${{ steps.date.outputs.date }}.pax perform-release: ${{ github.event.inputs.PERFORM_RELEASE }} + + - name: '[Prep Release] Bump version' + if: ${{ github.event.inputs.PERFORM_RELEASE == 'true' }} + uses: zowe-actions/zlux-builds/bump-zis-version@v2.x/main + with: + version: 'MINOR' + env: + GITHUB_TOKEN: ${{ secrets.ZOWE_ROBOT_TOKEN }}