如何使用 Java 确定在 z/OS 上哪个安全管理器处于活动状态?

Posted

技术标签:

【中文标题】如何使用 Java 确定在 z/OS 上哪个安全管理器处于活动状态?【英文标题】:How can I determine which security manager is active on z/OS using Java? 【发布时间】:2018-09-20 16:55:36 【问题描述】:

我正在 z/OS 上编写 Java 代码,我需要找出系统上哪个安全管理器(RACF、ACF2 或 TopSecret)处于活动状态。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用 IBM JZOS 包来查看内存,如下所示。对于生产代码,我会为安全管理器创建一个枚举,而不是传递字符串并且必须处理字符串比较。

import com.ibm.jzos.ZUtil;

/**
 * This is a sample program that uses IBM JZOS to determine
 * the Enterprise Security Manager that is active on a z/OS
 * system.
 * <p>
 * @see com.ibm.jzos.ZUtil#peekOSMemory(long, int)
 * @see com.ibm.jzos.ZUtil#peekOSMemory(long, byte[])
 */
public class peek 

    public static void main(String[] args) throws Exception 

        byte[] rcvtIdBytes = new byte[4];
        long pPSA  = 0L;
        int psaOffsetCVT = 16;
        long pCVT  = ZUtil.peekOSMemory(pPSA + psaOffsetCVT, 4); // Get address of CVT from PSA+16

        int cvtOffsetCVTRAC = 0x3e0;                             // Offset of CVTRAC (@RCVT) in the CVT
        long pCVTRAC =
                ZUtil.peekOSMemory(pCVT + cvtOffsetCVTRAC, 4);   // Get the address of CVTRAC (Mapped by ICHPRCVT)

        // Now we can retrieve the 4 byte ID (in IBM-1047) of the active ESM.
        int cvtracOffsetRCVTID = 0x45;                                   // Offset of RCVTID in the RCVT
        ZUtil.peekOSMemory(pCVTRAC + cvtracOffsetRCVTID, rcvtIdBytes);   // Get the RCVTID

        String rcvtId = new String(rcvtIdBytes, "IBM-1047");

        System.out.println("The Security Manager is: "+rcvtId);
    

【讨论】:

剪切并粘贴示例,它完美运行,感谢约翰。 IBMUSER:/u/ibmuser&gt;java -classpath . peek 安全管理员是:RACF​​

以上是关于如何使用 Java 确定在 z/OS 上哪个安全管理器处于活动状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 z/os Unix 组中显示用户?

如何在 z/OS 上将 java 作为作业步骤运行

如何在 DB2 for Z/OS 中返回系统日期或日期时间?

如何确定 Java 线程在哪个内核上运行?

使用 ActiveMQ 在 z/OS 上实现 MQ 功能

z/OS 上 Java 程序的用户指定 ABEND 代码