Sun Java logo     Previous      Contents      Next     

Sun logo
Sun Java System Identity Manager 6.0 Resources Reference 2005Q4M3 


Top Secret

The Top Secret resource adapter supports management of user accounts and memberships on an OS/390 mainframe via the IBM Host Access Class Library APIs. The adapter manages Top Secret over a TN3270 emulator session.

The Top Secret resource adapter is defined in the com.waveset.adapter.TopSecretResourceAdapter class. The adapter supports the following versions of Top Secret:

Resource Configuration Notes

The Top Secret Active Sync adapter works by using FTP to retrieve the output from the TSSAUDIT facility. It then parses the output to look for account creations, modifications, and deletions. This facility generates a report from the data in the Top Secret Recovery file. Therefore, the Recovery File must be enabled and large enough to hold all changes that will occur between the Active Sync poll interval. A job should be scheduled to run the TSSAUDIT utility so that the output will be available before the next Active Sync adapter poll.

An optional Generational Data Group (GDG) can be set-up to contain the results of the TSSAUDIT output. A GDG stores previous versions of the TSSAUDIT output. The Active Sync adapter supports retrieving from a GDG to help avoid missing events if it is not able to run at its normal time. The adapter can be configured to go back multiple generations to pick up any events that it might have missed

The following sample JCL runs the TSSAUDIT batch job:

//LITHAUS7 <<<< Supply Valid Jobcard >>>>>>

//* ****************************************************************

//* * THIS JOB RUNS THE TSS AUDIT PROGRAM 'CHANGES'

//* * & CREATES A GDG MEMBER FOR IDENTITY MANAGER

//* * You may choose to use standard MVS Delete/Defines or

//* * request a system programmer to establish a small GDG

//* ****************************************************************

//AUDIT01 EXEC PGM=TSSAUDIT,

// PARM='CHANGES DATE(-01)'

//AUDITOUT DD DSN=auth hlq.LITHAUS.ADMIN.DAILY(+1),

// DISP=(NEW,CATLG),UNIT=SYSDA,RECFM=FB,LRECL=133,

// BLKSIZE=2793,SPACE=(CYL,(2,1),RLSE)

//RECOVERY DD DSN=your.TSS.recovery.file ,DISP=SHR

//AUDITIN DD DUMMY

Identity Manager Installation Notes

The Top Secret resource adapter is a custom adapter. You must perform the following steps to complete the installation process:

  1. To add a Top Secret adapter to the Identity Manager resources list, you must add one of the following values in the Custom Resources section of the Configure Managed Resources page.
  2. com.waveset.adapter.TopSecretResourceAdapter

    com.waveset.adapter.TopSecretActiveSyncAdapter

  3. The Identity Manager mainframe adapters use the IBM Host Access Class Library (HACL) to connect to the mainframe. The HACL is available in IBM Websphere Host On-Demand (HOD). The recommended jar containing HACL is habeans.jar and is installed with the HOD Toolkit (or Host Access Toolkit) that comes with HOD. The supported versions of HACL are in HOD V7.0, V8.0, and V9.0.
  4. However, if the toolkit installation is not available, the HOD installation contains the following jars that can be used in place of the habeans.jar:

    • habase.jar
    • hacp.jar
    • ha3270.jar
    • hassl.jar
    • hodbase.jar
    • Copy the habeans.jar file or all of its substitutes into the WEB-INF/lib directory of your Identity Manager installation. See http://www.ibm.com/software/webservers/hostondemand/ for more information.

Usage Notes

This section provides information related to using the Top Secret resource adapter, which is organized into the following sections:

Administrators

TSO sessions do not allow multiple, concurrent connections. To achieve concurrency for Identity Manager Top Secret operations, you must create multiple administrators. Thus, if two administrators are created, two Identity Manager Top Secret operations can occur at the same time. We recommend that you create at least two (and preferably three) administrators.

CICS sessions are not limited to one session per admin; however, you can define more than one admin if desired.

If you are running in a clustered environment, you must define an admin for each server in the cluster. This applies even if (as in the case of CICS) it is the same admin. For TSO, there must be a different admin for each server in the cluster.

If clustering is not being used, the server name should be the same for each row (the name of the Identity Manager host machine).


Note  Host resource adapters do not enforce maximum connections for an affinity administrator across multiple host resources connecting to the same host. Instead, the adapter enforces maximum connections for affinity administrators within each host resource.

If you have multiple host resources managing the same system, and they are currently configured to use the same administrator accounts, you might have to update those resources to ensure that the same administrator is not trying to perform multiple actions on the resource simultaneously.

Resource Actions

The Top Secret adapter requires login and logoff resource actions. The login action negotiates an authenticated session with the mainframe. The logoff action disconnects when that session is no longer required.

A thin client host access 3270 emulator is provided to the context of the resource action by the resource adapter to simplify execution of commands in the scripted session.

Resource Action Context

Several global variables may be expected within the context of the scripted action.

Object

Description

Usage

hostAccess

TN3270 emulator; provides an interface for executing commands and parsing responses from the mainframe; wrapped by com.waveset.object.HostAccess to provide convenience methods

Use to send responses to the mainframe, wait for responses, and parse back results

hostAccessLogin

Implemented by TopSecret RA; declares methods such as getHost(), getPort(), and getRequestTimeout(), which provide connection-specific information

 

user

ACID of mainframe user

Use for authentication

password

Encrypted object which stores the password of the mainframe user; use password.decryptToString() to convert to plain text

Use for authentication

system

mainframe system name

 

HostAccess API

The following table describes the methods available on the hostAccess object passed to the resource action.

Method Signature

Description

void sendKeys(String input)

Send the string of characters specified by input.

void sendKeysAndWait(String input, String msg)

sendKeys(input)
waitForInput()

Send the string of characters specified by input; throw a timeout Exception with msg if no response is received.

boolean waitForStringFound(String s)

Returns whether the string of characters specified by s is found.

void waitForString(String s)

Wait until the specific String is received. Not generally recommended except for confirmation, like confirmation of a successful logout.

void waitForStringAndInput(String s)

waitForString(s)
waitForInput()

if not found, include search text and text that was received in error message

void waitForString(String s, ArrayList stringsToHide)

waitForString()

if not found, include text that was received in error message, excluding any strings listed in stringsToHide

void waitForInput()

Wait until the system is ready to receive a new message or until the system-configured timeout.

int getRequiredString(String s)

searchText(s,true)

searches forward from the cursor position for the specified string

int getRequiredString(String s, ArrayList stringsToHide)

searchText(s,true)

if not found, include text that was received in error message, excluding any strings listed in stringsToHide

String hideFields(String screen, ArrayList stringsToHide)

Return a string with any fields that should be hidden blanked out.

int searchText(String s, boolean forward)

Return index of found string or 0 if not found.

void setCursorPos(int pos)

Move cursor to specific position on screen

String getScreen()

Return text currently displayed on screen

  Mnemonic Keywords for the SendKeys Method

The following table describes the special functions that may be executed through the 3270 emulator to simulate keying the non-alphanumeric values.

Function

Mnemonic Keyword

Function

Mnemonic Keyword

Attention

[attn]

F1

[pf1]

Backspace

[backspace]

F2

[pf2]

Backtab

[backtab]

F3

[pf3]

Beginning of Field

[bof]

F4

[pf4]

Clear

[clear]

F5

[pf5]

Cursor Down

[down]

F6

[pf6]

Cursor Left

[left]

F7

[pf7]

Cursor Right

[right]

F8

[pf8]

Cursor Select

[cursel]

F9

[pf9]

Cursor Up

[up]

F10

[pf10]

Delete Character

[delete]

F11

[pf11]

DUP Field

[dup]

F12

[pf12]

Enter

[enter]

F13

[pf13]

End of Field

[eof]

F14

[pf14]

Erase EOF

[eraseeof]

F15

[pf15]

Erase Field

[erasefld]

F16

[pf16]

Erase Input

[erinp]

F17

[pf17]

Field Mark

[fieldmark]

F18

[pf18]

Home

[home]

F19

[pf19]

Insert

[insert]

F20

[pf20]

New Line

[newline]

F21

[pf21]

PA1

[pa1]

F22

[pf22]

PA2

[pa2]

F23

[pf23]

PA3

[pa3]

F24

[pf24]

Page Up

[pageup]

 

Page Down

[pagedn]

Reset

[reset]

System Request

[sysreq]

Tab Field

[tab]

  Sample Resource Actions

The following code is a complete sample of login and login resource actions. The sample is tailored to a specific customer’s environment. As such, the text of commands, prompt, and command sequences will most likely differ across deployments (for example, Line 32 – “ISPF”). Note that the resource actions wrap Javascript inside of XML.

Login Action

1   <?xml version='1.0' encoding='UTF-8'?>

2   <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>

3      <Waveset>

4         <ResourceAction name='ACME Login Action'>

5            <ResTypeAction restype='TopSecret'>

6               <act>

7                  var TSO_MORE = " ***";

8                  var TSO_PROMPT = " READY";

9                  var TS_PROMPT = " ?";

10                 hostAccess.waitForString("ENTER YOUR APPLICATION NAME");

11                 hostAccess.sendKeys("tso[enter]");

12                 hostAccess.waitForString("ENTER USERID –");

13                 hostAccess.sendKeys(user + "[enter]");

14                 hostAccess.waitForString("TSO/E LOGON");

15                 hostAccess.sendKeys(password.decryptToString() + "[enter]");

16                 hostAccess.sendKeys(password.decryptToString());

17                 var pos = hostAccess.searchText(" -Nomail", false);

18                 if (pos != 0) {

19                    hostAccess.setCursorPos(pos);

20                    hostAccess.sendKeys("S");

21                 }

22                 pos = hostAccess.searchText(" -Nonotice", false);

23                 if (pos != 0) {

24                    hostAccess.setCursorPos(pos);

25                    hostAccess.sendKeys("S");

26                 }

27                 hostAccess.sendKeys("[enter]");

28                 hostAccess.waitForStringAndInput(TSO_MORE);

29                 hostAccess.sendKeys("[enter]");

30                 hostAccess.waitForStringAndInput(TSO_MORE);

31                 hostAccess.sendKeys("[enter]");

32                 hostAccess.waitForStringAndInput("ISPF");

33                 hostAccess.sendKeys("=x[enter]");

34                 hostAccess.waitForString(TSO_PROMPT);

35                 var resp =hostAccess.doCmd("PROFILE NOPROMPT MSGID NOINTERCOM NOPAUSE NOWTPMSG PLANGUAGE(ENU) SLANGUAGE(ENU) NOPREFIX[enter]", TSO_PROMPT, TSO_MORE);

36                 hostAccess.waitForStringAndInput("ENTER LOGON:");

37                 hostAccess.sendKeys(system + "[enter]");

38                 hostAccess.waitForStringAndInput("USER-ID.....");

39                 hostAccess.sendKeys(user + "[tab]" + password.decryptToString() + "[enter]");

40                 var stringsToHide = new java.util.ArrayList();

41                 stringsToHide.add(password.decryptToString());

42                 hostAccess.waitForString("==>", stringsToHide);

43                 hostAccess.waitForInput();

44                 hostAccess.sendKeys("[pf6]");

45                 hostAccess.waitForInput();

46            </act>

47         </ResTypeAction>

48      </ResourceAction>

Logoff Action

49      <ResourceAction name='ACME Logoff Action'>

50         <ResTypeAction restype='TopSecret'>

51            <act>

52               var TSO_PROMPT = " READY";

53               hostAccess.sendKeys("[clear]end[enter]");

54               hostAccess.waitForString(TSO_PROMPT);

55               hostAccess.sendKeys("logoff[enter]");

56            </act>

57         </ResTypeAction>

58      </ResourceAction>

59   </Waveset>

SSL Configuration

Connecting the Adapter to a Telnet/TN3270 Server using SSL or TLS.

Use the following steps to connect Top Secret resource adapters to a Telnet/TN3270 server using SSL/TLS.

  1. Obtain the Telnet/TN3270 server's certificate in the PKCS #12 file format. Use hod as the password for this file. Consult your server's documentation on how to export the server’s certificate. The procedure “Generating a PKCS #12 File” below for some general guidelines.
  2. Create a CustomizedCAs.class file from the PKCS #12 file. If you are using a recent version of HOD, use the following command to do this.
  3. ..\hod_jre\jre\bin\java -cp ../lib/ssliteV2.zip;../lib/sm.zip com.ibm.eNetwork.HOD.convert.CVT2SSLIGHT CustomizedCAs.p12 hod CustomizedCAs.class

  4. Place the CustomizedCAs.class file somewhere in the Identity Manager server's classpath, such as $WSHOME/WEB-INF/classes.
  5. If a resource attribute named Session Properties does not already exist for the resource, then use the BPE or debug pages to add the attribute to the resource object. Add the following definition in the <ResourceAttributes> section:
  6. <ResourceAttribute name='Session Properties' displayName='Session Properties' description='Session Properties' multi='true'>

    </ResourceAttribute>

  7. Go to the Resource Parameters page for the resource and add the following values to the Session Properties resource attribute:
  8. SESSION_SSL

    true

Generating a PKCS #12 File

The following procedure provides a general description of generating a PKCS #12 file when using the Host OnDemand (HOD) Redirector using SSL/TLS. Refer to the HOD documentation for detailed information about performing this task.

  1. Create a new HODServerKeyDb.kdb file using the IBM Certificate Management tool. As part of that file, create a new self-signed certificate as the default private certificate.
  2. If you get a message that is similar to “error adding key to the certificate database” when you are creating the HODServerKeyDb.kdb file, one or more of the Trusted CA certificates may be expired. Check the IBM website to obtain up-to-date certificates.

  3. Export that private certificate as Base64 ASCII into a cert.arm file.
  4. Create a new PKCS #12 file named CustomizedCAs.p12 with the IBM Certificate Management tool by adding the exported certificate from the cert.arm file to the Signer Certificates. Use hod as the password for this file.
Troubleshooting

You can enable tracing of the HACL by adding the following to the Session Properties resource attribute:

SESSION_TRACE

ECLSession=3 ECLPS=3 ECLCommEvent=3 ECLErr=3 DataStream=3 Transport=3 ECLPSEvent=3


Note  The trace parameters should be listed without any new line characters. It is acceptable if the parameters wrap in the text box.

The Telnet/TN3270 server should have logs that may help as well.

Provisioning Notes

The following table summarizes the provisioning capabilities of this adapter.

Feature

Supported?

Enable/disable account

Yes

Rename account

Yes

Pass-through authentication

No

Before/after actions

Yes

Data loading methods

  Import directly from resource

  Reconciliation

  Active Sync

Security Notes

This section provides information about supported connections and privilege requirements.

Supported Connections

Identity Manager uses TN3270 to communicate with the Top Secret adapter.

Required Administrative Privileges

Administrators must have the following privileges:

Account Attributes

The following table provides information about the default Top Secret account attributes.

Identity System Attribute Name

Resource
Attribute Name

Data Type

Description

Profiles

PROFILE

string

The profile assigned to the user. This attribute is capable of having multiple values.

accountId

ACID

string

Required. Account ID

fullname

NAME

string

The user’s first and last name

Installation Data

INSTDATA

string

Installation data

TSOO Access

TSO_ACCESS

boolean

Indicates whether the user has TSO access

TSOLPROC

TSO.TSOLPROC

string

TSO login procedure

OMVS Access

OMVS_ACCESS

boolean

Indicates whether the user has OMVS access

Groups

GROUP

string

A list of groups assigned to the user

Default Group

DFLTGRP

string

The user’s default group

UID

OMVS.UID

string

OMVS User ID

OMVSPGM

OMVS.OMVSPGM

string

The user’s initial OMVS program

HOME

OMVS.HOME

string

The user’s OMVS home directory

Attributes

ATTRIBUTE

string

A list of account attributes

The following table lists account attributes that are suported, but are not listed in the schema map by default. The data type for these attributes is string.

Resource
Attribute Name

Description

CICS.OPTIME

Controls the period of time allowed before CICS considers a terminal user to be timed-out.

CICS.OPID

Specifies the CICS operator ID.

DEPT

Specifies the department name.

DIV

Specifies the division name.

ZONE

Specifies the zone name.

FACILITY

Specifies a list of facilities an ACID may or may not access.

DATASET

Specifies a list of datasets for the user.

CORPID

Specifies a list of corporate IDs.

OTRAN

Specifies a list of ownable transactions.

TSOACCT

Specifies a list of TSO acciount numbers.

SOURCE

Specifies a list of source readers or terminal prefixes through which the associated ACID may enter the system.

TSO.TRBA

Specifies the relative block address (RBA) of the user's mail directory entry in the broadcast data set

TSO.TSOCOMMAND

Provides a default command to be issued at TSO logon.

TSO.TSODEFPRFG

Assigns a default TSO performance group.

TSO.TSODEST

Provides a default destination identifier for TSO generated JCL for TSO users.

TSO.TSOHCLASS

Assigns a default hold class for TSO generated JCL for TSO users.

TSO.TSOJCLASS

Assigns a default job class for TSO generated job cards from TSO users.

TSO.TSOLACCT

Provides a default account number to be used for TSO logon.

TSO.TSOLSIZE

Assigns a default region size (in kilobytes) for TSO.

TSO.TSOMCLASS

Assigns a default message class for TSO generated JCL for TSO users.

TSO.TSOMSIZE

Defines the maximum region size (in kilobytes) that a TSO user may specify at logon.

TSO.TSOOPT

Assigns default options that a TSO user may specify at logon.

TSO.TSOSCLASS

Assigns a default SYSOUT class for TSO generated JCL for TSO users.

TSO.TSOUDATA

Assigns a site-defined data field to a TSO user.

TSO.TSOUNIT

Assigns a default unit name to be used for dynamic allocations under TSO.

TSO.TUPT

Specifies the value of the user profile table.

Contact your services organization for details about supporting other Top Secret resource attributes.

Identity Template

$accountId$

Sample Forms

Built-In

None

Also Available

TopSecretUserForm.xml

Troubleshooting

Use the Identity Manager debug pages to set trace options on the following classes:

The hostAccess object may be traced in Identity Manager. The class to trace via the debug pages is com.waveset.adapter.HostAccess. Trace level 3 is sufficient to identify which keystrokes and wait messages were sent to the mainframe; trace level 4 will display the exact message sent and the response from the mainframe.


Note  Verify that the Trace File location is meaningful. By default the trace file is placed in the application directory under InstallDir/idm/config. If the application is deployed from a WAR, the path may need to be hardcoded with an absolute directory path. In a clustered environment, it is recommended that the trace file be written to a network share.

In addition to source tracing, it may also be useful to log the screen text before each attempt to send keystrokes. This can be accomplished through a file writer. The sequence of commands is:

  1. var file = new java.io.File(‘<filename>’);
  2. var writer = new java.io.BufferedWriter(new java.io.FileWriter(file));
  3. writer.write(hostAccess.getScreen());
  4. writer.flush();
  5. hostAccess.sendKeysAndWait(<cmd>,<msg>);
  6. writer.newLine();
  7. writer.write(hostAccess.getScreen());
  8. writer.flush();
  9. writer.close();

<filename> should reference a the location of a file on the local file system of the application server. The writer will open a handle to that location and write what is stored in it’s buffer when the flush() method is invoked. The close() method releases the handle to the file. The getScreen() method is useful to pass to this function to get a dump of the screen contents for debugging purposes. This tracing should, of course, be removed once the screens are successfully navigated and login / logout is performed successfully.



Previous      Contents      Next     


Copyright 2006 Sun Microsystems, Inc. All rights reserved.