编写安全出口
您可以使用安全出口框架代码编写安全出口。
图 1 说明了如何编写安全出口。
void MQENTRY MQStart() {;}
void MQENTRY EntryPoint (PMQVOID pChannelExitParms,
PMQVOID pChannelDefinition,
PMQLONG pDataLength,
PMQLONG pAgentBufferLength,
PMQVOID pAgentBuffer,
PMQLONG pExitBufferLength,
PMQPTR pExitBufferAddr)
{
PMQCXP pParms = (PMQCXP)pChannelExitParms;
PMQCD pChDef = (PMQCD)pChannelDefinition;
/* TODO: Add Security Exit Code Here */
}
标准 IBM® MQ 入口点 MQStart 必须存在,但不需要执行任何功能。 函数的名称(此示例中为 EntryPoint)可以更改,但编译和链接库时必须导出函数。 如以上示例所示,指针 pChannelExitParms 必须转换为 PMQCXP,而 pChannelDefinition 必须转换为 PMQCD。 有关调用通道出口和使用参数的常规信息,请参阅 MQ_CHANNEL_EXIT。 这些参数用于安全出口,具体如下所示:
- PMQVOID pChannelExitParms
- 输入/输出指向 MQCXP 结构的指针 - 转换为 PMQCXP 才能访问字段。 此结构用于出口和 MCA 之间的通信。 MQCXP 中的以下字段特别关注安全出口:
- ExitReason
- 告知安全出口安全交换中的当前状态,并用于决定执行哪种操作。
- ExitResponse
- 对 MAC 的响应,用于决定安全交换的下一个阶段。
- ExitResponse2
- 额外的控制标志,用于管理 MCA 如何理解安全出口的响应。
- ExitUserArea
- 16 字节(最大)的存储空间,可由安全出口用于维护调用之间的状态。
- ExitData
- 包含通道定义的 SCYDATA 字段内指定的数据(填充到右侧空白处的 32 个字节)。
- PMQVOID pChannelDefinition
- 输入/输出指向 MQCD 结构的指针 - 转换为 PMQCD 才能访问字段。 此参数包含通道的定义。 MQCD 中的以下字段特别关注安全出口:
- ChannelName
- 通道名称(填充到右侧空白处的 20 个字节)。
- ChannelType
- 定义通道类型的代码。
- MCA 用户标识
- 这三个字段组初始化为通道定义中指定的 MCAUSER 字段的值。 安全出口在这些字段中指定的任何用户标识均用于访问控制(不适用于 SDR、SVR、CLNTCONN 或 CLUSSDR 通道)。
- MCAUserIdentifier
- 填充到右侧空白处的标识符的前 12 个字节。
- LongMCAUserIdPtr
- 指向包含完整长度标识(不保证以空值结束)的缓冲区的指针,优先于 MCAUserIdentifier。
- LongMCAUserIdLength
- LongMCAUserIdPtr 指向的字符串的长度 - 如果设置了 LongMCAUserIdPtr,则必须设置此参数。
- 远程用户标识
- 仅适用于 CLNTCONN/SVRCONN 通道对。 如果没有定义 CLNTCONN 安全出口,那么这三个字段将由客户机 MCA 初始化,因此它们可能包含客户机环境中的用户标识,SVRCONN 安全出口可使用此用户标识进行认证,指定 MCA 用户标识时也可使用此用户标识。 如果定义了 CLNTCONN 安全出口,那么这些字段不会初始化,并可以通过 CLNTCONN 安全出口进行设置,或者安全消息可用于将用户标识从客户机传递到服务器。
- RemoteUserIdentifier
- 填充到右侧空白处的标识符的前 12 个字节。
- LongRemoteUserIdPtr
- 指向包含完整长度标识(不保证以空值结束)的缓冲区的指针,优先于 RemoteUserIdentifier。
- LongRemoteUserIdLength
- LongRemoteUserIdPtr 指向的字符串的长度 - 如果设置了 LongRemoteUserIdPtr,则必须设置此参数。
- PMQLONG pDataLength
- 输入/输出
指向 MQLONG 的指针。 包含调用安全出口时 AgentBuffer 内所含的任何安全出口的长度。 必须由安全出口设置为 AgentBuffer 或 ExitBuffer 中正在发送的任何消息的长度。
- PMQLONG pAgentBufferLength
- 输入
指向 MQLONG 的指针。 调用安全出口时 AgentBuffer 中所含数据的长度。
- PMQVOID pAgentBuffer
- 输入/输出
在调用安全出口时,此参数指向任何从合作伙伴出口发送的消息。 如果 MQCXP 结构中的 ExitResponse2 具有 MQXR2_USE_AGENT_BUFFER 标志设置(缺省值),那么安全出口需要将此参数设置为指向正在发送的任何消息数据。
- PMQLONG pExitBufferLength
- 输入/输出
指向 MQLONG 的指针。 此参数在第一次调用安全出口时初始化为 0,并且返回的值会在安全交换期间的安全出口调用间保留。
- PMQPTR pExitBufferAddr
- 输入/输出
此参数在第一次调用安全出口时初始化为空指针,并且返回的值会在安全交换期间的安全出口调用间保留。 如果 MQCXP 结构的 ExitResponse2 中设置了 MQXR2_USE_AGENT_BUFFER 标志,那么安全出口需要将此参数设置为指向正在发送的任何消息数据。