352
IBM Tivoli Access Manager for e-business Authorization C API Developer Reference Version 5.1 SC32-1355-00

IBM Tivoli Access Manager for e-business: Authorization C API

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

IBM

Tivoli

Access

Manager

for

e-business

Authorization

C

API

Developer

Reference

Version

5.1

SC32-1355-00

���

IBM

Tivoli

Access

Manager

for

e-business

Authorization

C

API

Developer

Reference

Version

5.1

SC32-1355-00

���

Note

Before

using

this

information

and

the

product

it

supports,

read

the

information

in

Appendix

F,

“Notices,”

on

page

315.

First

Edition

(November

2003)

This

edition

replaces

SC32-1140-01.

©

Copyright

International

Business

Machines

Corporation

2000,2003.

All

rights

reserved.

US

Government

Users

Restricted

Rights

Use,

duplication

or

disclosure

restricted

by

GSA

ADP

Schedule

Contract

with

IBM

Corp.

Contents

Preface

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. ix

Who

should

read

this

book

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. ix

What

this

book

contains

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. ix

Publications

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. x

Release

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xi

Base

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xi

Web

security

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xi

Developer

references

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xii

Technical

supplements

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xii

Related

publications

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xiii

Accessing

publications

online

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvi

Accessibility

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvi

Contacting

software

support

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvi

Conventions

used

in

this

book

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvi

Typeface

conventions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvi

Operating

system

differences

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. xvii

Chapter

1.

Authorization

API

overview

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 1

Introducing

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 2

The

Open

Group

Authorization

API

standard

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 2

The

Tivoli

Access

Manager

authorization

model

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 3

Locating

the

authorization

API

components

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 5

Building

applications

with

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 7

Tested

compilers

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 7

Demonstration

programs

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 8

Deploying

applications

with

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 9

Summarizing

authorization

API

tasks

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 9

Chapter

2.

Authorization

API

functions

and

data

types

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 11

API

functions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 12

Attribute

lists

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 12

Credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 12

Authorization

decisions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 13

Initialization,

shutdown,

and

error

handling

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 13

API

extensions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 14

Character

strings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 14

Buffers

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 14

Protected

object

structures

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 15

Default

user

registry

information

structure

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 16

Unauthenticated

user

information

structure

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 17

Attribute

lists

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 18

Credential

handles

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 20

Status

codes

and

error

handling

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 21

Chapter

3.

Initializing

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 23

Specifying

UTF-8

or

local

codeset

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 24

Specifying

an

authorization

API

configuration

file

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 25

Specifying

cache

mode

settings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 26

Specifying

cache

mode

type

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 26

Authorization

database

file

location

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 27

Local

cache

refresh

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 27

Local

cache

notification

listener

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 27

SSL

listener

ports

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 28

Local

domain

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 28

Configuring

SSL

from

the

API

client

to

Tivoli

Access

Manager

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 30

©

Copyright

IBM

Corp.

2000,2003

iii

Specifying

an

SSL

keyfile

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 30

Specifying

a

stash

file

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 30

Specifying

a

keyfile

label

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 30

SSL

session

timeout

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 31

SSL

password

expiration

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 31

Authentication

method

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 31

User

name

and

password

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 32

Tivoli

Access

Manager

configuration

file

location

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 32

Password

for

the

SSL

keyfile

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 32

Maximum

number

of

worker

threads

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 33

Automatic

refresh

of

SSL

certificate

and

keyfile

password

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 33

Connection

timeout

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 33

Specifying

communications

attributes

for

the

policy

server

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 35

Policy

server

hostname

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 35

Policy

server

port

number

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 35

Specifying

values

for

an

authorization

server

replica

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 36

Configuring

the

authorization

API

for

LDAP

access

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 37

LDAP

user

registry

support

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 37

LDAP

server

host

name

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 37

LDAP

server

port

number

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 37

LDAP

user

Distinguished

Name

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 37

LDAP

User

Password

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 38

SSL

communication

with

the

LDAP

server

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 38

SSL

keyfile

name

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 38

SSL

keyfile

distinguished

name

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 39

SSL

keyfile

password

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 39

Maximum

search

buffer

size

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 39

Caching

LDAP

data

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 39

LDAP

server

query

preference

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 39

Authentication

method

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 40

Specifying

LDAP

user

registry

replica

access

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 40

LDAP

client-side

timeout

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 40

LDAP

client-side

authentication

timeout

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 41

LDAP

client-side

search

timeout

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 41

URAF

registry

settings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Specify

the

URAF

configuration

file

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Specify

the

server

identity

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Specify

the

server

password

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Enable

cache

mode

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Specify

cache

size

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 42

Specify

cache

lifetime

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 43

Authorization

rules

initialization

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 44

Prolog

text

for

the

XMLADI

input

document

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 44

Prolog

text

for

the

XSL

rule

document

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 44

Resource

manager

ADI

prefix

list

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 45

Dynamic

ADI

retrieval

entitlement

service

list

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 46

XMLADI

attribute

definitions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 46

Enabling

the

return

of

permission

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 47

Configuring

event

logging

and

legacy

auditing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 49

Specifying

the

host

interface

on

which

to

listen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 50

Starting

the

authorization

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 51

Chapter

4.

Using

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 53

Authenticating

an

API

application

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 54

Verifying

the

identity

of

a

user

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 55

Usage

tip

enforcing

user

lockout

policy

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 55

Obtaining

user

authorization

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 56

Step

1

Specifying

the

authorization

authority

and

authentication

mechanism

.

.

.

.

.

.

.

.

.

.

. 56

Step

2

Specifying

user

authentication

identity

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 56

Step

3

Specifying

additional

user

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 57

Step

4

Placing

user

information

into

an

API

buffer

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 57

iv

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Step

5

Obtaining

authorization

credentials

for

the

user

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 57

Obtaining

an

authorization

decision

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 59

Step

1

Mapping

the

user

operation

to

a

Tivoli

Access

Manager

permission

.

.

.

.

.

.

.

.

.

.

.

. 59

Step

2

Mapping

the

requested

resource

to

a

protected

object

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 60

Step

3

Assigning

the

user

credentials

to

a

credentials

handle

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 60

Step

4

Building

an

attribute

list

for

additional

application

information

.

.

.

.

.

.

.

.

.

.

.

.

.

. 60

Step

5

Obtaining

an

authorization

decision

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 61

Cleaning

up

and

shutting

down

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 62

Releasing

allocated

memory

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 62

Shutting

down

the

authorization

API

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 62

Working

with

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 63

Converting

credentials

to

a

transportable

format

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 63

Converting

credentials

to

the

native

format

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 63

Creating

a

chain

of

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 63

Determining

the

number

of

credentials

in

a

credentials

chain

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 64

Obtaining

a

credential

from

a

chain

of

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 64

Modifying

the

contents

of

a

credential

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 64

Obtaining

an

attribute

list

from

a

credential

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 65

Setting

and

getting

string

attribute

values

for

a

credential

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 66

Comparing

two

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 67

Copying

a

credential

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 67

Chapter

5.

Backwards

compatibility

and

application

migration

.

.

.

.

.

.

.

.

.

.

.

. 69

Binary

backwards

compatibility

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 70

Deprecated

API

elements

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 70

Deprecated

attributes

for

Version

5.1

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 70

Operation

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 70

Permission

info

attribute

values

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 71

Initialization

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 71

Deprecated

API

for

comparing

credentials

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 71

Obtaining

the

user’s

authorization

identification

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 71

Authorization

API

initialization

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 72

DCE

authentication

APIs

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 72

User

registry

information

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 72

Deprecated

return

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 72

Chapter

6.

Authorization

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 75

Service

plug-in

architecture

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 76

The

authorization

service

dispatcher

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 77

Authorization

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 77

Calling

applications

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 77

Supported

types

of

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 79

Implementing

a

service

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 81

Initialization

and

configuration

of

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 82

Implementing

service

interfaces

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 86

Using

error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 88

Shut

down

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 92

Example

service

source

code

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 93

Supplied

implementations

for

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 96

Entitlement

services

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 97

Credentials

modification

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 101

Privilege

attribute

certificate

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 102

External

authorization

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 102

Chapter

7.

Entitlement

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 103

Understanding

entitlements

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 104

Entitlements

of

type

azn_string_t

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 104

Entitlements

of

type

azn_buffer_t

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 105

Initialization,

configuration,

and

shut

down

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 106

Obtaining

entitlements

for

a

specified

user

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 107

Contents

v

Authorizing

a

caller

to

a

specific

entitlement

service

plug-In

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 108

Using

authorization

API

interfaces

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 108

Entitlement

service

error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 109

Dynamic

ADI

retrieval

services

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 110

Credential

attributes

entitlement

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 112

Registry

attribute

entitlement

service

overview

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 113

Registry

attribute

entitlement

service

configuration

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 115

Migration

from

a

previous

release

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 118

Configuring

a

credential

attributes

entitlement

service

as

a

dynamic

ADI

retrieval

service

.

.

.

.

.

.

.

. 119

Chapter

8.

Administration

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 123

Understanding

administration

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 124

Configuring

administration

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 127

Creating

a

configuration

file

entry

for

an

administration

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 127

Configuring

an

administration

service

programmatically

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 128

Initializing

and

shutting

down

administration

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 129

Using

an

administration

service

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 130

Error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 132

Errors

when

registering

the

administration

service

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 132

Errors

when

registering

administration

definitions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 132

Major

errors

from

administration

service

functions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 133

Minor

errors

from

administration

service

functions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 133

Error

codes

specific

to

an

authorization

services

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 133

Deploying

an

administration

service

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 135

Chapter

9.

External

authorization

service

plug-ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 137

Introducing

the

external

authorization

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 138

Understanding

the

external

authorization

service

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 139

External

authorization

service

architecture

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 139

Policy

triggers

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 140

Weightings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 142

Configuring

an

external

authorization

service

plug-in

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 143

Using

a

configuration

file

entry

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 143

Configuring

an

external

authorization

service

programmatically

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 144

Initializing

and

shutting

down

external

authorization

service

plug-Ins

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 145

Obtaining

an

authorization

decision

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 146

Error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 147

Major

error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 147

Minor

error

codes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 148

Appendix

A.

Authorization

API

reference

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 151

azn_attrlist_add_entry()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 153

azn_attrlist_add_entry_buffer()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 154

azn_attrlist_add_entry_pobj()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 155

azn_attrlist_add_entry_ulong()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 156

azn_attrlist_copy()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 157

azn_attrlist_create()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 158

azn_attrlist_delete()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 159

azn_attrlist_delete_entry()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 160

azn_attrlist_delete_entry_value()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 161

azn_attrlist_get_entry_buffer_value()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 162

azn_attrlist_get_entry_pobj_value()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 164

azn_attrlist_get_entry_string_value()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 165

azn_attrlist_get_entry_type()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 167

azn_attrlist_get_entry_ulong_value()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 169

azn_attrlist_get_names()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 170

azn_attrlist_name_get_num()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 171

azn_creds_combine()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 172

azn_creds_copy()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 174

azn_creds_create()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 175

vi

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_delete()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 176

azn_creds_equal()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 177

azn_creds_for_subject()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 178

azn_creds_get_attr_value_string()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 180

azn_creds_get_attrlist_for_subject()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 181

azn_creds_get_pac()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 183

azn_creds_modify()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 185

azn_creds_num_of_subjects()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 188

azn_creds_set_attr_value_string()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 190

azn_decision_access_allowed()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 192

azn_decision_access_allowed_ext()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 194

azn_entitlement_get_entitlements()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 197

azn_error_get_string()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 199

azn_error_major()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 200

azn_error_minor()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 201

azn_error_minor_get_string()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 202

azn_id_get_creds()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 203

azn_init_set_code_set()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 206

azn_initialize()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 207

azn_pac_get_creds()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 210

azn_release_buffer()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 212

azn_release_pobj()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 213

azn_release_string()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 214

azn_release_strings()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 215

azn_shutdown()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 216

azn_util_errcode()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 217

azn_util_handle_is_valid()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 218

azn_util_password_authenticate()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 219

azn_util_password_change()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 221

Appendix

B.

Authorization

service

plug-in

API

reference

.

.

.

.

.

.

.

.

.

.

.

.

.

. 223

azn_admin_get_object()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 224

azn_admin_get_objectlist()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 226

azn_admin_get_tasklist()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 228

azn_admin_perform_task()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 231

azn_svc_creds_get_pac()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 234

azn_svc_creds_modify()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 236

azn_svc_decision_access_allowed_ext()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 239

azn_svc_entitlement_get_entitlements()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 242

azn_svc_initialize()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 244

azn_svc_pac_get_creds()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 247

azn_svc_shutdown()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 249

Appendix

C.

Attribute

names

reference

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 251

Initialization

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 252

Credential

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 261

Permission

information

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 263

Authorization

API

service

plug-in

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 268

Authorization

engine

attributes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 271

Appendix

D.

Authorization

API

client

configuration

file

.

.

.

.

.

.

.

.

.

.

.

.

.

. 273

Guidelines

for

configuring

stanzas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 274

General

guidelines

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 274

Default

values

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 274

Strings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 274

Defined

strings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 275

File

names

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 275

Integers

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 275

Boolean

values

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 276

How

to

change

configuration

settings

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 277

Contents

vii

[authentication-mechanisms]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 278

[aznapi-configuration]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 280

[aznapi-admin-services]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 286

[aznapi-cred-modification-services]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 287

[aznapi-entitlement-services]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 288

[aznapi-external-authzn-services]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 289

[aznapi-pac-services]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 290

[ldap]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 291

[manager]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 297

[meta-info]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 299

[ssl]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 300

[uraf-registry]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 305

[xmladi-attribute-definitions]

stanza

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 309

Appendix

E.

User

registry

differences

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 311

Appendix

F.

Notices

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 315

Trademarks

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 317

Glossary

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 319

Index

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 325

viii

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Preface

Welcome

to

the

IBM

Tivoli

Access

Manager

for

e-business

Authorization

C

API

Developer

Reference.

The

Tivoli

Access

Manager

application

development

kit

(ADK)

is

an

application

development

kit

for

IBM

Tivoli

Access

Manager

that

enables

application

developers

to

add

Tivoli

Access

Manager

authorization

and

security

services

to

applications.

This

book

describes

the

C

implementation

of

the

Tivoli

Access

Manager

authorization

API.

See

IBM

Tivoli

Access

Manager

for

e-business

Authorization

Java

Classes

Developer

Reference

for

a

description

of

the

Java

classes

and

methods

associated

with

Tivoli

Access

Manager

authentication.

IBM®

Tivoli®

Access

Manager

(Tivoli

Access

Manager)

is

the

base

software

that

is

required

to

run

applications

in

the

IBM

Tivoli

Access

Manager

product

suite.

It

enables

the

integration

of

IBM

Tivoli

Access

Manager

applications

that

provide

a

wide

range

of

authorization

and

management

solutions.

Sold

as

an

integrated

solution,

these

products

provide

an

access

control

management

solution

that

centralizes

network

and

application

security

policy

for

e-business

applications.

Note:

IBM

Tivoli

Access

Manager

is

the

new

name

of

the

previously

released

software

entitled

Tivoli

SecureWay®

Policy

Director.

Also,

for

users

familiar

with

the

Tivoli

SecureWay

Policy

Director

software

and

documentation,

the

management

server

is

now

referred

to

as

the

policy

server.

Who

should

read

this

book

The

target

audience

for

this

developer

reference

includes:

v

Security

administrators

v

Network

system

administrators

v

IT

architects

v

Application

developers

Readers

should

be

familiar

with:

v

Internet

protocols,

including

HTTP,

TCP/IP,

file

transfer

protocol

(FTP),

and

telnet

v

Development

of

applications

in

a

C

language

environment

v

Security

management,

including

authentication

and

authorization

If

you

are

enabling

Secure

Sockets

Layer

(SSL)

communication,

you

also

should

be

familiar

with

SSL

protocol,

key

exchange

(public

and

private),

digital

signatures,

cryptographic

algorithms,

and

certificate

authorities.

What

this

book

contains

This

document

contains

the

following

chapters:

v

Chapter

1,

“Authorization

API

overview,”

on

page

1

©

Copyright

IBM

Corp.

2000,2003

ix

Describes

the

Tivoli

Access

Manager

implementation

of

the

Open

Group

standard

Authorization

C

API.

v

Chapter

2,

“Authorization

API

functions

and

data

types,”

on

page

11

Describes

the

functions

and

data

types

that

are

provided

in

the

authorization

API.

v

Chapter

3,

“Initializing

the

authorization

API,”

on

page

23

Describes

how

to

initialize

the

authorization

API,

using

either

configuration

file

entries

or

programmatic

structures.

v

Chapter

4,

“Using

the

authorization

API,”

on

page

53

Describes

how

to

perform

the

main

authorization

API

tasks,

such

as

verifying

user

identity,

obtaining

authorization

credentials,

and

obtaining

an

access

decision.

v

Chapter

5,

“Backwards

compatibility

and

application

migration,”

on

page

69

Describes

backwards

compatibility

support,

and

lists

deprecated

interfaces.

v

Chapter

6,

“Authorization

service

plug-ins,”

on

page

75

Describes

the

Authorization

Service

Plug-in

model,

provides

an

overview

of

how

to

implement

service

plug-ins,

and

describes

the

supplied

implementations.

v

Chapter

7,

“Entitlement

service

plug-ins,”

on

page

103

Describes

how

to

implement

and

configure

entitlements

service

plug-ins.

v

Chapter

8,

“Administration

service

plug-ins,”

on

page

123

Describes

how

to

implement

and

configure

administration

service

plug-ins.

v

Chapter

9,

“External

authorization

service

plug-ins,”

on

page

137

Describes

how

to

implement

and

configure

external

authorization

service

plug-ins.

v

Appendix

A,

“Authorization

API

reference,”

on

page

151

Provides

a

reference

page

for

each

authorization

API

function.

v

Appendix

B,

“Authorization

service

plug-in

API

reference,”

on

page

223

Provides

a

reference

page

for

each

service

plug-in

function.

v

Appendix

C,

“Attribute

names

reference,”

on

page

251

Provides

a

reference

to

the

attribute

names

specified

for

use

with

the

authorization

API.

v

Appendix

D,

“Authorization

API

client

configuration

file,”

on

page

273

Provides

a

reference

to

the

configuration

settings

specified

in

the

authorization

API

client

configuration

file.

v

Appendix

E,

“User

registry

differences,”

on

page

311

Provides

a

references

to

differences

between

user

registries.

Note:

The

Tivoli

SecureWay

Policy

Director

version

of

this

book

contained

information

on

the

Java

implementation

of

the

authorization

API.

The

Java

implementation

is

now

described

in

a

separate

book,

IBM

Tivoli

Access

Manager

for

e-business

Authorization

Java

Classes

Developer

Reference.

Publications

Review

the

descriptions

of

the

Tivoli

Access

Manager

library,

the

prerequisite

publications,

and

the

related

publications

to

determine

which

publications

you

might

find

helpful.

After

you

determine

the

publications

you

need,

refer

to

the

instructions

for

accessing

publications

online.

x

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Additional

information

about

the

IBM

Tivoli

Access

Manager

for

e-business

product

itself

can

be

found

at:

http://www.ibm.com/software/tivoli/products/access-mgr-e-bus/

The

Tivoli

Access

Manager

library

is

organized

into

the

following

categories:

v

“Release

information”

v

“Base

information”

v

“Web

security

information”

v

“Developer

references”

on

page

xii

v

“Technical

supplements”

on

page

xii

Release

information

v

IBM

Tivoli

Access

Manager

for

e-business

Read

This

First

(GI11-4155-00)

Provides

information

for

installing

and

getting

started

using

Tivoli

Access

Manager.

v

IBM

Tivoli

Access

Manager

for

e-business

Release

Notes

(GI11-4156-00)

Provides

late-breaking

information,

such

as

software

limitations,

workarounds,

and

documentation

updates.

Base

information

v

IBM

Tivoli

Access

Manager

Base

Installation

Guide

(SC32-1362-00)

Explains

how

to

install

and

configure

the

Tivoli

Access

Manager

base

software,

including

the

Web

Portal

Manager

interface.

This

book

is

a

subset

of

IBM

Tivoli

Access

Manager

for

e-business

Web

Security

Installation

Guide

and

is

intended

for

use

with

other

Tivoli

Access

Manager

products,

such

as

IBM

Tivoli

Access

Manager

for

Business

Integration

and

IBM

Tivoli

Access

Manager

for

Operating

Systems.

v

IBM

Tivoli

Access

Manager

Base

Administration

Guide

(SC32-1360-00)

Describes

the

concepts

and

procedures

for

using

Tivoli

Access

Manager

services.

Provides

instructions

for

performing

tasks

from

the

Web

Portal

Manager

interface

and

by

using

the

pdadmin

command.

Web

security

information

v

IBM

Tivoli

Access

Manager

for

e-business

Web

Security

Installation

Guide

(SC32-1361-00)

Provides

installation,

configuration,

and

removal

instructions

for

the

Tivoli

Access

Manager

base

software

as

well

as

the

Web

Security

components.

This

book

is

a

superset

of

IBM

Tivoli

Access

Manager

Base

Installation

Guide.

v

IBM

Tivoli

Access

Manager

Upgrade

Guide

(SC32-1369-00)

Explains

how

to

upgrade

from

Tivoli

SecureWay

Policy

Director

Version

3.8

or

previous

versions

of

Tivoli

Access

Manager

to

Tivoli

Access

Manager

Version

5.1.

v

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide

(SC32-1359-00)

Provides

background

material,

administrative

procedures,

and

technical

reference

information

for

using

WebSEAL

to

manage

the

resources

of

your

secure

Web

domain.

v

IBM

Tivoli

Access

Manager

for

e-business

IBM

WebSphere

Application

Server

Integration

Guide

(SC32-1368-00)

Preface

xi

Provides

installation,

removal,

and

administration

instructions

for

integrating

Tivoli

Access

Manager

with

IBM

WebSphere®

Application

Server.

v

IBM

Tivoli

Access

Manager

for

e-business

IBM

WebSphere

Edge

Server

Integration

Guide

(SC32-1367-00)

Provides

installation,

removal,

and

administration

instructions

for

integrating

Tivoli

Access

Manager

with

the

IBM

WebSphere

Edge

Server

application.

v

IBM

Tivoli

Access

Manager

for

e-business

Plug-in

for

Web

Servers

Integration

Guide

(SC32-1365-00)

Provides

installation

instructions,

administration

procedures,

and

technical

reference

information

for

securing

your

Web

domain

using

the

plug-in

for

Web

servers.

v

IBM

Tivoli

Access

Manager

for

e-business

BEA

WebLogic

Server

Integration

Guide

(SC32-1366-00)

Provides

installation,

removal,

and

administration

instructions

for

integrating

Tivoli

Access

Manager

with

BEA

WebLogic

Server.

v

IBM

Tivoli

Access

Manager

for

e-business

IBM

Tivoli

Identity

Manager

Provisioning

Fast

Start

Guide

(SC32-1364-00)

Provides

an

overview

of

the

tasks

related

to

integrating

Tivoli

Access

Manager

and

Tivoli

Identity

Manager

and

explains

how

to

use

and

install

the

Provisioning

Fast

Start

collection.

Developer

references

v

IBM

Tivoli

Access

Manager

for

e-business

Authorization

C

API

Developer

Reference

(SC32-1355-00)

Provides

reference

material

that

describes

how

to

use

the

Tivoli

Access

Manager

authorization

C

API

and

the

Tivoli

Access

Manager

service

plug-in

interface

to

add

Tivoli

Access

Manager

security

to

applications.

v

IBM

Tivoli

Access

Manager

for

e-business

Authorization

Java

Classes

Developer

Reference

(SC32-1350-00)

Provides

reference

information

for

using

the

Java™

language

implementation

of

the

authorization

API

to

enable

an

application

to

use

Tivoli

Access

Manager

security.

v

IBM

Tivoli

Access

Manager

for

e-business

Administration

C

API

Developer

Reference

(SC32-1357-00)

Provides

reference

information

about

using

the

administration

API

to

enable

an

application

to

perform

Tivoli

Access

Manager

administration

tasks.

This

document

describes

the

C

implementation

of

the

administration

API.

v

IBM

Tivoli

Access

Manager

for

e-business

Administration

Java

Classes

Developer

Reference

(SC32-1356-00)

Provides

reference

information

for

using

the

Java

language

implementation

of

the

administration

API

to

enable

an

application

to

perform

Tivoli

Access

Manager

administration

tasks.

v

IBM

Tivoli

Access

Manager

for

e-business

Web

Security

Developer

Reference

(SC32-1358-00)

Provides

administration

and

programming

information

for

the

cross-domain

authentication

service

(CDAS),

the

cross-domain

mapping

framework

(CDMF),

and

the

password

strength

module.

Technical

supplements

v

IBM

Tivoli

Access

Manager

for

e-business

Command

Reference

(SC32-1354-00)

xii

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Provides

information

about

the

command

line

utilities

and

scripts

provided

with

Tivoli

Access

Manager.

v

IBM

Tivoli

Access

Manager

Error

Message

Reference

(SC32-1353-00)

Provides

explanations

and

recommended

actions

for

the

messages

produced

by

Tivoli

Access

Manager.

v

IBM

Tivoli

Access

Manager

for

e-business

Problem

Determination

Guide

(SC32-1352-00)

Provides

problem

determination

information

for

Tivoli

Access

Manager.

v

IBM

Tivoli

Access

Manager

for

e-business

Performance

Tuning

Guide

(SC32-1351-00)

Provides

performance

tuning

information

for

an

environment

consisting

of

Tivoli

Access

Manager

with

the

IBM

Tivoli

Directory

server

as

the

user

registry.

Related

publications

This

section

lists

publications

related

to

the

Tivoli

Access

Manager

library.

The

Tivoli

Software

Library

provides

a

variety

of

Tivoli

publications

such

as

white

papers,

datasheets,

demonstrations,

redbooks,

and

announcement

letters.

The

Tivoli

Software

Library

is

available

on

the

Web

at:

http://www.ibm.com/software/tivoli/library/

The

Tivoli

Software

Glossary

includes

definitions

for

many

of

the

technical

terms

related

to

Tivoli

software.

The

Tivoli

Software

Glossary

is

available,

in

English

only,

from

the

Glossary

link

on

the

left

side

of

the

Tivoli

Software

Library

Web

page

http://www.ibm.com/software/tivoli/library/

IBM

Global

Security

Kit

Tivoli

Access

Manager

provides

data

encryption

through

the

use

of

the

IBM

Global

Security

Kit

(GSKit)

Version

7.0.

GSKit

is

included

on

the

IBM

Tivoli

Access

Manager

Base

CD

for

your

particular

platform,

as

well

as

on

the

IBM

Tivoli

Access

Manager

Web

Security

CDs,

the

IBM

Tivoli

Access

Manager

Web

Administration

Interfaces

CDs,

and

the

IBM

Tivoli

Access

Manager

Directory

Server

CDs.

The

GSKit

package

provides

the

iKeyman

key

management

utility,

gsk7ikm,

which

is

used

to

create

key

databases,

public-private

key

pairs,

and

certificate

requests.

The

following

document

is

available

on

the

Tivoli

Information

Center

Web

site

in

the

same

section

as

the

IBM

Tivoli

Access

Manager

product

documentation:

v

IBM

Global

Security

Kit

Secure

Sockets

Layer

and

iKeyman

User’s

Guide

(SC32-1363-00)

Provides

information

for

network

or

system

security

administrators

who

plan

to

enable

SSL

communication

in

their

Tivoli

Access

Manager

environment.

IBM

Tivoli

Directory

Server

IBM

Tivoli

Directory

Server,

Version

5.2,

is

included

on

the

IBM

Tivoli

Access

Manager

Directory

Server

CD

for

the

desired

operating

system.

Note:

IBM

Tivoli

Directory

Server

is

the

new

name

for

the

previously

released

software

known

as:

v

IBM

Directory

Server

(Version

4.1

and

Version

5.1)

v

IBM

SecureWay

Directory

Server

(Version

3.2.2)

IBM

Directory

Server

Version

4.1,

IBM

Directory

Server

Version

5.1,

and

IBM

Tivoli

Directory

Server

Version

5.2

are

all

supported

by

IBM

Tivoli

Access

Manager

Version

5.1.

Preface

xiii

Additional

information

about

IBM

Tivoli

Directory

Server

can

be

found

at:

http://www.ibm.com/software/network/directory/library/

IBM

DB2

Universal

Database

IBM

DB2®

Universal

Database™

Enterprise

Server

Edition,

Version

8.1

is

provided

on

the

IBM

Tivoli

Access

Manager

Directory

Server

CD

and

is

installed

with

the

IBM

Tivoli

Directory

Server

software.

DB2

is

required

when

using

IBM

Tivoli

Directory

Server,

z/OS™,

or

OS/390®

LDAP

servers

as

the

user

registry

for

Tivoli

Access

Manager.

Additional

information

about

DB2

can

be

found

at:

http://www.ibm.com/software/data/db2/

IBM

WebSphere

Application

Server

IBM

WebSphere

Application

Server,

Advanced

Single

Server

Edition

5.0,

is

included

on

the

IBM

Tivoli

Access

Manager

Web

Administration

Interfaces

CD

for

the

desired

operating

system.

WebSphere

Application

Server

enables

the

support

of

both

the

Web

Portal

Manager

interface,

which

is

used

to

administer

Tivoli

Access

Manager,

and

the

Web

Administration

Tool,

which

is

used

to

administer

IBM

Tivoli

Directory

Server.

IBM

WebSphere

Application

Server

Fix

Pack

2

is

also

required

by

Tivoli

Access

Manager

and

is

provided

on

the

IBM

Tivoli

Access

Manager

WebSphere

Fix

Pack

CD.

Additional

information

about

IBM

WebSphere

Application

Server

can

be

found

at:

http://www.ibm.com/software/webservers/appserv/infocenter.html

IBM

Tivoli

Access

Manager

for

Business

Integration

IBM

Tivoli

Access

Manager

for

Business

Integration,

available

as

a

separately

orderable

product,

provides

a

security

solution

for

IBM

MQSeries®,

Version

5.2,

and

IBM

WebSphere®

MQ

for

Version

5.3

messages.

IBM

Tivoli

Access

Manager

for

Business

Integration

allows

WebSphere

MQSeries

applications

to

send

data

with

privacy

and

integrity

by

using

keys

associated

with

sending

and

receiving

applications.

Like

WebSEAL

and

IBM

Tivoli

Access

Manager

for

Operating

Systems,

IBM

Tivoli

Access

Manager

for

Business

Integration,

is

one

of

the

resource

managers

that

use

the

services

of

IBM

Tivoli

Access

Manager.

Additional

information

about

IBM

Tivoli

Access

Manager

for

Business

Integration

can

be

found

at:

http://www.ibm.com/software/tivoli/products/access-mgr-bus-integration/

The

following

documents

associated

with

IBM

Tivoli

Access

Manager

for

Business

Integration

Version

5.1

are

available

on

the

Tivoli

Information

Center

Web

site:

v

IBM

Tivoli

Access

Manager

for

Business

Integration

Administration

Guide

(SC23-4831-01)

v

IBM

Tivoli

Access

Manager

for

Business

Integration

Problem

Determination

Guide

(GC23-1328-00)

v

IBM

Tivoli

Access

Manager

for

Business

Integration

Release

Notes

(GI11-0957-01)

v

IBM

Tivoli

Access

Manager

for

Business

Integration

Read

This

First

(GI11-4202-00)

xiv

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

IBM

Tivoli

Access

Manager

for

WebSphere

Business

Integration

Brokers

IBM

Tivoli

Access

Manager

for

WebSphere

Business

Integration

Brokers,

available

as

part

of

IBM

Tivoli

Access

Manager

for

Business

Integration,

provides

a

security

solution

for

WebSphere

Business

Integration

Message

Broker,

Version

5.0

and

WebSphere

Business

Integration

Event

Broker,

Version

5.0.

IBM

Tivoli

Access

Manager

for

WebSphere

Business

Integration

Brokers

operates

in

conjunction

with

Tivoli

Access

Manager

to

secure

JMS

publish/subscribe

applications

by

providing

password

and

credentials-based

authentication,

centrally-defined

authorization,

and

auditing

services.

Additional

information

about

IBM

Tivoli

Access

Manager

for

WebSphere

Integration

Brokers

can

be

found

at:

http://www.ibm.com/software/tivoli/products/access-mgr-bus-integration/

The

following

documents

associated

with

IBM

Tivoli

Access

Manager

for

WebSphere

Integration

Brokers,

Version

5.1

are

available

on

the

Tivoli

Information

Center

Web

site:

v

IBM

Tivoli

Access

Manager

for

WebSphere

Business

Integration

Brokers

Administration

Guide

(SC32-1347-00)

v

IBM

Tivoli

Access

Manager

for

WebSphere

Business

Integration

Brokers

Release

Notes

(GI11-4154-00)

v

IBM

Tivoli

Access

Manager

for

Business

Integration

Read

This

First

(GI11-4202-00)

IBM

Tivoli

Access

Manager

for

Operating

Systems

IBM

Tivoli

Access

Manager

for

Operating

Systems,

available

as

a

separately

orderable

product,

provides

a

layer

of

authorization

policy

enforcement

on

UNIX

systems

in

addition

to

that

provided

by

the

native

operating

system.

IBM

Tivoli

Access

Manager

for

Operating

Systems,

like

WebSEAL

and

IBM

Tivoli

Access

Manager

for

Business

Integration,

is

one

of

the

resource

managers

that

use

the

services

of

IBM

Tivoli

Access

Manager.

Additional

information

about

IBM

Tivoli

Access

Manager

for

Operating

Systems

can

be

found

at:

http://www.ibm.com/software/tivoli/products/access-mgr-operating-sys/

The

following

documents

associated

with

IBM

Tivoli

Access

Manager

for

Operating

Systems

Version

5.1

are

available

on

the

Tivoli

Information

Center

Web

site:

v

IBM

Tivoli

Access

Manager

for

Operating

Systems

Installation

Guide

(SC23-4829-00)

v

IBM

Tivoli

Access

Manager

for

Operating

Systems

Administration

Guide

(SC23-4827-00)

v

IBM

Tivoli

Access

Manager

for

Operating

Systems

Problem

Determination

Guide

(SC23-4828-00)

v

IBM

Tivoli

Access

Manager

for

Operating

Systems

Release

Notes

(GI11-0951-00)

v

IBM

Tivoli

Access

Manager

for

Operating

Systems

Read

Me

First

(GI11-0949-00)

IBM

Tivoli

Identity

Manager

IBM

Tivoli

Identity

Manager

Version

4.5,

available

as

a

separately

orderable

product,

enables

you

to

centrally

manage

users

(such

as

user

IDs

and

passwords)

and

provisioning

(that

is

providing

or

revoking

access

to

applications,

resources,

or

operating

systems.)

Tivoli

Identity

Manager

can

be

integrated

with

Tivoli

Access

Preface

xv

Manager

through

the

use

of

the

Tivoli

Access

Manager

Agent.

Contact

your

IBM

account

representative

for

more

information

about

purchasing

the

Agent.

Additional

information

about

IBM

Tivoli

Identity

Manager

can

be

found

at:

http://www.ibm.com/software/tivoli/products/identity-mgr/

Accessing

publications

online

The

publications

for

this

product

are

available

online

in

Portable

Document

Format

(PDF)

or

Hypertext

Markup

Language

(HTML)

format,

or

both

in

the

Tivoli

software

library:

http://www.ibm.com/software/tivoli/library

To

locate

product

publications

in

the

library,

click

the

Product

manuals

link

on

the

left

side

of

the

library

page.

Then,

locate

and

click

the

name

of

the

product

on

the

Tivoli

software

information

center

page.

Product

publications

include

release

notes,

installation

guides,

user’s

guides,

administrator’s

guides,

and

developer’s

references.

Note:

To

ensure

proper

printing

of

PDF

publications,

select

the

Fit

to

page

check

box

in

the

Adobe

Acrobat

Print

window

(which

is

available

when

you

click

File

Print).

Accessibility

Accessibility

features

help

a

user

who

has

a

physical

disability,

such

as

restricted

mobility

or

limited

vision,

to

use

software

products

successfully.

With

this

product,

you

can

use

assistive

technologies

to

hear

and

navigate

the

interface.

You

also

can

use

the

keyboard

instead

of

the

mouse

to

operate

all

features

of

the

graphical

user

interface.

Contacting

software

support

Before

contacting

IBM

Tivoli

Software

Support

with

a

problem,

refer

to

the

IBM

Tivoli

Software

Support

site

by

clicking

the

Tivoli

support

link

at

the

following

Web

site:

http://www.ibm.com/software/support/

If

you

need

additional

help,

contact

software

support

by

using

the

methods

described

in

the

IBM

Software

Support

Guide

at

the

following

Web

site:

http://techsupport.services.ibm.com/guides/handbook.html

The

guide

provides

the

following

information:

v

Registration

and

eligibility

requirements

for

receiving

support

v

Telephone

numbers,

depending

on

the

country

in

which

you

are

located

v

A

list

of

information

you

should

gather

before

contacting

customer

support

Conventions

used

in

this

book

This

reference

uses

several

conventions

for

special

terms

and

actions

and

for

operating

system-dependent

commands

and

paths.

Typeface

conventions

The

following

typeface

conventions

are

used

in

this

reference:

xvi

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Bold

Lowercase

commands

or

mixed

case

commands

that

are

difficult

to

distinguish

from

surrounding

text,

keywords,

parameters,

options,

names

of

Java

classes,

and

objects

are

in

bold.

Italic

Variables,

titles

of

publications,

and

special

words

or

phrases

that

are

emphasized

are

in

italic.

Monospace

Code

examples,

command

lines,

screen

output,

file

and

directory

names

that

are

difficult

to

distinguish

from

surrounding

text,

system

messages,

text

that

the

user

must

type,

and

values

for

arguments

or

command

options

are

in

monospace.

Operating

system

differences

This

book

uses

the

UNIX

convention

for

specifying

environment

variables

and

for

directory

notation.

When

using

the

Windows

command

line,

replace

$variable

with

%variable%

for

environment

variables

and

replace

each

forward

slash

(/)

with

a

backslash

(\)

in

directory

paths.

If

you

are

using

the

bash

shell

on

a

Windows

system,

you

can

use

the

UNIX

conventions.

Preface

xvii

xviii

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

1.

Authorization

API

overview

This

chapter

contains

the

following

topics:

v

“Introducing

the

authorization

API”

on

page

2

v

“Locating

the

authorization

API

components”

on

page

5

v

“Building

applications

with

the

authorization

API”

on

page

7

v

“Deploying

applications

with

the

authorization

API”

on

page

9

v

“Summarizing

authorization

API

tasks”

on

page

9

©

Copyright

IBM

Corp.

2000,2003

1

Introducing

the

authorization

API

Using

the

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

application

programming

interface

(API),

you

can

program

Tivoli

Access

Manager

applications

and

third-party

applications

to

query

the

Tivoli

Access

Manager

authorization

service

for

authorization

decisions.

The

Tivoli

Access

Manager

authorization

API

is

the

interface

between

the

server-based

resource

manager

and

the

authorization

service

and

provides

a

standard

model

for

coding

authorization

requests

and

decisions.

The

authorization

API

lets

you

make

standardized

calls

to

the

centrally

managed

authorization

service

from

any

legacy

or

newly

developed

application.

The

authorization

API

supports

two

implementation

modes:

v

Remote

cache

mode

In

remote

cache

mode,

you

use

the

authorization

API

to

call

the

Tivoli

Access

Manager

authorization

server,

which

performs

authorization

decisions

on

behalf

of

the

application.

The

authorization

server

maintains

its

own

cache

of

the

replica

authorization

policy

database.

v

Local

cache

mode

In

local

cache

mode,

you

use

the

authorization

API

to

download

a

local

replica

of

the

authorization

policy

database.

In

this

mode,

the

application

can

perform

all

authorization

decisions

locally.

The

authorization

API

shields

you

from

the

complexities

of

the

authorization

service

mechanism.

Issues

of

management,

storage,

caching,

replication,

credentials

format,

and

authentication

methods

are

all

hidden

behind

the

authorization

API.

The

authorization

API

works

independently

from

the

underlying

security

infrastructure,

the

credential

format,

and

the

evaluating

mechanism.

The

authorization

API

makes

it

possible

to

request

an

authorization

check

and

get

a

simple

“yes”

or

“no”

recommendation

in

return.

The

authorization

API

is

a

component

of

the

Tivoli

Access

Manager

application

development

kit

(ADK).

The

Open

Group

Authorization

API

standard

The

IBM

Tivoli

Access

Manager

authorization

API

implements

the

Open

Group

Authorization

API

(Generic

Application

Interface

for

Authorization

Frameworks)

standard.

This

interface

is

based

on

the

International

Organization

for

Standardization

(ISO)

10181-3

model

for

authorization.

In

this

model,

an

initiator

requests

access

to

a

target

resource.

The

initiator

submits

the

request

to

a

resource

manager,

which

incorporates

an

access

enforcement

function

(AEF).

The

AEF

submits

the

request,

along

with

information

about

the

initiator,

to

an

access

decision

function

(ADF).

The

ADF

returns

a

decision

to

the

AEF,

and

the

AEF

enforces

the

decision.

2

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Tivoli

Access

Manager

implements

the

ADF

component

of

this

model

and

provides

the

authorization

API

as

an

interface

to

this

function.

In

the

figure

above,

a

browser

(initiator)

requests

access

to

a

file

or

other

resource

on

a

protected

system

(target).

The

browser

submits

the

request

to

a

Web

application

server

(the

resource

manager

incorporating

the

access

enforcement

function).

The

Web

application

server

uses

the

authorization

API

to

submit

the

request

to

the

Tivoli

Access

Manager

authorization

service

(the

access

decision

function).

The

Tivoli

Access

Manager

authorization

service

returns

an

access

decision,

through

the

authorization

API,

to

the

Web

application

server.

The

Web

application

server

processes

the

request

as

appropriate.

To

implement

this

model,

developers

of

AEF

applications

add

authorization

API

function

calls

to

their

application

code.

Note:

Developers

should

refer

to

the

Open

Group

Authorization

API

document

for

additional

information

on

the

standard

authorization

model.

The

Tivoli

Access

Manager

authorization

model

The

first

step

in

adding

authorization

to

an

application

is

to

define

the

security

policy

requirements

for

your

application.

Defining

a

security

policy

means

that

you

must

determine

the

business

requirements

that

apply

to

the

application’s

users,

operations,

and

data.

These

requirements

include:

Resource

Manager

AEF TargetInitiator

ADF

Submit

Access

Request

Present

Access

Request

Decision

RequestDecision

Figure

1.

The

ISO

10181-3

Authorization

Model

Browser ProtectedData

Access Manager Secure Domain

Initiator

Resource Manager

ADF

Target

Access ManagerAuthorization

Service

Authorization API

Web ApplicationServer

AEF

Figure

2.

The

IBM

Tivoli

Access

Manager

implementation

of

the

ISO

authorization

model

Chapter

1.

Authorization

API

overview

3

v

Objects

to

be

secured

v

Operations

permitted

on

each

object

v

Users

that

are

permitted

to

perform

the

operations

After

your

security

requirements

have

been

defined,

you

can

use

the

authorization

API

to

integrate

your

security

policy

with

the

Tivoli

Access

Manager

security

model.

Complete

the

following

steps

in

order

to

deploy

an

application

into

a

Tivoli

Access

Manager

secure

domain:

1.

Configure

the

Tivoli

Access

Manager

secure

domain

to

recognize

and

support

the

objects,

actions,

and

users

that

are

relevant

to

your

application.

v

For

an

introduction

to

the

Tivoli

Access

Manager

authorization

model,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

v

For

complete

information

on

access

control,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.2.

Use

the

authorization

API

within

your

application

to

obtain

the

needed

authorization

decisions.

v

For

an

introduction

to

the

authorization

API,

including

information

on

remote

cache

mode

and

local

cache

mode,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.3.

Develop

your

application

logic

to

enforce

the

security

policy.

4

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Locating

the

authorization

API

components

The

authorization

API

is

included

in

an

optional

installation

package

(ADK)

in

the

Tivoli

Access

Manager

distribution.

The

authorization

API

files

are

installed

in

several

sub-directories

under

the

Tivoli

Access

Manager

installation

directory.

Directory

Contents

bin

On

Microsoft

Windows

systems,

the

library

to

include

at

run

time

is

pdauthzn.dll

include

C

header

files

lib

A

library

that

implements

the

API

functions.

The

name

of

the

library

is

platform

dependent:

Solaris

Operating

Environment

libpdauthzn.so

AIX

libpdauthzn.a

HP-UX

libpdauthzn.sl

Microsoft

Windows

pdauthzn.lib

example/authzn_demo/cpp

This

directory

contains

an

example

program

that

demonstrates

usage

of

the

authorization

API.

Source

files

and

a

MAKEFILE

are

provided.

For

installation

instructions

for

the

ADK,

see

the

IBM

Tivoli

Access

Manager

Base

Installation

Guide.

v

Header

Files

The

header

files

are

found

in

the

include

directory,

located

directly

under

the

Tivoli

Access

Manager

ADK

package

installation

directory.

File

Contents

ogauthzn.h

The

authorization

API

standard

functions

aznutils.h

Utility

functions

(extensions

to

the

authorization

API)

azn_svc_protos.h

Prototypes

for

generic

authorization

service

plug-in

functions.

Contains

prototypes

for

the

azn_service_initialize()

and

azn_service_shutdown()

calls.

This

can

optionally

be

included

by

a

plug-in

programmer

to

prototype

the

calls

defined

in

the

service.

azn_admin_svc_protos.h

Prototypes

for

plug-in

functions

for

the

authorization

administration

service.

azn_deprecated.h

Prototypes

and

declarations

for

the

functions,

variables

and

attributes

that

are

deprecated

in

this

version

of

Tivoli

Access

Manager.

Programmers

should

avoid

including

this

header

file

as

the

symbols

that

are

contained

there

will

not

be

supported

in

future

releases

of

the

product.

ivadminapi.h

Function

prototypes

for

the

Tivoli

Access

Manager

administration

API.

This

API

is

described

in

IBM

Tivoli

Access

Manager

for

e-business

Administration

C

API

Developer

Reference.

pdb*msg.h

Minor

error

codes.

v

Error

Codes

Chapter

1.

Authorization

API

overview

5

The

authorization

API

error

codes

are

defined

in

the

following

files,

located

in

the

include

directory:

File

Contents

ogauthzn.h

Major

error

codes

for

the

standard

authorization

API

functions.

aznutils.h

Major

error

codes

for

the

authorization

API

utility

functions.

pdb*msg.h

Minor

error

codes

for

utility

functions

and

the

Tivoli

Access

Manager

authorization

service

are

found

in

a

number

of

error

message

files,

such

as

pdbaclmsg.h

6

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Building

applications

with

the

authorization

API

To

develop

applications

that

use

the

Tivoli

Access

Manager

authorization

API,

you

must

install

and

configure

a

IBM

Tivoli

Access

Manager

secure

domain.

If

you

do

not

have

a

Tivoli

Access

Manager

secure

domain

installed,

install

one

before

beginning

application

development.

The

minimum

installation

consists

of

a

single

system

with

the

following

Tivoli

Access

Manager

Base

components

installed:

v

Tivoli

Access

Manager

runtime

environment

v

Tivoli

Access

Manager

policy

server

v

Tivoli

Access

Manager

application

development

kit

When

the

Tivoli

Access

Manager

secure

domain

uses

an

LDAP

or

Lotus

Domino

server

user

registry,

the

application

development

system

must

have

an

LDAP

client

installed.

If

you

already

have

a

Tivoli

Access

Manager

secure

domain

installed,

and

want

to

add

a

development

system

to

the

domain,

the

minimum

Tivoli

Access

Manager

installation

consists

of

the

following

components:

v

Tivoli

Access

Manager

runtime

environment

v

Tivoli

Access

Manager

application

development

kit

Note:

For

Tivoli

Access

Manager

installation

instructions

refer

to

the

IBM

Tivoli

Access

Manager

Base

Installation

Guide.

In

order

to

compile

applications

that

use

the

authorization

API,

you

must

install

the

Tivoli

Access

Manager

ADK

on

the

build

machine.

When

compiling

your

application,

make

sure

you

add

the

include

directory

for

the

Tivoli

Access

Manager

ADK

to

the

compiler

command

line.

When

linking

your

application,

specify

the

directory

containing

the

authorization

shared

library

if

it

is

not

in

the

default

location.

Note:

The

Tivoli

Access

Manager

authorization

API

is

compiled

as

a

32-bit

application.

Tested

compilers

IBM

has

tested

the

use

of

the

IBM

Tivoli

Access

Manager

Application

Developer

Kit

(ADK)

component

with

the

compilers

listed

in

the

table

below.

Previous

versions

of

the

compilers

are

not

supported.

Compilers

on

other

supported

platforms,

such

as

IBM

AIX

5.1

or

HP-UX

11i,

have

not

been

tested.

Table

1.

Compilers

tested

with

Tivoli

Access

Manager.

Operating

system

platform

tested

Tested

compiler

IBM

AIX

4.3.3

x1C.3.6.7

Sun

Solaris

Operating

Environment

7

Forte

6.1

Hewlett-Packard

HP-UX

11.0

aCC

3.30a

Red

Hat

Linux

for

Intel

GNU

GCC

2.95.3

(see

note)

SuSe

Linux

Enterprise

Server

for

S/390

and

zSeries

GNU

GCC

2.95.3

(see

note)

Chapter

1.

Authorization

API

overview

7

Table

1.

Compilers

tested

with

Tivoli

Access

Manager.

(continued)

Microsoft

Windows

2000

Advanced

Server

Microsoft

Windows

NT

4.0

MSVC

6.0.5

Note:

The

GNU

GCC

compiler

listed

is

the

only

one

supported

on

Linux

systems.

The

GNU

GCC

compiler

is

not

supported

on

non-Linux

operating

systems.

Demonstration

programs

The

Tivoli

Access

Manager

authorization

API

is

provided

with

several

example

programs.

The

authzn_demo

directory

contains

examples

programs

that

demonstrate

use

of

the

authorization

API.

A

C

language

example

is

included.

The

C

example

contains

a

sample

Makefile.

See

the

sample

Makefile

for

build

instructions

specific

to

each

supported

operating

system

platform.

Refer

to

the

README

file,

located

in

the

same

directory,

for

information

regarding

the

use

of

this

example

program.

An

example

of

the

administration

service

plug-in

is

provided

in

the

admin_svc_demo

directory.

See

the

sample

Makefile

for

build

instructions.

An

example

of

an

external

authorization

service

plug-in

is

provided

in

the

eas_demo

directory.

See

the

sample

Makefile

for

build

instructions.

An

example

of

an

entitlement

service

plug-in

is

provided

in

the

ent_svc_demo

directory.

See

the

sample

Makefile

for

build

instructions.

Program

Description

authzn_demo

Authorization

API

demonstration

program

azn_admin_svc_demo

Administration

service

demonstration

program

azn_eas_demo

External

authorization

service

demonstration

program

azn_ent_svc_demo

Entitlement

service

demonstration

program

8

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Deploying

applications

with

the

authorization

API

To

deploy

an

application

with

the

authorization

API,

verify

that

your

environment

contains

the

necessary

supporting

software.

You

can

test

your

environment

by

building

and

running

the

example

program

that

is

provided

with

the

authorization

API.

Applications

that

have

been

developed

with

the

Tivoli

Access

Manager

authorization

API

must

be

run

on

systems

that

are

configured

into

a

Tivoli

Access

Manager

secure

domain.

When

the

Tivoli

Access

Manager

secure

domain

uses

an

LDAP

user

registry,

the

application

deployment

system

must

have

an

LDAP

client

installed.

The

minimum

Tivoli

Access

Manager

installation

required

on

a

system

that

will

run

an

application

is

the

Tivoli

Access

Manager

runtime

environment

component.

For

deployment

examples,

see

the

demonstration

programs

described

in

“Demonstration

programs”

on

page

8.

Summarizing

authorization

API

tasks

The

primary

task

of

the

authorization

API

is

to

obtain

an

authorization

decision

from

the

Tivoli

Access

Manager

authorization

service.

Use

the

authorization

API

to

present

information

about

the

user,

operation,

and

requested

resource

to

the

Tivoli

Access

Manager

authorization

service,

and

receive

the

authorization

decision.

Your

application

is

responsible

for

enforcing

the

decision,

as

appropriate.

To

obtain

an

authorization

decision,

you

must

accomplish

certain

tasks

to

configure

the

authorization

API

client.

The

following

sections

in

this

document

provide

a

step-by-step

guide

to

completing

each

of

these

required

tasks:

v

Chapter

3,

“Initializing

the

authorization

API,”

on

page

23

v

“Authenticating

an

API

application”

on

page

54

v

“Verifying

the

identity

of

a

user”

on

page

55

v

“Obtaining

user

authorization

credentials”

on

page

56

v

“Obtaining

an

authorization

decision”

on

page

59

v

“Cleaning

up

and

shutting

down”

on

page

62

The

authorization

API

also

provides

functions

for

performing

optional

tasks

on

user

credentials.

The

following

section

describes

the

supported

optional

tasks:

v

“Working

with

credentials”

on

page

63

Chapter

1.

Authorization

API

overview

9

10

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

2.

Authorization

API

functions

and

data

types

The

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

API

provides

a

set

of

functions

and

data

types.

This

section

lists

the

name

of

each

authorization

API

construct

and

the

task

it

accomplishes.

The

following

functions,

structured

data

types,

and

constants

are

defined

as

part

of

the

authorization

API:

v

“API

functions”

on

page

12

v

“Character

strings”

on

page

14

v

“Buffers”

on

page

14

v

“Protected

object

structures”

on

page

15

v

“Default

user

registry

information

structure”

on

page

16

v

“Attribute

lists”

on

page

18

v

“Credential

handles”

on

page

20

v

“Status

codes

and

error

handling”

on

page

21

©

Copyright

IBM

Corp.

2000,2003

11

API

functions

The

following

tables

list

the

authorization

API

functions

and

provide

both

a

link

to

the

reference

page

for

the

function

and

a

link

to

the

section

in

this

document

that

describes

each

function’s

task.

Note:

The

Tivoli

Access

Manager

authorization

API

functions

are

32-bit

only.

Attribute

lists

Function

Task

“azn_attrlist_add_entry()”

on

page

153

“azn_attrlist_add_entry_buffer()”

on

page

154

“azn_attrlist_add_entry_pobj()”

on

page

155

“azn_attrlist_add_entry_ulong()”

on

page

156

“azn_attrlist_create()”

on

page

158

“azn_attrlist_copy()”

on

page

157

“azn_attrlist_delete()”

on

page

159

“azn_attrlist_delete_entry()”

on

page

160

“azn_attrlist_delete_entry_value()”

on

page

161

“azn_attrlist_get_entry_buffer_value()”

on

page

162

“azn_attrlist_get_entry_type()”

on

page

167

“azn_attrlist_get_entry_ulong_value()”

on

page

169

“azn_attrlist_get_entry_pobj_value()”

on

page

164

“azn_attrlist_get_entry_string_value()”

on

page

165

“azn_attrlist_get_names()”

on

page

170

“azn_attrlist_name_get_num()”

on

page

171

“azn_release_buffer()”

on

page

212

“azn_release_pobj()”

on

page

213

“azn_release_string()”

on

page

214

“azn_release_strings()”

on

page

215

“azn_util_handle_is_valid()”

on

page

218

“Attribute

lists”

on

page

12

Credentials

Function

Task

“azn_creds_combine()”

on

page

172

“Creating

a

chain

of

credentials”

on

page

63

“azn_creds_copy()”

on

page

174

“Copying

a

credential”

on

page

67

“azn_creds_create()”

on

page

175

“Obtaining

user

authorization

credentials”

on

page

56

“azn_creds_delete()”

on

page

176

“Releasing

allocated

memory”

on

page

62

“azn_creds_equal()”

on

page

177

“Comparing

two

credentials”

on

page

67

“azn_creds_for_subject()”

on

page

178

“Obtaining

a

credential

from

a

chain

of

credentials”

on

page

64

“azn_creds_get_attrlist_for_subject()”

on

page

181

“Obtaining

an

attribute

list

from

a

credential”

on

page

65

“azn_creds_set_attr_value_string()”

on

page

190

“Setting

and

getting

string

attribute

values

for

a

credential”

on

page

66

“azn_creds_get_attr_value_string()”

on

page

180

“azn_creds_get_pac()”

on

page

183

“Converting

credentials

to

a

transportable

format”

on

page

63

12

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Function

Task

“azn_creds_modify()”

on

page

185

“Modifying

the

contents

of

a

credential”

on

page

64

“azn_creds_num_of_subjects()”

on

page

188

“Determining

the

number

of

credentials

in

a

credentials

chain”

on

page

64

“azn_id_get_creds()”

on

page

203

“Obtaining

user

authorization

credentials”

on

page

56

“azn_pac_get_creds()”

on

page

210

“Converting

credentials

to

the

native

format”

on

page

63

“azn_util_handle_is_valid()”

on

page

218

“Credential

handles”

on

page

20

Authorization

decisions

Function

Task

“azn_decision_access_allowed()”

on

page

192

“azn_decision_access_allowed_ext()”

on

page

194

“Obtaining

an

authorization

decision”

on

page

59

Initialization,

shutdown,

and

error

handling

Function

Task

“azn_error_major()”

on

page

200

“Status

codes

and

error

handling”

on

page

21

“azn_error_minor()”

on

page

201

“azn_error_minor_get_string()”

on

page

202

“azn_error_get_string()”

on

page

199

“azn_initialize()”

on

page

207

Chapter

3,

“Initializing

the

authorization

API,”

on

page

23

“azn_release_buffer()”

on

page

212

“Releasing

allocated

memory”

on

page

62

“azn_release_pobj()”

on

page

213

“azn_release_string()”

on

page

214

“azn_release_strings()”

on

page

215

“azn_shutdown()”

on

page

216

“Shutting

down

the

authorization

API”

on

page

62

“azn_util_errcode()”

on

page

217

“Status

codes

and

error

handling”

on

page

21

“azn_init_set_code_set()”

on

page

206

Chapter

2.

Authorization

API

functions

and

data

types

13

API

extensions

Function

or

Data

Type

Task

“azn_util_errcode()”

on

page

217

“Status

codes

and

error

handling”

on

page

21

“azn_util_handle_is_valid()”

on

page

218

“Attribute

lists”

on

page

18

“Credential

handles”

on

page

20

“azn_util_password_authenticate()”

on

page

219

“Verifying

the

identity

of

a

user”

on

page

55

“azn_util_password_change()”

on

page

221

Character

strings

Many

authorization

API

functions

take

character

strings

as

arguments

or

return

character

strings

as

values.

Use

the

azn_string_t

data

type

to

pass

character

string

data

between

your

application

and

the

authorization

API:

typedef

char

*azn_string_t;

Use

azn_release_string()

and

azn_release_strings()

to

release

memory

that

has

been

allocated

to

strings

of

type

azn_string_t.

Buffers

Some

authorization

API

functions

take

byte

string

arguments

and

return

byte

strings

as

values.

Use

the

data

type

azn_buffer_t

to

pass

byte

string

data

between

your

application

and

the

authorization

API.

The

azn_buffer_t

data

type

is

a

pointer

to

a

buffer

descriptor

consisting

of

a

length

field

and

a

value

field.

The

length

field

contains

the

total

number

of

bytes

in

the

data.

The

value

field

contains

a

pointer

to

the

data.

typedef

struct

azn_buffer_desc_struct

{

size_t

length;

unsigned

char

*value;

}

azn_buffer_desc,

*azn_buffer_t;

You

must

allocate

and

release

the

storage

necessary

for

all

azn_buffer_desc

objects.

Objects

of

type

azn_buffer_t

appear

as

output

parameters

to

the

azn_attrlist_get_entry_buffer_value()

and

azn_creds_get_pac()

calls.

For

these

functions,

storage

for

the

buffer

array

referred

to

by

the

value

member

of

an

azn_buffer_desc

object

is

allocated

by

the

authorization

API.

Use

azn_release_buffer()

to

release

storage

allocated

for

use

by

azn_buffer_desc

objects.

Parameters

of

type

azn_buffer_t

can

be

assigned

and

compared

with

the

following

constant

values:

Name

Value

Definition

AZN_C_EMPTY_BUFFER

NULL

Empty

data

value-buffer.

AZN_C_NO_BUFFER

NULL

No

value-buffer

is

supplied

or

returned.

14

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Protected

object

structures

This

data

structure

is

available

for

applications

that

want

to

track

information

about

protected

objects.

typedef

struct

azn_pobj_desc_struct

(

azn_string_t

name;

unsigned

int

type;

azn_string_t

description;

azn_boolean_t

is_policy_attachable;

)

azn_pobj_desc,

*azn_pobj_t

The

variables

in

the

structure

above

contain

the

following

information:

Variable

Description

name

A

string

containing

the

protected

object

path.

type

The

protected

object

type,

expressed

as

an

unsigned

int.

This

can

be

defined

by

the

application

developer.

description

A

string

description

of

the

protected

object.

is_policy_attachable

A

boolean

value

that

indicates

whether

authorization

policy

can

be

attached

to

this

object.

Chapter

2.

Authorization

API

functions

and

data

types

15

Default

user

registry

information

structure

The

authorization

API

uses

this

structure

to

pass

information

for

building

Tivoli

Access

Manager

credentials

to

the

azn_id_get_creds()

call.

When

this

structure

is

used

in

conjunction

with

a

NULL

mechanism

ID

in

a

function

call

to

azn_id_get_creds(),

the

client

credential

is

built

from

information

stored

in

the

default

user

registry.

It

will

use

the

registry

option

that

was

selected

when

the

Tivoli

Access

Manager

secure

domain

was

installed.

The

client

does

not

need

to

know

the

registry

type.

This

structure

replaces

the

deprecated

structures

azn_authdce_t,

azn_authldap_t,

and

azn_authuraf_t.

typedef

struct

{

azn_string_t

principal;

azn_string_t

auth_method;

unsigned

int

ipaddr;

azn_string_t

qop;

azn_string_t

user_info;

azn_string_t

browser_info;

azn_string_t

authmech_info;

void

*reserved[9];

}

azn_authdefault_t;

Field

Description

principal

The

client’s

principal

name

in

the

registry.

This

value

is

mandatory.

Example:

sec_master

auth_method

The

user

registry

used

to

authenticate

this

user

credential.

This

string

is

optional.

This

field

is

deprecated

and

should

be

set

to

NULL.

ipaddr

A

network

order

unsigned

long

IP

address.

For

example:

0x56780012

This

value

is

mandatory

for

IP

authorization.

Otherwise,

it

is

optional.

qop

Quality

of

protection

required

for

requests

made

by

this

user.

Supplied

for

use

by

applications

to

keep

track

of

the

user’s

current

level

of

protection.

This

value

is

optional.

Note:

This

entry

is

not

used

by

the

authorization

engine

for

the

purpose

of

returning

the

Quality

of

Protection

required

for

access

to

an

object.

Examples:

none

integrity

privacy

user_info

Additional

user

information

that

may

be

required

for

auditing.

Supplied

for

use

by

the

application

to

keep

track

of

any

additional

user

information

it

may

need.

This

value

is

optional.

browser_info

The

browser

employed

by

the

user.

Supplied

for

use

by

web

applications.

This

value

is

optional.

16

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Field

Description

authnmech_info

Additional

authentication

mechanism

information.

Supplied

for

use

by

the

application

to

keep

track

of

any

additional

information

on

the

method

of

authentication

used

for

the

user.

Example:

X.509

certificate

This

value

is

optional.

reserved

Fields

reserved

for

future

use.

Unauthenticated

user

information

structure

This

data

structure

contains

information

for

use

in

building

an

unauthenticated

authorization

credential

for

a

user

within

the

Tivoli

Access

Manager

secure

domain.

This

data

structure

is

used

to

pass

information

about

an

unauthenticated

user

into

the

azn_id_get_creds()

interface.

The

content

of

each

element

of

this

structure

is

determined

by

the

application,

based

on

application

requirements.

typedef

struct

{

unsigned

int

ipaddr;

azn_string_t

qop;

azn_string_t

user_info;

azn_string_t

browser_info;

}

azn_unauth_t;

Field

Description

ipaddr

IP

address

of

the

requesting

user

in

network

byte

order.

qop

Quality

of

protection

required

for

requests

made

by

this

user.

user_info

Additional

user

information

that

may

be

required

for

auditing.

browser_info

The

browser

employed

by

the

user.

This

field

is

optional.

Chapter

2.

Authorization

API

functions

and

data

types

17

Attribute

lists

Several

authorization

API

functions

take

attribute

list

handles

as

input

parameters

or

return

attribute

list

handles

as

output

parameters.

Use

the

azn_attrlist_h_t

data

type

to

pass

attribute

list

handles

between

the

authorization

API

and

the

calling

application.

Variables

of

type

azn_attrlist_h_t

are

opaque

handles

to

lists

of

name

and

value

pairs.

Use

authorization

API

functions

to

add

or

retrieve

name

and

value

pairs

from

attribute

lists.

CAUTION:

Always

initialize

attribute

list

handles

to

AZN_C_INVALID_HANDLE

when

declaring

them

on

the

stack.

If

an

application

attempts

to

access

an

uninitialized

attribute

list

handle,

the

access

request

may

result

in

memory

corruption

or

undefined

behavior.

Many

authorization

API

functions

use

attribute

lists

to

store

and

retrieve

values.

Attribute

lists

are

lists

of

name

and

value

pairs.

The

values

can

be

stored

as

either

strings

or

buffers.

A

name

can

have

more

than

one

value.

The

values

under

each

attribute

name

are

stored

in

the

order

in

which

they

were

inserted

into

the

list.

Each

value

entry

can

be

retrieved

using

the

azn_attrlist_get_entry_*()

functions

with

an

index

number

starting

at

0

for

the

first

value

in

the

list.

There

is

no

checking

performed

upon

values

in

the

list

so

duplicate

values

are

permitted.

The

authorization

API

defines

some

names.

You

can

also

define

additional

names

as

needed

by

your

application.

The

authorization

API

provides

functions

to

create

attribute

lists,

set

or

get

list

entries,

and

delete

attribute

lists.

The

following

table

summarizes

the

functions

that

operate

on

attribute

lists:

Task

Description

Create

an

attribute

list

Use

azn_attrlist_create()

to

complete

the

following

tasks:

v

Allocate

a

new,

empty

attribute

list.

v

Associate

a

handle

with

the

attribute

list.

v

Return

the

handle.

Set

an

entry

in

an

attribute

list

Use

azn_attrlist_add_entry()

to

add

a

string

name-value

pair

of

type

azn_string_t.

Use

azn_attrlist_add_entry_buffer()

to

add

a

buffer

name-value

pair

of

type

azn_buffer_t.

Use

azn_attrlist_add_entry_ulong()

to

add

a

name-value

pair

of

type

azn_ulong_t.

Use

azn_attrlist_add_entry_pobj()

to

add

a

name-value

pair

of

type

azn_pobj_t.

Delete

an

entry

from

an

attribute

list.

Use

azn_attrlist_delete_entry()

to

delete

all

the

values

that

are

assigned

to

an

attribute

in

an

attribute

list.

Delete

a

value

from

an

entry

in

an

attribute

list.

Use

azn_attrlist_delete_entry_value()

to

delete

a

specified

values

from

the

array

of

values

that

are

assigned

to

an

attribute

in

an

attribute

list.

18

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Task

Description

Get

the

type

of

a

specified

value

for

a

specified

entry

in

the

attribute

list

Use

azn_attrlist_get_entry_type()

to

get

the

type

for

the

specified

value

for

the

specified

entry

in

the

attribute

list.

Get

attribute

names

from

an

attribute

list

Use

azn_attrlist_get_names()

to

get

all

the

names

in

an

attribute

list.

The

names

are

returned

in

a

NULL-terminated

array

of

strings

of

type

azn_string_t.

Get

the

number

of

values

for

a

specified

attribute

name

Use

azn_attrlist_name_get_num()

to

get

the

number,

as

an

integer,

of

the

value

attributes

for

a

specified

name

in

the

attribute

list.

Copy

an

attribute

list.

Use

azn_attrlist_copy()

to

make

a

copy

of

an

attribute

list.

Get

a

value

Use

azn_attrlist_get_entry_string_value()

to

get

the

value

attribute

of

a

string

of

type

azn_string_t

for

a

specified

name

in

an

attribute

list.

Use

azn_attrlist_get_entry_buffer_value()

to

get

the

value

attribute

of

a

buffer

of

type

azn_buffer_t

for

a

specified

name

in

an

attribute

list.

Use

azn_attrlist_get_entry_ulong_value()

to

get

the

value

attribute

of

type

azn_ulong_t.

Use

azn_attrlist_get_entry_pobj_value()

to

get

the

value

attribute

of

type

azn_pobj_t.

For

each

of

the

functions

described

above,

the

specified

attribute

list

entry

can

have

multiple

values.

For

a

multi-valued

attribute,

specify

an

index

to

get

that

instance

of

the

value.

For

a

single-valued

attribute,

the

index

should

be

set

to

0.

Delete

an

attribute

list

Use

azn_attrlist_delete()

to

delete

the

attribute

list

associated

with

a

specified

attribute

list

handle.

Determine

if

the

attribute

list

handle

is

valid

Use

azn_util_handle_is_valid()

to

determine

if

an

attribute

list

handle

is

associated

with

valid

data.

Chapter

2.

Authorization

API

functions

and

data

types

19

Credential

handles

A

credential

handle

refers

to

a

credentials

chain

consisting

of

the

credentials

of

the

initiator

and

a

series

of

(zero

or

more)

intermediaries

through

which

the

initiator’s

request

has

passed.

By

default,

the

credentials

generated

by

the

azn_id_get_creds()

interface

and

Tivoli

Access

Manager

components

contain

only

a

single

Tivoli

Access

Manager

credential.

The

intermediary

credentials

are

not

referenced

by

Tivoli

Access

Manager

when

making

an

authorization

decision.

Only

the

primary

credential,

referred

to

as

the

“initiator”

is

used

in

authorization

decisions.

Chains

can

be

used

for

customer

API

applications

but

an

External

authorization

service

would

need

to

be

developed

to

authorize

the

remaining

credentials

in

a

chain.

Several

authorization

API

functions

take

credentials

handles

as

input

parameters

or

return

pointers

to

credential

handles

as

output

parameters.

Use

the

azn_creds_h_t

data

type

to

pass

credential

handles

between

the

authorization

API

and

the

calling

application.

Variables

of

type

azn_creds_h_t

are

opaque

handles

to

credential

structures

that

are

internal

to

the

Tivoli

Access

Manager

security

framework.

CAUTION:

Always

initialize

credential

handles

to

AZN_C_INVALID_HANDLE

when

declaring

them

on

the

stack.

If

an

application

attempts

to

access

an

uninitialized

credential

handle,

the

access

request

may

result

in

memory

corruption

or

undefined

behavior.

Use

the

function

azn_creds_create()

to

complete

the

following

tasks:

v

Allocate

a

new,

empty

credential

structure.

v

Associate

a

handle

with

the

credential

structure.

v

Return

a

pointer

to

the

handle.

Call

the

function

azn_creds_delete()

on

the

handle

to

release

the

memory

allocated

for

the

credential

structure.

To

determine

if

a

credentials

handle

is

valid,

use

the

authorization

API

utility

function

azn_util_handle_is_valid().

For

more

information

on

functions

that

use

credentials

handles

to

access

credential

information,

see

“Working

with

credentials”

on

page

63.

20

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Status

codes

and

error

handling

Authorization

API

functions

return

a

status

code

of

type

azn_status_t.

The

values

in

azn_status_t

are

integers.

The

return

value

for

successful

completion

of

a

function

is

AZN_S_COMPLETE,

which

is

defined

to

be

0.

The

returned

status

code

includes

both

major

and

minor

error

codes.

A

major

error

code

of

AZN_S_FAILURE

indicates

that

a

minor

error

code

contains

the

error

status.

Use

azn_error_major()

to

extract

major

error

codes

from

the

returned

status.

Major

error

codes

are

defined

according

to

The

Open

Group

authorization

API

Standard.

Use

azn_error_minor()

to

extract

minor

error

codes

from

the

returned

status.

The

minor

codes

contain

error

messages

from

the

utility

function

extensions

to

the

API,

and

contain

error

messages

from

the

Tivoli

Access

Manager

authorization

server.

Use

azn_error_minor_get_string()

to

obtain

string

values

for

the

minor

error

codes

returned

by

azn_error_minor().

Use

azn_error_get_string()

to

return

the

Tivoli

Access

Manager

serviceability

message

string

from

a

authorization

API

status

structure

of

type

azn_status_t.

This

function

will

automatically

select

the

major

or

minor

code

and

map

the

error

value

to

an

error

message

string.

Use

azn_util_errcode()

to

build

an

azn_status_t

error

code

from

a

major

and

minor

status.

Use

this

to

return

standardized

error

codes

to

authorization

API

applications

when

developing

authorization

service

plug-ins.

See

the

following

files

for

a

complete

list

of

error

codes:

File

Contents

ogauthzn.h

Major

error

codes

for

the

standard

authorization

API

functions.

aznutils.h

Major

error

codes

for

the

authorization

API

utility

functions.

pdb*msg.h

Minor

error

codes

for

utility

functions

and

the

Tivoli

Access

Manager

authorization

service

are

found

in

a

number

of

files.

The

filenames

for

these

files

all

share

the

prefix

pdb

and

the

suffix

msg.h

Chapter

2.

Authorization

API

functions

and

data

types

21

22

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

3.

Initializing

the

authorization

API

To

use

the

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

API,

an

application

must

initialize

the

API.

Initialization

consists

of

specifying

initialization

data

and

calling

an

initialization

function.

There

are

two

ways

to

specify

the

initialization

data:

v

Specify

input

arguments

to

azn_initialize()

v

Specify

entries

in

the

authorization

API

configuration

file

The

authorization

API

initialization

function

azn_initialize()

takes

as

an

input

parameter

an

attribute

list

named

init_data.

To

specify

initialization

data,

you

must

add

the

necessary

attributes

to

init_data.

Each

input

argument

to

azn_initialize()

has

a

corresponding

entry

in

the

authorization

API

configuration

file.

Input

arguments

take

precedence

over

configuration

file

entries.

You

can

define

entries

in

the

configuration

file,

and

then

use

input

parameters

to

azn_initialize()

to

override

them

as

needed

when

each

authorization

API

application

initializes.

In

order

to

use

a

configuration

file,

specify

the

configuration

file

location

as

an

input

parameter

to

azn_initialize().

Complete

the

instructions

in

the

following

sections:

v

“Specifying

UTF-8

or

local

codeset”

on

page

24

v

“Specifying

an

authorization

API

configuration

file”

on

page

25

v

“Specifying

cache

mode

settings”

on

page

26

v

“Configuring

SSL

from

the

API

client

to

Tivoli

Access

Manager”

on

page

30

v

“Specifying

communications

attributes

for

the

policy

server”

on

page

35

v

“Specifying

values

for

an

authorization

server

replica”

on

page

36

v

“Configuring

the

authorization

API

for

LDAP

access”

on

page

37

v

“URAF

registry

settings”

on

page

42

v

“Authorization

rules

initialization”

on

page

44

v

“Enabling

the

return

of

permission

information”

on

page

47

v

“Configuring

event

logging

and

legacy

auditing”

on

page

49

v

“Specifying

the

host

interface

on

which

to

listen”

on

page

50

v

“Starting

the

authorization

service”

on

page

51

©

Copyright

IBM

Corp.

2000,2003

23

Specifying

UTF-8

or

local

codeset

Tivoli

Access

Manager

Version

5.1

uses

UTF-8

strings

for

all

of

its

internal

processing

of

data.

When

applications

send

data

in

the

forms

of

strings

in

the

local

codeset,

the

data

must

be

converted

to

UTF-8.

Tivoli

Access

Manager

assumes

by

default

that

clients

run

using

the

local

codeset.

To

override,

this

assumption,

you

can

call

the

azn_init_set_code_set()

function.

This

function

tells

the

codeset

in

which

the

client

is

running.

The

only

valid

alternative

to

local

is

UTF-8.

To

perform

the

appropriate

conversions

to

and

from

the

calling

application’s

codeset,

the

authorization

API

runtime

needs

to

be

configured

(initialized)

with

the

caller’s

codeset.

When

the

codeset

is

not

explicitly

specified,

the

runtime

assumes

that

the

caller

is

using

a

local

codeset.

When

the

calling

application

wants

to

use

UTF-8

codeset,

the

function

azn_init_set_code_set()

must

be

called.

This

function

takes

one

input

parameter,

codeset.

The

following

table

lists

the

valid

values

for

this

parameter:

Attribute

name

Description

azn_code_set_utf8

Use

UTF-8

codeset

azn_code_set_local

Use

local

codeset

Authorization

service

plug-ins

automatically

inherit

the

codeset

of

the

application

because

they

are

loaded

into

the

address

space

of

the

authorization

client

application.

The

service

plug-ins

cannot

run

in

a

different

codeset

to

the

application

that

is

loading

them.

Authorization

services

can

determine

the

codeset

of

the

calling

application

from

the

value

of

the

azn_svc_init_code_set

initialization

attribute.

This

attribute

is

passed

to

the

service

plug-in

by

the

service

dispatcher

at

initialization

time.

The

service

plug-in

receives

this

attribute

in

the

svcInit

attribute

list

passed

to

its

azn_svc_initialize()

interface.

Backward

compatibility

The

authorization

API

runs

by

default

expecting

data

to

be

delivered

in

local

codeset.

This

enables

backwards

compatibility

with

applications

written

to

operate

with

previous

versions

of

Tivoli

Access

Manager.

To

retain

backwards

compatibility,

do

not

call

azn_init_set_code_set().

Authorization

services

from

versions

of

Tivoli

Access

Manager

prior

to

Version

5.1

are

not

UTF-8

codeset

aware

and

operate

exclusively

in

the

ASCII

codeset.

These

service

plug-ins

can

be

used

with

AM

5.1

authorization

applications

that

use

the

ASCII

codeset.

However,

these

plug-ins

must

be

made

UTF-8

aware

before

they

can

be

used

with

applications

that

run

on

the

Access

Manager

5.1

authorization

runtime

and

use

either

the

UTF-8

codeset

or

a

local

codeset

other

than

ASCII.

Note

that

the

IBM

Tivoli

Access

Manager

for

e-business

Version

5.1

WebSEAL

application

uses

the

UTF-8

codeset.

24

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Specifying

an

authorization

API

configuration

file

You

can

specify

a

configuration

file

that

contains

initialization

values.

The

configuration

file

is

a

text

file

consisting

of

stanzas.

Each

stanza

contains

a

series

of

name

=

value

pairs.

Each

of

the

pairs

corresponds

to

an

input

parameter

that

can

get

passed

to

azn_initialize().

If

no

configuration

file

is

specified,

azn_initialize()

obtains

initialization

parameters

only

from

the

attribute

list

contained

in

the

init_data

input

parameter.

There

is

no

configuration

file

specified

by

default.

Specify

a

configuration

file

by

using

the

azn_init_cfg_file

attribute.

To

specify

the

location

of

a

configuration

file:

1.

Call

azn_attrlist_create()

to

create

a

new

attribute

list

called

init_data.

This

function

returns

a

pointer

to

an

attribute

list

handle.

2.

Use

azn_attrlist_add_entry()

to

add

the

attribute

azn_init_cfg_file

and

assign

it

a

value,

as

described

in

the

table

below.

azn_init_cfg_file

Value

Description

filename

A

configuration

file

containing

initialization

values

for

the

Tivoli

Access

Manager

authorization

API.

There

is

no

default

value.

The

sample

configuration

file

distributed

with

the

Authorization

demonstration

program

is

named

aznapi.conf.

Chapter

3.

Initializing

the

authorization

API

25

Specifying

cache

mode

settings

The

cache

mode

determines

if

the

authorization

API

talks

to

a

Tivoli

Access

Manager

authorization

service

running

in

the

same

process

space

(local

cache

mode)

or

in

a

different

process

space

(remote

cache

mode)

in

the

secure

domain.

Local

cache

mode

can

increase

application

performance

because

authorization

checks

can

be

performed

on

the

same

system

as

the

application.

Local

cache

mode,

however,

requires

additional

configuration

and

maintenance

of

a

replicated

authorization

database.

v

When

using

remote

mode,

the

caller

of

the

authorization

API

must

be

a

member

of

the

remote-acl-users

group.

v

When

using

local

mode,

the

caller

of

the

authorization

API

must

be

a

member

of

the

ivacld-servers

group.

Note:

For

more

information

on

remote

cache

mode

or

local

cache

mode,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

The

svrsslcfg

utility

creates

a

user

identity

for

the

caller

and

automatically

adds

it

to

the

appropriate

group.

The

svrsslcfg

utility

determines

which

group

membership

is

required,

based

on

whether

you

specified

local

or

remote

to

the

-s

parameter.

For

more

information,

see

the

IBM

Tivoli

Access

Manager

for

e-business

Command

Reference.

Specifying

cache

mode

type

You

can

specify

the

cache

mode

by

using

either

an

attribute

list

entry

or

a

configuration

file

entry.

v

Attribute

List

Entry:

azn_init_mode

v

Configuration

File

Entry:

mode

v

Configuration

File

Stanza:

[aznapi-configuration]

v

Modified

by

svrsslcfg?

Yes.

Must

be

specified.

Use

the

option

-s

[

local

|

remote

].

The

following

table

displays

the

valid

values

for

cache

modes.

Values

Description

local

The

Tivoli

Access

Manager

authorization

service

runs

in

the

same

server

process

as

the

application

using

the

authorization

API.

remote

The

Tivoli

Access

Manager

authorization

service

runs

as

a

different

server

process

from

the

application

using

the

authorization

API.

When

you

specify

local

cache

mode,

you

must

decide

how

the

local

copy

of

the

authorization

database

will

be

updated.

Choose

one

of

the

following

methods

to

implement

updating:

v

Set

the

authorization

API

to

poll

the

master

authorization

service

database.

v

Register

the

local

(replicated)

database

with

the

master

database,

and

enable

a

listener

process

on

the

local

database’s

system.

This

process

listens

for

update

notifications.

v

Configure

the

authorization

API

to

both

poll

and

listen.

26

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

Configure

the

authorization

API

to

neither

poll

nor

listen.

This

could

be

useful,

for

example,

when

the

local

system

is

not

connected

to

a

network.

You

can

use

this

configuration

to

only

receive

updates

when

the

pdadmin

server

replicate

command

is

issued.

Note

that

in

order

for

the

pdadmin

server

replicate

command

to

function

correctly,

a

valid

non-zero

listening

port

(azn_ssl_listening_port)

must

be

set.

Authorization

database

file

location

You

can

specify

the

location

of

the

database

file

used

by

the

authorization

service

by

either

using

attribute

list

entries

or

by

using

configuration

file

entries.

v

Attribute

List

entry:

azn_init_db_file

v

Configuration

File

Entry:

db-file

v

Configuration

File

Stanza:

[aznapi-configuration]

v

Modified

by

svrsslcfg?

No.

Authorization

Database

File

Location

Value

Description

filename

Path

name

to

the

persistent

authorization

policy

database

replica.

Local

cache

refresh

You

can

specify

the

interval

for

the

local

cache

refresh

by

either

using

attribute

list

entries

or

by

using

configuration

file

entries.

v

Attribute

List

entry:

azn_init_cache_refresh_interval

v

Configuration

File

entry:

cache-refresh-interval

v

Configuration

File

Stanza:

[aznapi-configuration]

v

Modified

by

svrsslcfg?

No.

The

following

table

shows

that

you

can

disable

or

enable

the

cache

refresh.

When

you

enable

the

cache

refresh,

you

can

specify

the

cache

refresh

interval

in

number

of

seconds.

Values

Description

disable

Refreshing

of

the

local

authorization

policy

database

disabled.

default

disabled

number

of

seconds

Number

of

seconds

between

refreshes

of

the

local

authorization

policy

database.

Set

appropriate

values

to

ensure

that

the

replicated

database

is

updated

in

a

timely

manner

to

reflect

changes

made

to

the

master

database.

Local

cache

notification

listener

You

can

configure

the

notification

listener

by

either

using

attribute

list

entries

or

by

using

configuration

file

entries.

v

Attribute

List

entry:

azn_init_listen_flags

v

Configuration

File

entry:

listen-flags

v

Configuration

File

Stanza:

[aznapi-configuration]

v

Modified

by

svrsslcfg?:

Yes.

Use

the

option

-l

[

yes

|

no

].

If

not

specified

the

default

is

disable.

Chapter

3.

Initializing

the

authorization

API

27

Value

Description

disable

Disable

the

notification

listener.

This

is

the

default.

enable

Enable

the

notification

listener.

SSL

listener

ports

This

port

is

also

used

to

listen

for

administration

requests

from

the

policy

server.

It

is

mandatory

to

specify

this

port

when

running

svrsslcfg.

Note:

If

you

disabled

the

notification

listener,

skip

this

section.

You

can

specify

the

notification

listener

port

by

using

a

configuration

file

entry.

v

Attribute

List

entry:

azn_init_ssl_listening_port

v

Configuration

File

entry:

ssl-listening-port

v

Configuration

File

stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Use

the

option

-r

[

<port-number>

].

This

must

be

specified.

Value

Description

port

number

Use

this

value

to

specify

the

TCP

port

on

which

the

application

will

listen

for

notifications

from

the

master

database

that

is

has

changed.

All

communications

on

this

port

are

SSL

encrypted.

The

value

should

be

non-zero

and

not

used

by

any

other

service

on

the

computer.

Local

domain

This

attribute

specifies

the

operational

domain

of

the

authorization

client

in

a

multiple-domain

Tivoli

Access

Manager

deployment.

The

domain

name

is

used

in

communications

with

the

user

registry

and

the

Tivoli

Access

Manager

policy

server.

An

authorization

client

can

be

configured

into

only

one

Tivoli

Access

Manager

domain.

This

attribute,

and

the

corresponding

configuration

file

entry,

can

be

empty

(unspecified).

In

this

case,

the

domain

defaults

to

the

Management

domain.

Thus,

in

a

single-domain

environment

this

attribute

can

be

left

unspecified.

In

a

multiple-domain

environment,

ensure

that

this

attribute

matches

the

Tivoli

Access

Manager

secure

domain

that

was

specified

when

the

authorization

server

was

configured.

If

the

domain

name

is

specified

in

both

the

azn_init_ssl_local_domain

initialization

attribute

and

in

the

ssl-local-domain

configuration

file

entry,

an

error

is

returned,

to

indicate

a

conflict

in

the

domain

configuration.

Note:

Unlike

other

authorization

API

initialization

parameters,

the

configuration

file

entry

cannot

be

overridden

by

the

initialization

attribute.

v

Attribute

List

entry:

azn_init_ssl_local_domain

v

Configuration

File

entry:

ssl-local-domain

v

Configuration

File

stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Table

2.

Local

domain

value

Value

Description

28

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Table

2.

Local

domain

value

(continued)

domain_name

The

domain

in

which

the

authorization

server

runs.

If

this

value

is

not

specified

in

the

configuration

file

or

as

an

initialization

parameter,

operations

that

rely

on

it

will

fail.

This

value

must

match

the

name

of

the

Tivoli

Access

Manager

secure

domain

that

was

specified

when

the

authorization

server

was

configured.

Chapter

3.

Initializing

the

authorization

API

29

Configuring

SSL

from

the

API

client

to

Tivoli

Access

Manager

You

can

specify

a

number

of

attributes

or

configuration

file

entries

that

describe

the

SSL

communications

configuration

between

the

authorization

API

Client,

running

in

remote

mode,

and

the

Tivoli

Access

Manager

authorization

server

and

Tivoli

Access

Manager

policy

server.

Specifying

an

SSL

keyfile

v

Attribute

List

Entry:

azn_init_ssl_keyfile

v

Configuration

File

Entry:

ssl-keyfile

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Must

be

specified.

This

uses

the

svrsslcfg

options

-d

[kdb-directory]

and

the

root

from

-n

[server-name]

to

create

an

entry

value:

<kdb-directory>/<server-name>.kdb.

Value

Description

<keyfile-path>

This

is

the

keyfile

used

to

communicate

with

the

Tivoli

Access

Manager

policy

server

and

the

Tivoli

Access

Manager

authorization

server.

It

is

created

by

the

svrsslcfg

utility.

This

can

be

any

relative

or

fully

qualified

filename.

Specifying

a

stash

file

v

Attribute

List

Entry:

azn_init_ssl_stashfile

v

Configuration

File

Entry:

ssl-keyfile-stash

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Must

be

specified.

This

uses

the

svrsslcfg

options

-d

[kdb-directory]

and

the

root

from

-n

[server-name]

to

create

an

entry

value:

<kdb-directory>/<server-name>.sth.

Value

Description

<keyfile-path>

This

the

stash

file

for

the

keyfile.

It

is

created

by

the

svrsslcfg

utility.

It

is

used

as

an

obfuscated

password

to

the

keyfile.

This

file

should

be

appropriately

secured.

This

can

be

any

relative

or

fully

qualified

filename.

Specifying

a

keyfile

label

v

Attribute

List

Entry:

azn_init_ssl_keyfile_label

v

Configuration

File

Entry:

ssl-keyfile-label

v

Configuration

File

Stanza:

{ssl}

v

Modified

by

svrsslcfg?:

No.

Value

Description

Any

string

The

label

of

the

certificate

to

use

within

the

keyfile.

In

normal

operation

this

is

not

used.

However

it

is

useful

if

the

keyfiles

are

constructed

outside

of

the

svrsslcfg

utility

and

contain

multiple

certificates.

30

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

SSL

session

timeout

v

Attribute

List

Entry:

azn_init_ssl_timeout

v

Configuration

File

Entry:

ssl-v3-timeout

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Use

the

option

-t

[ssl-timeout].

If

not

specified,

the

default

is

7200

seconds.

Value

Description

Any

non-negative

integer.

Default

value

is

7200

seconds

This

is

the

amount

of

time

before

an

SSL

session

will

expire.

The

Tivoli

Access

Manager

authorization

API

client

automatically

create

a

new

SSL

session

with

new

keys

when

a

session

expires.

This

value

only

applies

to

the

listening

aspect

of

the

authorization

API’s

(when

the

Tivoli

Access

Manager

policy

server

is

calling

the

application).

When

the

application

is

calling

the

Tivoli

Access

Manager

policy

server

or

the

Tivoli

Access

Manager

authorization

server,

the

session

timeout

value

is

dictated

by

the

most

restrictive

of

the

values

for

that

client

and

server.

SSL

password

expiration

v

Attribute

List

Entry:

azn_init_ssl_pwd_life

v

Configuration

File

Entry:

ssl-pwd-life

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Use

the

option

-e

[<password-life>].

If

not

specified,

the

default

is

183

days.

Value

Description

Any

non-negative

integer.

Default

value

is

183

days.

This

is

the

amount

of

time

before

the

password

or

stash

file

to

the

keyfile

will

expire.

The

Tivoli

Access

Manager

authorization

API

client

automatically

refreshes

the

password

or

stash

file

before

this

expiry

time,

if

automatic

refresh

is

enabled.

Authentication

method

v

Attribute

List

Entry:

azn_init_ssl_authn_type

v

Configuration

File

Entry:

ssl-authn-type

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

This

is

always

set

by

svrsslcfg

to

certificate.

Chapter

3.

Initializing

the

authorization

API

31

Value

Description

The

type

of

authentication.

Possible

values

are:

v

certificate

v

password

v

none

The

default

value

is

none.

The

method

that

the

Tivoli

Access

Manager

policy

server

will

use

to

authenticate

the

authorization

API

client.

The

svrsslcfg

utility

automatically

sets

this

to

certificate.

If

the

value

is

certificate

the

Tivoli

Access

Manager

policy

server

will

map

the

certificate

provided

by

the

authorization

API

client

into

an

identity

and

authenticate

against

it.

Note

that

even

if

password

or

none

are

specified,

the

client

will

still

use

SSL

to

communicate

with

the

server,

and

as

such

will

still

require

a

keyring

database

file

that

has

the

Tivoli

Access

Manager

Certificate

Authority

(CA)

certificate

as

a

signer

certificate

or

trusted

certificate.

There

are

currently

no

operations

that

can

be

performed

by

the

API

successfully

with

an

authentication

type

of

none.

User

name

and

password

v

Attribute

List

Entry:

azn_init_ssl_authn_user

v

Attribute

List

Entry:

azn_init_ssl_authn_pwd

v

Configuration

File

Entry:

ssl-authn-user

v

Configuration

File

Entry:

ssl-authn-password

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

No.

Value

Description

Any

string.

The

user

name

and

password

that

are

used

if

the

authentication

type

is

password.

It

may

be

unwise

to

store

these

in

the

configuration

file,

however

they

can

be

useful

for

testing

communications.

Tivoli

Access

Manager

configuration

file

location

v

Attribute

List

Entry:

azn_init_ssl_mgr_config

v

Configuration

File

Entry:

ssl-mgr-config

v

Configuration

File

Stanza:

[ssl]

Value

Description

The

relative

or

fully

qualified

path

name

to

the

pd.conf

file.

This

entry

is

used

to

point

to

the

configuration

file

that

was

created

as

part

of

configuring

the

Tivoli

Access

Manager

runtime

environment

(pd.conf).

If

it

is

specified,

the

values

for

master-host,

master-port,

and

master-dn

will

come

from

the

manager

stanza

of

pd.conf

and

override

any

values

specified

in

the

authorization

API

client’s

configuration

file.

Furthermore,

if

entries

or

values

are

not

found

in

pd.conf

for

any

of

these

entries,

empty

values

will

be

used.

The

pd.conf

usually

lives

in

the

Tivoli

Access

Manager

installation

directory,

under

./lib/pd.conf

Password

for

the

SSL

keyfile

v

Attribute

List

Entry:

azn_init_ssl_keyfile_pwd

v

Configuration

File

Entry:

ssl-keyfile-pwd

32

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

No.

Value

Description

<password

string>

Password

used

to

protect

keys

in

the

keyfile.

When

both

ssl-keyfile-pwd

and

ssl-keyfile-stash

are

specified,

the

value

in

ssl-keyfile-pwd

is

used.

Maximum

number

of

worker

threads

v

Attribute

List

Entry:

azn_init_ssl_max_worker_threads

v

Configuration

File

Entry:

ssl-maximum-worker-threads

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

No.

Value

Description

maximum

number

of

worker

threads

Maximum

number

of

worker

threads

that

are

created

by

the

server

to

handle

incoming

requests.

The

value

is

an

integer.

The

minimum

number

is

1.

The

maximum

number

is

determined

by

the

amount

of

system

resources

available.

The

default

number

is

50.

Automatic

refresh

of

SSL

certificate

and

keyfile

password

v

Attribute

List

Entry:

azn_init_ssl_auto_refresh

v

Configuration

File

Entry:

ssl-auto-refresh

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

Yes.

Use

the

option

-a

[

yes

|

no

].

If

not

specified

the

default

is

yes.

Value

Description

yes

or

no

Enables

or

disables

automatic

refresh

of

the

SSL

certificate

and

key

database

file

password.

When

enabled,

the

certificate

is

renewed

when

it

is

close

to

expiration.

This

means

that

the

same

public

key

gets

a

renewed

signature

from

the

certificate

authority,

which

results

in

an

extended

lifetime

for

the

certificate.

A

value

of

yes

enables

automatic

refresh.

A

value

of

no

disables

automatic

refresh.

Connection

timeout

v

Attribute

List

Entry:

azn_init_ssl_io_inactivity_timeout

v

Configuration

File

Entry:

ssl-io-inactivity-timeout

v

Configuration

File

Stanza:

[ssl]

v

Modified

by

svrsslcfg?:

No.

Chapter

3.

Initializing

the

authorization

API

33

Value

Description

<number

of

seconds>

Inactivity

timeout

for

the

input/output

connection,

expressed

in

seconds.

The

value

is

an

integer.

The

minimum

value

is

0.

When

the

value

is

0,

no

timeout

is

enforced.

The

default

value

is

0

seconds.

The

recommended

value

is

90

seconds.

Note

that

this

value

is

set

in

the

supplied

aznapi.conf

file.

34

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Specifying

communications

attributes

for

the

policy

server

Use

the

attributes

described

in

this

section

to

specify

the

location

and

port

number

of

the

Tivoli

Access

Manager

policy

server.

Authorization

API

clients

use

this

information

to

communicate

with

the

policy

server.

Policy

server

hostname

v

Attribute

List

Entry:

azn_init_master_host

v

Configuration

File

Entry:

master-host

v

Configuration

File

Stanza:

[manager]

v

Modified

by

svrsslcfg?:

Yes.

The

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Value

Description

<policy

server

hostname>

Specifies

the

hostname

of

the

Tivoli

Access

Manager

policy

server.

This

entry

and

stanza

can

be

in

either

the

authorization

API

client’s

configuration

file

or

the

file

pointed

to

by

the

azn_init_ssl_mgr_config

attribute

(if

specified).

If

the

azn_init_ssl_mgr_config

attribute

is

specified,

its

value

overrides

that

in

aznAPI.conf.

Policy

server

port

number

v

Attribute

List

Entry:

azn_init_master_port

v

Configuration

File

Entry:

master-port

v

Configuration

File

Stanza:

[manager]

v

Modified

by

svrsslcfg?:

Yes.

The

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Value

Description

<port

number>

This

entry

and

stanza

can

be

in

either

the

authorization

API

client’s

configuration

file

or

the

file

pointed

to

by

the

azn_init_ssl_mgr_config

attribute

(if

specified).

If

the

azn_init_ssl_mgr_config

attribute

is

specified,

its

value

overrides

that

in

the

authorization

API

client’s

configuration

file.

Chapter

3.

Initializing

the

authorization

API

35

Specifying

values

for

an

authorization

server

replica

You

can

specify

a

series

of

values

that

describe

the

location

and

communication

values

for

an

authorization

server

replica.

All

values

are

assigned

to

one

configuration

file

entry.

Each

configuration

file

entry

describes

one

Tivoli

Access

Manager

authorization

server.

You

can

add

one

or

more

entries

for

each

authorization

server

to

the

configuration

file.

The

replicas

are

of

the

format:

<replica

hostname>:<port>:<preference>:<replica

cert

dn>

For

example:

“rweber.bball.com:7137:5:cn=ivacld/rweber,o=Access

Manager,C=US”

Note

that

the

separator

for

the

fields

is

a

colon

(“:”)

and

not

a

comma

(“,”)

like

the

LDAP

replicas

use.

v

Attribute

List

Entry:

azn_init_replica

v

Configuration

File

Entry:

replica

v

Configuration

File

Stanza:

[manager]

v

Modified

by

svrsslcfg:

Can

be.

Replicas

can

be

added

to

the

configuration

file

by

using

the

svrsslcfg

-add_replica

option.

Value

Description

<replica

hostname>

The

fully

qualified

domain

name

of

the

server.

<port>

The

port

on

the

server.

<preference>

A

ranking

for

attempting

contact.

Valid

values

are

from

1

to

10.

The

lowest

preference

is

1,

the

highest

preference

is

10.

<replica

certificate

distinguished

name>

The

LDAP

distinguished

name

for

the

authorization

server.

36

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Configuring

the

authorization

API

for

LDAP

access

When

your

application

runs

in

a

Tivoli

Access

Manager

secure

domain

that

uses

an

LDAP

user

registry,

you

must

provide

the

LDAP

configuration

settings

to

the

authorization

API.

The

required

LDAP

configuration

settings

match

the

settings

that

were

entered

when

Tivoli

Access

Manager

was

installed

on

the

local

system.

LDAP

user

registry

support

v

Attribute

List

Entry:

None.

v

Configuration

File

Entry:

enable

v

Configuration

File

Stanza:

[ldap]

v

Modified

by

svrsslcfg?

Yes.

The

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Value

Description

yes

Enable

LDAP

user

registry

support.

This

is

the

default

value.

This

entry

is

not

used

when

building

an

attribute

list.

LDAP

access

is

automatically

enabled

when

the

attribute

azn_init_ldap_port

is

not

null.

When

azn_init_ldap_port

is

null,

LDAP

access

is

automatically

disabled.

LDAP

server

host

name

v

Attribute

List

Entry:

azn_init_ldap_host

v

Configuration

File

Entry:

host

v

Configuration

File

Stanza:

[ldap]

v

Modified

by

svrsslcfg?

Yes.

The

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Value

Description

host

name

Host

name

of

LDAP

server.

LDAP

server

port

number

v

Attribute

List

Entry:

azn_init_ldap_port

v

Configuration

File

Entry:

port

v

Configuration

File

Stanza:

[ldap]

v

Modified

by

svrsslcfg?

Yes.

The

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Value

Description

port

number

Port

number

for

communicating

with

the

LDAP

server.

LDAP

user

Distinguished

Name

v

Attribute

List

Entry:

azn_init_ldap_bind_dn

v

Configuration

File

Entry:

bind-dn

Chapter

3.

Initializing

the

authorization

API

37

v

Configuration

File

Stanza:

[ldap]

v

Modified

by

svrsslcfg?

Yes.

The

value

is

created

based

on

the

server

name

that

was

specified

with

the

-n

server_name

flag

and

the

local

host

of

the

machine.

Value

Description

LDAP

DN

Distinguished

Name

of

the

LDAP

user.

Created

by

the

svrsslcfg

utility.

LDAP

User

Password

v

Attribute

List

Entry:

azn_init_ldap_bind_pwd

v

Configuration

File

Entry:

bind-pwd

v

Configuration

File

Stanza:

[ldap]

v

Modified

by

svrsslcfg?

Yes.

The

value

is

created

based

on

the

password

that

was

specified

with

the

-S

password

flag.

Value

Description

password

Password

for

the

LDAP

user.

Created

by

the

svrsslcfg

utility.

SSL

communication

with

the

LDAP

server

If

the

communication

between

the

Tivoli

Access

Manager

Authorization

server

and

the

LDAP

server

is

over

Secure

Sockets

Layer

(SSL),

you

must

specify

the

communication

settings.

Note

that

the

Tivoli

Access

Manager

authorization

API

client

must

use

two

key

files:

one

for

communicating

with

the

LDAP

server

and

one

for

communicating

with

the

Tivoli

Access

Manager

servers.

v

Attribute

List

Entry:

None.

v

Configuration

File

Entry:

ssl-enabled

v

Configuration

File

Stanza:

[ldap]

Value

Description

yes

Enables

SSL

communication

with

the

LDAP

server.

This

entry

is

not

used

when

building

attribute

lists.

If

azn_init_ldap_ssl_keyfile

is

not

null,

then

SSL

is

automatically

configured.

When

azn_init_ldap_ssl_keyfile

is

null,

SSL

is

not

automatically

configured

SSL

keyfile

name

v

Attribute

List

Entry:

azn_init_ldap_ssl_keyfile

v

Configuration

File

Entry:

ssl-keyfile

v

Configuration

File

Stanza:

[ldap]

Value

Description

<filename>

Name

of

the

SSL

key

file.

38

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

SSL

keyfile

distinguished

name

v

Attribute

List

Entry:

azn_init_ldap_ssl_keyfile_dn

v

Configuration

File

Entry:

ssl-keyfile-dn

v

Configuration

File

Stanza:

[ldap]

Value

Description

KeyLabel

Key

label

to

identify

the

client

certificate

that

is

presented

to

the

LDAP

server.

SSL

keyfile

password

v

Attribute

List

Entry:

azn_init_ldap_ssl_keyfile_pwd

v

Configuration

File

Entry:

ssl-keyfile-pwd

v

Configuration

File

Stanza:

[ldap]

Value

Description

password

Password

to

access

the

SSL

key

file.

When

the

keyfile

is

specified

but

the

password

is

not

specified

or

is

set

to

NULL,

this

indicates

that

there

is

no

password

required

for

access

to

the

SSL

key

file.

When

the

keyfile

is

specified,

and

the

password

is

a

non-NULL

string,

the

password

is

used

by

the

LDAP

client

to

access

the

SSL

key

file.

Maximum

search

buffer

size

v

Attribute

List

Entry:

azn_init_ldap_max_search_size

v

Configuration

File

Entry:

max-search-size

v

Configuration

File

Stanza:

[ldap]

Value

Description

<search-size>

Optional.

Limit

for

the

maximum

search

buffer

size

returned

from

the

LDAP

server

in

entries.

Note

that

this

value

can

also

be

limited

by

the

LDAP

server

itself.

Caching

LDAP

data

v

Attribute

List

Entry:

azn_init_ldap_cache

v

Configuration

File

Entry:

cache-enabled

v

Configuration

File

Stanza:

[ldap]

Value

Description

true

Optional.

Enable

LDAP

client-side

caching

of

user,

group

and

LDAP

policy

data

to

improve

performance

for

similar

LDAP

queries.

false

Optional.

Disable

LDAP

client-side

caching.

This

is

the

default

value.

LDAP

server

query

preference

v

Attribute

List

Entry:

azn_init_prefer_rw_svr

v

Configuration

File

Entry:

prefer-readwrite-server

Chapter

3.

Initializing

the

authorization

API

39

v

Configuration

File

Stanza:

[ldap]

Value

Description

true

Optional.

The

client

attempts

to

query

the

read/write

LDAP

server

(see

ldap-replica

configuration

option)

before

querying

any

read-only

servers

that

are

configured

in

the

domain.

false

Optional.

Do

not

query

read/write

LDAP

server

first

Authentication

method

v

Attribute

List

Entry:

azn_init_ldap_using_compare

v

Configuration

File

Entry:

auth-using-compare

v

Configuration

File

Stanza:

[ldap]

Value

Description

true

Optional.

Choose

whether

ldap_compare()

is

used

instead

of

ldap_bind()

to

authenticate

LDAP

users.

This

option

changes

the

method

used

by

the

Tivoli

Access

Manager

authorization

API

call

and

azn_util_password_authenticate().

false

Optional.

Use

ldap_bind().

Specifying

LDAP

user

registry

replica

access

Use

can

adds

an

attribute

or

configuration

file

entry

that

defines

the

LDAP

user

registry

replicas

in

the

domain.

v

Attribute

List

Entry:

azn_init_ldap_replica

v

Configuration

File

Entry:

replica

v

Configuration

File

Stanza:

[ldap]

Assign

multiple

values

to

replica

by

entering

a

list

consisting

of

entries

that

are

separated

by

commas.

For

example:

ldap-replica

=

barney,391,readwrite,2

ldap-replica

=

fred,391,readonly,3

Value

Description

ldap-server

The

network

name

of

the

LDAP

server.

port

The

port

on

the

LDAP

server.

type

Either

readonly

or

readwrite

pref

A

preference

or

priority

level

to

assign

to

accessing

this

replica.

The

minimum

value

is

1.

The

maximum

value

is

10.

A

higher

number

denotes

a

higher

preference.

LDAP

client-side

timeout

v

Attribute

List

Entry:

azn_init_ldap_timeout

v

Configuration

File

Entry:

timeout

v

Configuration

File

Stanza:

[ldap]

Value

Description

40

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

number_of_seconds

Client-side

timeout

setting

for

communication

to

LDAP

servers.

This

setting

applies

to

both

authentication

and

search

timeouts.

This

setting

can

be

overridden

by

azn_init_ldap_authn_timeout

and

azn_init_ldap_search_timeout.

By

default,

or

with

a

value

of

0,

LDAP

requests

do

not

timeout.

LDAP

client-side

authentication

timeout

v

Attribute

List

Entry:

azn_init_ldap_authn_timeout

v

Configuration

File

Entry:

authn-timeout

v

Configuration

File

Stanza:

[ldap]

Value

Description

number_of_seconds

Client-side

timeout

setting

for

authentication

requests

to

LDAP

servers.

By

default,

or

with

a

value

of

0,

authentication

requests

do

not

timeout.

LDAP

client-side

search

timeout

v

Attribute

List

Entry:

azn_init_ldap_search_timeout

v

Configuration

File

Entry:

search-timeout

v

Configuration

File

Stanza:

[ldap]

Value

Description

number_of_seconds

Client-side

timeout

setting

for

search

requests

to

LDAP

servers.

By

default,

or

with

a

value

of

0,

search

requests

do

not

timeout.

Chapter

3.

Initializing

the

authorization

API

41

URAF

registry

settings

Configure

the

settings

in

this

section

when

using

the

Tivoli

Access

Manager

User

Registry

Adapter

Framework

(URAF)

to

specify

Active

Directory

or

Lotus

Domino

configurations.

Specify

the

URAF

configuration

file

v

Attribute

List

Entry:

azn_init_uraf_cfg_file

v

Configuration

File

Entry:

uraf-registry-config

v

Configuration

File

Stanza:

[uraf-registry]

Value

Description

fully_qualified_pathname

URAF

configuration

file.

Specify

the

server

identity

v

Attribute

List

Entry:

azn_init_uraf_bind_id

v

Configuration

File

Entry:

bind-id

v

Configuration

File

Stanza:

[uraf-registry]

Value

Description

identity

Identity

to

use

when

binding

to

the

URAF

server.

Specify

the

server

password

v

Attribute

List

Entry:

azn_init_uraf_bind_pwd

v

Configuration

File

Entry:

bind-pwd

v

Configuration

File

Stanza:

[uraf-registry]

Value

Description

password_string

The

password

for

the

server

specified

in

either

azn_init_uraf_bind_id

or

in

the

configuration

file

entry

bind-id.

Enable

cache

mode

v

Attribute

List

Entry:

azn_init_uraf_cache_mode

v

Configuration

File

Entry:

cache-mode

v

Configuration

File

Stanza:

[uraf-registry]

Table

3.

Cache

mode

values

Value

Description

enable

Enable

cache

mode.

disable

Disable

cache

mode.

This

is

the

default

value.

Specify

cache

size

v

Attribute

List

Entry:

azn_init_uraf_cache_size

v

Configuration

File

Entry:

cache-size

42

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

Configuration

File

Stanza:

[uraf-registry]

Table

4.

Cache

size

values

Value

Description

integer

value

The

default

cache

size

is

251.

Specify

cache

lifetime

v

Attribute

List

Entry:

azn_init_uraf_cache_lifetime

v

Configuration

File

Entry:

cache-lifetime

v

Configuration

File

Stanza:

[uraf-registry]

Table

5.

Cache

lifetime

value

Value

Description

integer

value

The

default

cache

lifetime

is

86400.

Chapter

3.

Initializing

the

authorization

API

43

Authorization

rules

initialization

The

authorization

API

can

be

initialized

with

several

settings

that

control

the

behavior

of

authorization

rules

processing

and

inform

the

API

of

the

presence

of

one

or

more

sources

for

gathering

access

decision

information

(ADI)

needed

for

rule

evaluation.

The

ADI

can

come

from

the

resource

manager

application

and

from

dynamic

ADI

retrieval

entitlement

services.

Application

developers

should

understand

the

ADI

XML

document

model

and

services

before

modifying

the

settings

in

this

section.

The

authorization

rules

model

is

described

in

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

The

dynamic

ADI

retrieval

entitlement

service

is

described

in

“Dynamic

ADI

retrieval

services”

on

page

110.

Prolog

text

for

the

XMLADI

input

document

v

Attribute

List

Entry:

azn_init_input_adi_xml_prolog

v

Configuration

File

Entry:

input-adi-xml-prolog

v

Configuration

File

Stanza:

[aznapi-configuration]

This

text

is

prepended

to

the

XML

input

document

that

is

created

from

the

rule

access

decision

information

(ADI).

The

rule

ADI

is

passed

to

the

authorization

API

in

the

application

context

and

credential

attributes.

This

configurable

parameter

allows

the

administrator

to

customize

the

XML

prolog

statement

that

is

prepended

to

the

XMLADI

input

document.

The

XMLADI

input

document

contains

the

XML

encoded

ADI

for

use

during

the

rule

evaluation.

If

this

prolog

is

changed

then

it

is

strongly

suggested

that

the

existing

attribute

values

are

maintained

in

the

new

prolog.

The

default

text

is:

<?xml

version="1.0"

encoding="UTF-8"?>

Attention:

Be

sure

to

understand

the

authorization

rules

model

before

changing

this

setting.

See

the

description

in

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

Prolog

text

for

the

XSL

rule

document

v

Attribute

List

Entry:

azn_init_xsl_stylesheet_prolog

v

Configuration

File

Entry:

xsl-stylesheet-prolog

v

Configuration

File

Stanza:

[aznapi-configuration]

This

configurable

parameter

allows

the

administrator

to

customize

the

XSL

prolog

statement

that

is

prepended

to

the

XSL

stylesheet

that

is

created

from

the

XSL

language

rule

text.

This

allows

the

administrator

to

control

aspects

of

the

XSL

processor

initialization.

The

most

common

use

for

this

configurable

parameter

is

to

add

XML

namespace

definitions

for

a

customers

namespaces.

For

more

information

on

XML

namespaces

and

how

to

configure

and

use

them,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

Attention:

Modifying

this

value

for

reasons

other

than

to

add

XML

namespace

definitions

is

not

recommended.

Modifications

can

affect

the

results

returned

by

the

processor

and

make

them

unrecognizable

by

the

rules

policy

evaluator.

Be

sure

to

understand

the

authorization

rules

model

before

changing

this

setting.

The

default

and

recommended

setting

for

this

prolog

is:

44

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

<!—

Required

for

XSLT

language

—>

<?xml

version="1.0"

encoding=’UTF-8’?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0">

<!—

Required

to

constrain

output

of

rule

evaluation

—>

<xsl:output

method="text"

omit-xml-declaration="yes"

encoding=’UTF-8’

indent="no"

/>

<!—

Need

this

to

ensure

default

text

node

printing

is

off

—>

<xsl:template

match="text()"></xsl:template>

Resource

manager

ADI

prefix

list

v

Attribute

List

Entry:

azn_init_resource_mgr_provided_adi

v

Configuration

File

Entry:

resource-mgr-provided-adi

v

Configuration

File

Stanza:

[aznapi-configuration]

Authorization

API

clients

use

this

configuration

entry

to

notify

the

authorization

engine

that

the

client

is

a

source

for

application-specific

access

decision

information

(ADI)

needed

for

rule

evaluations.

The

entries

are

strings.

The

strings

are

prefixes

that

identify

ADI

that

will

be

supplied

by

the

resource

manager.

A

resource

manager

can

be

any

authorization

API

client,

including,

for

example,

Tivoli

Access

Manager

WebSEAL.

Note:

For

more

information

on

the

types

of

ADI

that

are

specific

to

Web

servers,

and

how

WebSEAL

can

provide

that

ADI

to

the

authorization

rule

evaluation

process,

see

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide.

For

example,

a

resource

manager

that

manages

and

protects

a

printer

queue

may

define

a

prefix

of

printmgr_

which

notifies

the

authorization

API

client

that

the

resource

manager

will

supply

the

values

for

any

ADI

it

needs

for

any

container

whose

name

has

a

prefix

of

printmgr_.

For

example,

printmgr_print_status

and

printmgr_user_print_quota

are

examples

of

two

items

of

ADI

that

the

authorization

engine

will

request

of

the

printer

resource

manager.

The

authorization

engine

will

request

this

ADI

from

the

resource

manager

when

the

ADI

is

not

available

in

the

credential

or

application

context

that

is

passed

in

with

the

access

decision

call.

The

authorization

engine

will

fail

the

access

decision

and

will

also

request

that

the

resource

manager

retry

the

request

after

the

required

data

has

been

added

to

the

application

context

that

will

be

passed

in

with

the

next

request.

Additional

prefixes

are

specified

with

additional

entries.

For

example,

if

the

printer

resource

manager

can

also

provide

information

on

the

user

requesting

the

print

submission

then

the

configuration

file

entries

would

be:

resource-mgr-provided-adi

=

printmgr_

resource-mgr-provided-adi

=

printuser_

By

default

there

are

no

resource

manager

prefixes

configured.

For

more

information,

refer

to

the

section

on

providing

ADI

on

demand

from

the

resource

manager,

in

the

authorization

rule

management

chapter

in

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

This

section

provides

more

detail

on

how

to

enable

this

feature

and

provides

more

examples

of

prefixes.

Chapter

3.

Initializing

the

authorization

API

45

Dynamic

ADI

retrieval

entitlement

service

list

v

Attribute

List

Entry:

azn_init_dynamic_adi_entitlements_service

v

Configuration

File

Entry:

dynamic-adi-entitlement-services

v

Configuration

File

Stanza:

[aznapi-configuration]

This

configurable

parameter

allows

the

administrator

to

specify

the

set

of

dynamic

ADI

retrieval

entitlement

services

that

the

authorization

engine

will

query

for

any

ADI

that

it

finds

it

still

needs

after

searching

the

client

credential,

the

application

context,

and

the

authorization

engine

context.

The

value

of

each

entry

is

a

string

containing

a

dynamic

ADI

retrieval

entitlement

service

ID.

Each

entitlement

service

specified

will

be

queried

by

the

rules

engine

if

missing

ADI

is

detected

during

an

authorization

rule

evaluation.

Entitlement

services

listed

here

must

adhere

to

the

input

and

output

specifications

for

a

dynamic

ADI

retrieval

service.

The

entitlement

services

in

the

list

are

in

the

order

defined

by

the

order

of

the

entries

in

the

configuration

file

or

initialization

attribute

list.

By

default

there

are

no

dynamic

ADI

retrieval

services

configured

in

this

manner.

For

more

information

on

the

dynamic

ADI

retrieval

service,

see

“Dynamic

ADI

retrieval

services”

on

page

110.

XMLADI

attribute

definitions

v

Attribute

List

Entry:

azn_init_xmladi_attribute_definitions

v

Configuration

File

Entry:

attribute_name

=

attribute_value

v

Configuration

File

Stanza:

[xmladi-attribute-definitions]

The

attribute

definitions

are

inserted

into

the

XMLADI

element

start

tag

to

enable

attributes

to

be

defined

for

the

entire

XMLADI

document

and

all

ADI

defined

therein.

The

programmatic

initialization

attribute

can

contain

multiple

attribute

values,

one

for

each

attribute

definition

to

be

added

to

the

XMLADI

element

start

tag.

The

attribute

definitions

are

in

the

format:

attribute_name

=

attribute_value

For

example:

[xmladi-attribute-definitions]

xmlns:myNS

=

"http://myURI.mycompany.com"

appID

=

’"Jupiter"

-

Account

Management

Web

\

Portal

Server

#1.’

The

XMLADI

element

start

tag

built

from

these

definitions

is:

<XMLADI

xmlns:myNS="http://myURI.mycompany.com"

\

appID=’"Jupiter"

-

Account

Management

Web

Portal

\

Server

#1.’>

For

more

information

on

XML

namespaces

and

how

to

configure

and

use

them,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

46

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Enabling

the

return

of

permission

information

You

can

specify

information

to

be

returned

by

the

azn_decision_access_allowed_ext()

function

call.

This

call

returns

a

pointer

to

an

attribute

list

(azn_attrlist_h_t)

named

permission_info.

This

attribute

list

contains

more

detailed

information

on

the

result

or

reasoning

behind

the

access

decision

that

was

made.

It

may

also

be

used

to

return

additional

information

that

is

applicable

to

the

authorization

decision.

For

example,

this

could

include

the

quality

of

protection

(QOP)

that

is

required

for

communication

between

client

and

server

entities.

To

enable

the

return

of

permission

information

you

must

supply

values

for

one

of

the

following:

v

Attribute

List

Entry:

azn_init_set_perminfo_attrs

v

Configuration

File

Entry:

permission-info-returned

v

Configuration

File

Stanza:

[aznapi-configuration]

You

can

specify

the

information

returned

in

the

permission_info

attribute

list

by

adding

values

to

the

azn_init_set_perminfo_attrs

attribute

during

initialization

of

the

authorization

API.

The

azn_init_set_perminfo_attrs

attribute

is

set

in

the

init_data

attribute

list.

The

init_data

attribute

list

is

passed

as

an

input

parameter

to

the

authorization

API

initialization

function,

azn_initialize().

You

can

add

multiple

attribute

values

to

azn_init_set_perminfo_attrs.

The

permission-info-returned

configuration

entry

takes

the

same

set

of

permission

information

values

as

the

initialization

attribute

does.

To

specify

multiple

values,

each

value

must

separated

from

the

next

with

a

space.

For

example:

permission-info-returned

=

azn_perminfo_wm_ulong

azn_perminfo_qop_ulong

The

defined

values

for

use

with

azn_init_set_perminfo_attrs

or

permission-info-returned

are

listed

below:

azn_acl_ext_attr_loc

azn_dynadi_target_url

azn_perminfo_all_attrs

azn_perminfo_auditlevel_ulong

azn_perminfo_dynadi_redirect_url

azn_perminfo_fail_reason

azn_perminfo_qop

azn_perminfo_qop_ulong

azn_perminfo_reason_rule_failed

azn_perminfo_rules_adi_request

azn_perminfo_stepup_level

azn_perminfo_warningmode_ulong

azn_perminfo_warningmodepermitted_ulong

azn_pop_ext_attr_loc

azn_rule_ext_attr_loc

For

a

description

of

each

of

the

above

values,

see

“Permission

information

attributes”

on

page

263.

When

using

a

remote

mode

C

authorization

client

or

the

Java

authorization

client

(PDPermission

class),

the

authorization

server,

not

the

client,

must

be

configured

to

return

permission

information.

This

is

because

only

the

authorization

server

has

the

information.

The

authorization

server

can

only

be

configured

using

the

permission-info-returned

configuration

file

entry.

The

default

configuration

file

Chapter

3.

Initializing

the

authorization

API

47

for

the

authorization

server

is

ivacld.conf.

This

configuration

file

has

the

permission-info-returned

parameter

commented

out

(disabled)

by

default:

#

#permission-info-returned

=

azn_perminfo_qop

azn_perminfo_qop_ulong

#

Uncomment

the

line

in

order

to

enable

the

return

of

permission

info

from

the

authorization

server.

48

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Configuring

event

logging

and

legacy

auditing

Tivoli

Access

Manager

provides

an

event

logging

facility.

This

is

used

for

both

the

capture

and

logging

of

system

events.

This

capture

and

logging

process

provides

event

tracking

needed

for

auditing

purposes.

The

authorization

API

clients

can

specify

settings

for

this

facility

either

by

using

a

single

configuration

file

setting

(with

multiple

values)

or

by

specifying

multiple

values

for

a

single

initialization

data

attribute.

To

enable

the

event

logging

you

must

supply

values

for

one

of

the

following:

v

Attribute

List

Entry:

azn_init_logcfg

Note:

The

attribute

azn_init_logcfg

is

not

defined

in

ogauthzn.h.

Thus,

you

should

use

the

literal

string

azn_init_logcfg

instead

of

a

reference

to

an

exported

string

variable.

v

Configuration

File

Entry:

logcfg

v

Configuration

File

Stanza:

[aznapi-configuration]

The

event

logging

facility

can

be

configured

to

capture

a

variety

of

events,

and

can

be

configured

to

specify

one

or

more

output

destinations.

For

example,

the

syntax

for

specifying

logcfg

output

to

a

file

is:

logcfg

=category:file

path=file_pathname,

flush_interval=seconds,\

rollover_size=number,log_id=logid,queue_size=number,hi_water=number,\

buffer_size=number,mode={text|binary}

For

information

on

how

to

specify

values

for

logcfg,

see

the

description

of

event

logging

in

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

Legacy

auditing

Tivoli

Access

Manager

also

supports

a

legacy

auditing

facility.

This

facility

is

a

subset

of

the

event

logging

facility.

Typically,

it

is

not

used

for

new

applications.

When

needed

for

backwards

compatibility,

the

authorization

API

can

be

configured

to

support

legacy

auditing.

The

following

table

shows

the

authorization

API

legacy

initialization

data

attributes

that

correspond

to

configuration

file

entries

for

legacy

auditing.

Table

6.

Legacy

attributes

and

configuration

file

entries

Legacy

initialization

data

attribute

Legacy

configuration

file

entry

azn_init_auditcfg

auditcfg

azn_init_auditfile

auditlog

azn_init_audit_attribute

audit-attribute

azn_init_log_size

logsize

azn_init_log_flush_interval

logflush

azn_init_logging_client_id

(none)

For

more

information

on

configuring

legacy

auditing,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

Chapter

3.

Initializing

the

authorization

API

49

Specifying

the

host

interface

on

which

to

listen

Machines

that

have

more

than

one

network

interface

card

installed

and

configured

can

have

more

than

one

hostname.

When

more

than

one

network

interface

card

is

configured,

use

this

authorization

API

initialization

attribute

to

specify

the

hostname

on

which

the

authorization

API

application

listens.

When

this

attribute

is

not

specified,

the

default

hostname

is

used.

v

Attribute

List

Entry:

azn_app_host

v

Configuration

File

Entry:

azn-app-host

v

Configuration

File

Stanza:

[aznapi-configuration]

Value

Description

<hostname>

The

hostname

on

which

the

application

is

running.

This

value

can

be

used

to

specify

a

hostname

on

machines

that

support

multiple

hostnames

(by

using

multiple

network

interface

cards).

When

this

is

not

specified,

the

default

hostname

is

used.

Note:

This

cannot

be

an

IP

address.

50

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Starting

the

authorization

service

Complete

the

following

steps:

1.

Ensure

that

the

attribute

list

init_data

has

been

created

and

filled

in,

as

described

in

the

preceding

sections.

2.

Call

azn_initialize()

to

bind

to

and

initialize

the

authorization

service.

For

example:

/*

Start

the

service

*/

status

=

azn_initialize(init_data,

&init_info);

if

(status

!=

AZN_S_COMPLETE)

return(status);

In

the

example

code

above,

azn_initialize()

returns

the

attribute

list

init_info.

This

attribute

list

is

appended

with

any

initialization

information

attributes

that

apply.

This

includes

the

AZN_C_VERSION

attribute,

which

contains

the

version

number

of

the

API

implementation.

Note:

To

re-initialize

the

API,

use

azn_shutdown()

and

then

call

azn_initialize().

When

using

this

function

on

Windows

NT,

do

not

call

it

from

dllMain().

For

more

information,

see

the

reference

page

for

“azn_initialize()”

on

page

207.

Chapter

3.

Initializing

the

authorization

API

51

52

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

4.

Using

the

authorization

API

This

chapter

contains

the

following

topics:

v

“Authenticating

an

API

application”

on

page

54

v

“Verifying

the

identity

of

a

user”

on

page

55

v

“Obtaining

user

authorization

credentials”

on

page

56

v

“Obtaining

an

authorization

decision”

on

page

59

v

“Cleaning

up

and

shutting

down”

on

page

62

v

“Working

with

credentials”

on

page

63

©

Copyright

IBM

Corp.

2000,2003

53

Authenticating

an

API

application

The

API

application

must

establish

its

own

authenticated

identity

within

the

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

secure

domain,

in

order

to

request

authorization

decisions

from

the

Tivoli

Access

Manager

authorization

service.

Before

you

run

the

authorization

API

application

for

the

first

time,

you

must

create

a

unique

identity

for

the

application

in

the

Tivoli

Access

Manager

secure

domain.

In

order

for

the

authenticated

identity

to

perform

API

checks,

the

application

must

be

a

member

of

at

least

one

of

the

following

groups:

v

ivacld-servers

This

group

membership

is

needed

for

applications

using

local

cache

mode.

v

remote-acl-users

This

group

membership

is

needed

for

applications

using

remote

cache

mode.

When

the

application

wants

to

contact

one

of

the

secure

domain

services,

it

must

first

log

in

to

the

secure

domain.

Use

the

svrsslcfg

utility

to

accomplish

the

above

tasks.

Run

this

utility

before

initializing

the

authorization

API.

The

svrsslcfg

utility

creates

a

user

identity

for

the

application,

and

configures

the

SSL

communication

between

the

application

and

the

Tivoli

Access

Manager

policy

server.

The

svrsslcfg

utility

performs

the

following

tasks:

v

Creates

a

user

identity

for

the

application

by

combining

the

server

name

with

the

local

TCP/IP

host

name.

v

Creates

an

SSL

key

file

for

that

user:

For

example,

demo_user.kdb

and

demo_user.sth.

v

Adds

the

user

ivacld-servers

group

for

a

server

type

of

local,

or

to

the

remote-acl-users

group

for

a

server

type

of

remote.

For

more

information,

including

the

svrsslcfg

syntax,

see

the

IBM

Tivoli

Access

Manager

for

e-business

Command

Reference.

54

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Verifying

the

identity

of

a

user

The

application

must

verify

the

identity

of

the

user

who

has

submitted

a

request.

The

identity

can

be

expressed

as

one

of

the

following

types

of

users:

v

Authenticated

In

this

case,

the

user’s

identity

in

the

secure

domain

is

registered

in

the

LDAP

User

registry.

The

user

is

authenticated,

and

information

about

the

user

can

be

obtained.

This

information

includes,

for

example,

the

LDAP

Distinguished

Name.

v

Unauthenticated

In

this

case,

the

user’s

identity

in

the

secure

domain

is

not

specifically

registered

in

the

LDAP

user

registry.

The

user

is

defined

to

be

unauthenticated,

and

further

information

about

the

user’s

identity

is

irrelevant

to

the

authorization

process.

Applications

can

obtain

user

identities

through

a

variety

of

methods.

These

can

include

the

use

of

a

Credentials

Acquisition

Server,

or

a

call

to

an

application-specific

method

for

querying

user

registries

and

establishing

a

security

(login)

context.

Optionally,

applications

can

use

the

Tivoli

Access

Manager

authorization

API

utility

function

azn_util_password_authenticate()

to

obtain

user

identity

information

from

the

secure

domain.

The

function

azn_util_password_authenticate()

requires

the

user

name

and

password

as

input

parameters.

Typically,

an

application

receives

a

user

name

and

password

from

the

user

who

initiated

the

access

request.

The

function

performs

a

login

using

the

supplied

user

name

and

password.

If

the

login

is

successful,

the

function

returns

the

following

information:

v

The

string

mechanism_id,

which

specifies

the

authentication

mechanism

(LDAP)

that

was

used.

v

A

pointer

to

the

buffer

authinfo.

This

buffer

contains

user

identity

information.

Note:

The

function

azn_util_password_authenticate()

does

not

obtain

a

security

(login)

context

for

the

user.

For

more

information,

see

the

reference

page

for

“azn_util_password_authenticate()”

on

page

219.

After

the

application

has

obtained

identity

information

for

the

user,

you

can

use

the

authorization

API

to

obtain

authorization

credentials

for

the

user.

Usage

tip

enforcing

user

lockout

policy

Authorization

API

clients

that

authenticate

users

sometimes

need

to

enforce

user

access

policy.

For

example,

a

local

mode

application

might

need

to

disable

(lockout)

a

user

account

after

a

specified

number

of

incorrect

login

attempts.

The

declaration

of

this

policy

can

be

placed

either

in

a

configuration

file

or

programmed

into

the

application

logic.

The

enforcement

of

some

policies,

such

as

disablement

of

a

user

account,

require

that

attributes

of

the

user

account

be

modified

within

the

user

registry.

In

order

to

modify

a

user

registry

entry,

the

application

must

have

modify

permissions

on

the

user

registry.

To

provide

these

permissions,

place

an

ACL

on

the

appropriate

objects

within

the

user

registry

to

enable

the

application

identity

(for

example,

an

LDAP

bind-id)

to

modify

those

objects.

Chapter

4.

Using

the

authorization

API

55

Obtaining

user

authorization

credentials

In

order

to

submit

an

authorization

request

to

the

Tivoli

Access

Manager

authorization

service,

an

application

must

obtain

authorization

credentials

for

the

user

making

the

request.

The

authorization

credentials

contain

user

identity

information

that

is

needed

to

make

authorization

decisions,

such

as

group

memberships

and

a

list

of

actions

or

rights

that

the

user

can

exercise.

To

obtain

credentials

for

a

user

who

has

submitted

an

access

request,

an

application

must

obtain

user

identity

information

from

the

user

registry

that

is

used

by

the

Tivoli

Access

Manager

secure

domain.

The

authorization

API

function

azn_id_get_creds()

takes

user

identity

information

as

input

parameters

and

returns

user

authorization

credentials.

The

credentials

can

then

be

submitted

to

the

authorization

service

for

an

authorization

decision.

Note:

Identity

information

can

also

be

obtained

from

a

privilege

attribute

certificate

(PAC).

See“Converting

credentials

to

the

native

format”

on

page

63.

To

obtain

a

credential,

complete

the

instructions

in

each

of

the

following

sections:

v

“Step

1

Specifying

the

authorization

authority

and

authentication

mechanism”

v

“Step

2

Specifying

user

authentication

identity”

v

“Step

3

Specifying

additional

user

information”

on

page

57

v

“Step

4

Placing

user

information

into

an

API

buffer”

on

page

57

v

“Step

5

Obtaining

authorization

credentials

for

the

user”

on

page

57

Step

1

Specifying

the

authorization

authority

and

authentication

mechanism

The

authorization

authority

is

the

name

of

the

secure

domain

into

which

the

authorization

API

client

will

be

configured.

Assign

the

appropriate

value

for

the

authorization

authority

to

a

string

of

type

azn_string_t.

This

string

is

passed

as

the

parameter

authzn_authority

to

azn_id_get_creds().

When

authzn_authority

is

NULL,

the

local

domain

specified

in

the

client’s

configuration

file

is

used.

If

it

is

specified,

then

the

authzn_authority

parameter

must

match

the

name

of

the

secure

domain

into

which

the

client

will

be

configured,

whether

this

is

the

default

Management

domain,

or

a

sub-domain

in

a

multiple

domain

environment.

For

more

information,

see

the

azn_id_get_creds()

reference

page.

The

authentication

mechanism

is

specified

in

the

mechanism_id

input

parameter.

Set

mechanism_id

to

NULL

to

specify

Tivoli

Access

Manager

authorization.

Step

2

Specifying

user

authentication

identity

For

each

user

to

be

authenticated,

information

is

loaded

into

the

data

structure

azn_authdefault_t.

If

the

user

is

authenticated,

you

must

load

the

user’s

identity

into

the

principal

string

(of

type

azn_string_t)

in

the

azn_authdefault_t

data

structure.

56

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

If

the

user

is

unauthenticated,

information

is

loaded

into

the

data

structure

azn_unauth_t.

You

do

not

have

to

load

an

identity

into

azn_unauth_t.

Step

3

Specifying

additional

user

information

When

the

application

authenticates

the

user,

the

application

can

optionally

obtain

additional

information

about

the

user.

This

additional

information

is

for

use

by

the

application

as

needed.

The

Tivoli

Access

Manager

authorization

service

does

not

use

this

information.

The

application

can

store

the

additional

user

information

in

the

data

structures

that

the

authorization

API

provides

for

each

type

of

authenticated

identity.

The

data

structures

are:

azn_authdefault_t,

and

azn_unauth_t.

The

elements

in

each

data

structure

are

character

strings,

with

the

exception

of

ipaddr,

which

is

an

integer.

Element

Description

authnmech_info

Additional

authentication

information.

This

value

can

be

any

string

that

is

useful

to

the

application.

Not

available

in

azn_unauth_t.

user_info

Additional

user

information

for

auditing

purposes.

This

string

can

contain

any

information

that

is

useful

to

the

application.

browser_info

Information

about

the

type

of

browser

through

which

the

user

has

submitted

the

request,

if

applicable.

This

string

can

contain

any

information

that

is

useful

to

the

application.

ipaddr

The

IP

address

of

the

user.

This

is

optional

information

for

use

by

the

application.

qop

The

quality

of

protection

required

for

requests

made

by

this

user.

Step

4

Placing

user

information

into

an

API

buffer

Place

the

data

structure

you

filled

out

in

“Step

2

Specifying

user

authentication

identity”

on

page

56

and

“Step

3

Specifying

additional

user

information”

into

an

authorization

API

buffer.

Complete

the

following

steps:

1.

Declare

a

buffer

of

type

azn_buffer_t:

typedef

struct

azn_buffer_desc_struct

{

size_t

length;

unsigned

char

*value;

}

azn_buffer_desc,

*azn_buffer_t;

2.

Determine

the

length

of

your

data

structure

and

assign

that

value

to

length.

3.

Set

the

pointer

value

to

point

to

the

address

of

your

data

structure.

This

buffer

is

passed

as

the

parameter

mechanism_info

to

azn_id_get_creds().

Step

5

Obtaining

authorization

credentials

for

the

user

To

obtain

authorization

credentials,

call

azn_id_get_creds()

with

the

following

input

parameters:

Chapter

4.

Using

the

authorization

API

57

Parameter

Description

authzn_authority

The

authorization

authority,

as

described

in

“Step

1

Specifying

the

authorization

authority

and

authentication

mechanism”

on

page

56.

mechanism_id

The

authentication

mechanism.

mechanism_info

User

information,

as

described

in

the

preceding

sections:

v

“Step

2

Specifying

user

authentication

identity”

on

page

56

v

“Step

3

Specifying

additional

user

information”

on

page

57

v

“Step

4

Placing

user

information

into

an

API

buffer”

on

page

57

The

azn_id_get_creds()

function

returns

a

handle

to

the

authorization

credentials

for

the

user.

The

authorization

credentials

are

contained

in

an

azn_creds_h_t

structure.

For

example,

the

following

sample

code

demonstrates

the

assigning

of

identity

information

for

a

user

authenticated

in

an

LDAP

user

registry,

and

calls

azn_id_get_creds()

to

obtain

authorization

credentials:

azn_authdefault_t

user_info;

azn_buffer_desc

buf

=

{

0,

0

};

azn_creds_h_t

creds

=

AZN_C_INVALID_HANDLE;

azn_creds_create(&creds);

/*

Specify

LDAP

user

name

*/

user_info.principal

=

“testuser”;

/*

Set

LDAP

user

information.

Note:

these

values

are

just

placeholders

*/

user_info.auth_method

=

“ldap_auth_method”;

user_info.authnmech_info

=

“ldap_authnmech_info”;

user_info.user_info

=

“ldap_user_info”;

user_info.browser_info

=

“ldap_browser_info”;

user_info.ipaddr

=

0x0a000002;

/*

Set

a

buffer

to

point

to

the

user

information

*/

buf.length

=

sizeof(user_info);

buf.value

=

(unsigned

char

*)&user_info;

/*

Obtain

an

authorization

credential.

*/

/*

Specify

the

authority

as

NULL

*/

/*

Specify

the

authentication

registry

(mech)

as

NULL

*/

status

=

azn_id_get_creds(NULL,

NULL,

&buf,

&creds);

if

(status

!=

AZN_S_COMPLETE)

{

fprintf(stderr,

“Could

not

get

creds.\n”);

continue;

}

For

more

information,

see

the

reference

page

for

“azn_id_get_creds()”

on

page

203.

Refer

also

to

the

authorization

API

demonstration

program.

The

application

is

now

ready

to

submit

the

authorization

request.

See

“Obtaining

an

authorization

decision”

on

page

59.

58

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Obtaining

an

authorization

decision

After

the

application

has

obtained

authorization

credentials

for

the

user,

the

application

passes

the

requested

operation

and

the

requested

resource

to

the

authorization

API

function

azn_decision_access_allowed().

This

function

returns

the

authorization

decision.

To

obtain

an

authorization

decision,

complete

the

instructions

in

each

of

the

following

sections:

v

“Step

1

Mapping

the

user

operation

to

a

Tivoli

Access

Manager

permission”

v

“Step

2

Mapping

the

requested

resource

to

a

protected

object”

on

page

60

v

“Step

3

Assigning

the

user

credentials

to

a

credentials

handle”

on

page

60

v

“Step

4

Building

an

attribute

list

for

additional

application

information”

on

page

60

v

“Step

5

Obtaining

an

authorization

decision”

on

page

61

Step

1

Mapping

the

user

operation

to

a

Tivoli

Access

Manager

permission

The

operation

requested

by

the

user

must

correspond

to

one

of

the

operations

for

which

a

Tivoli

Access

Manager

permission

has

been

defined.

The

operation

is

a

standard

action

supported

in

all

Tivoli

Access

Manager

secure

domains.

Examples

operations

are

azn_operation_read

and

azn_operation_traverse.

Operations

can

be

concatenated

together

to

form

an

operations

string.

Operations

are

defined

in

ogauthzn.h:

azn_operation_attach

azn_operation_bypasspop

azn_operation_bypassrule

azn_operation_browse

azn_operation_control

azn_operation_traverse

azn_operation_delegation

azn_operation_view

azn_operation_modify

azn_operation_delete

azn_operation_server_admin

azn_operation_read

azn_operation_execute

azn_operation_list_directory

azn_operation_connect

azn_operation_forward

azn_operation_password

azn_operation_create

azn_operation_add

azn_operation_trace

Alternatively,

you

can

assign

a

simple

string

to

the

operation

input

parameter.

For

example,

the

string

value

Tr

conveys

the

same

information

as

concatenating

azn_operation_traverse

and

azn_operation_read

.

Alternatively,

the

operation

can

be

a

custom

operation.

v

Assign

the

operation

to

a

string

named

operation.

v

Pass

this

string

as

an

input

parameter

to

azn_decision_access_allowed()

or

azn_decision_access_allowed_ext().

Chapter

4.

Using

the

authorization

API

59

Step

2

Mapping

the

requested

resource

to

a

protected

object

The

requested

resource

to

query

for

must

correspond

to

a

resource

that

has

been

defined

as

a

protected

object

in

the

secure

domain’s

protected

object

namespace.

The

resource

can

be

a

standard

WebSEAL

protected

resource,

such

as

a

file

in

the

Web

space.

Alternatively,

the

resource

can

be

a

custom

protected

object.

Complete

the

following

steps:

v

Assign

the

protected

object

to

the

string

protected_resource.

v

Pass

this

string

as

an

input

parameter

to

azn_decision_access_allowed().

Step

3

Assigning

the

user

credentials

to

a

credentials

handle

The

authorization

credentials

for

a

user

obtained

in

“Obtaining

user

authorization

credentials”

on

page

56

can

be

accessed

through

the

handle

returned

by

azn_id_get_creds().

These

credentials

contain

the

user’s

identity

information

and

include

information

such

as

the

user’s

group

membership

and

permitted

operations.

Complete

the

following

step:

v

Pass

the

handle

returned

by

azn_id_get_creds()

as

an

input

parameter

to

azn_decision_access_allowed().

Note:

Authorization

credentials

can

also

be

obtained

from

the

function

azn_pac_get_creds().

For

more

information,

see

“Converting

credentials

to

the

native

format”

on

page

63.

Step

4

Building

an

attribute

list

for

additional

application

information

The

Tivoli

Access

Manager

authorization

API

provides

the

extended

function

azn_decision_access_allowed_ext()

for

obtaining

an

access

decision.

This

function

extends

azn_decision_access_allowed()

by

providing

an

additional

input

parameter

and

an

additional

output

parameter.

These

parameters

can

be

used

to

supply

additional

information

as

needed

by

the

application.

The

Tivoli

Access

Manager

authorization

service

does

not

use

these

parameters

when

making

the

access

control

decision.

However,

you

can

write

external

authorization

servers

to

use

this

information.

The

parameters

consist

of

an

attribute

list.

You

can

build

an

attribute

list

of

any

length

to

hold

information

specific

to

the

application.

To

add

additional

application-specific

context,

complete

the

following

steps:

1.

Use

azn_attrlist_create()

to

create

a

new,

empty

attribute

list.

2.

Use

azn_attrlist_add_entry()

or

azn_attrlist_add_entry_buffer()

to

add

attributes.

3.

When

all

attributes

have

been

added,

assign

the

input

parameter

app_context

to

point

to

the

attribute

list.

60

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

For

more

information,

see

the

reference

page

for

“azn_decision_access_allowed_ext()”

on

page

194.

Step

5

Obtaining

an

authorization

decision

To

obtain

an

authorization

decision,

call

one

of

the

following

functions:

v

azn_decision_access_allowed()

v

azn_decision_access_allowed_ext()

If

the

API

is

operating

in

remote

cache

mode,

the

authorization

request

will

be

forwarded

to

the

Tivoli

Access

Manager

authorization

server.

The

authorization

server

makes

the

decision

and

returns

the

result.

If

the

API

is

operating

in

local

cache

mode,

the

API

uses

the

local

authorization

policy

database

replica

to

make

the

authorization

decision.

The

result

of

the

access

request

is

returned

in

the

following

output

parameter:

Type

Parameter

Description

int

permission

The

result

of

the

access

request.

Consists

of

one

of

the

following

constants:

AZN_C_PERMITTED

AZN_C_NOT_PERMITTED

The

extended

function

azn_decision_access_allowed_ext()

also

returns

the

following

information:

Type

Parameter

Description

azn_attrlist_h_t

*permission_info

Application-specific

context

information

contained

in

attribute

list.

For

more

information,

see

the

reference

pages

for

the

following

functions:

v

“azn_decision_access_allowed()”

on

page

192

v

“azn_decision_access_allowed_ext()”

on

page

194

Chapter

4.

Using

the

authorization

API

61

Cleaning

up

and

shutting

down

The

authorization

API

provides

functions

to

perform

the

following

clean

up

and

shut

down

functions:

v

“Releasing

allocated

memory”

v

“Shutting

down

the

authorization

API”

Releasing

allocated

memory

The

authorization

API

provides

the

following

functions

to

perform

the

releasing

of

memory

functions:

v

azn_attrlist_delete()

Use

this

function

to

release

memory

that

is

allocated

for

attribute

lists.

v

azn_attrlist_delete_entry()

Use

this

function

to

delete

an

entry

from

an

attribute

list.

v

azn_creds_delete()

Use

this

function

to

release

memory

that

is

allocated

for

the

azn_creds_h_t

structure

that

is

returned

by

a

call

to

azn_creds_create().

v

azn_release_buffer()

Use

this

function

to

release

memory

that

is

allocated

for

buffers

of

type

azn_buffer_t.

Buffers

of

this

type

are

used

by

some

attribute

list

functions,

and

also

by

some

of

the

credentials

handling

functions.

v

azn_release_pboj()

Use

this

function

to

release

memory

that

is

allocated

for

the

azn_pobj_t

structure

that

is

returned

by

a

call

to

azn_attrlist_entry_get_pobj_value().

v

azn_release_string()

Use

this

function

to

release

memory

allocated

for

any

strings

of

type

azn_string_t.

Many

authorization

API

functions

use

this

data

type

to

store

values

in

strings.

v

azn_release_strings()

Use

this

function

to

release

memory

allocated

for

an

array

of

strings

of

type

azn_string_t.

Shutting

down

the

authorization

API

When

an

application

has

obtained

an

authorization

decision

and

when

it

does

not

need

further

authorization

decisions,

use

azn_shutdown()

to

disconnect

from

and

shut

down

the

authorization

API.

62

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Working

with

credentials

In

addition

to

the

credentials

handling

tasks

described

earlier

in

this

chapter,

the

authorization

API

provides

functions

to

accomplish

the

following

optional

tasks:

v

“Converting

credentials

to

a

transportable

format”

v

“Converting

credentials

to

the

native

format”

v

“Creating

a

chain

of

credentials”

v

“Determining

the

number

of

credentials

in

a

credentials

chain”

on

page

64

v

“Obtaining

a

credential

from

a

chain

of

credentials”

on

page

64

v

“Modifying

the

contents

of

a

credential”

on

page

64

v

“Obtaining

an

attribute

list

from

a

credential”

on

page

65

v

“Setting

and

getting

string

attribute

values

for

a

credential”

on

page

66

v

“Comparing

two

credentials”

on

page

67

v

“Copying

a

credential”

on

page

67

Converting

credentials

to

a

transportable

format

Use

the

function

azn_creds_get_pac()

to

place

user

credentials

into

a

format

that

can

be

transported

across

a

network

to

another

application.

Use

this

function

when

you

need

to

delegate

the

authorization

decision

to

an

application

on

another

system.

Complete

the

following

steps:

1.

Set

the

input

string

pac_svc_id

to

NULL.

2.

Set

the

input

credentials

handle

creds

to

the

credentials

handle

returned

by

a

previous

call

to

azn_id_get_creds()

or

azn_pac_get_creds().

3.

Call

azn_creds_get_pac().

The

privilege

attribute

certificate

(PAC)

is

returned

in

an

output

buffer

named

pac.

This

buffer

can

be

transported

to

another

system,

where

the

function

azn_pac_get_creds()

can

be

used

to

return

the

credentials

to

a

native

format.

Converting

credentials

to

the

native

format

Use

the

function

azn_pac_get_creds()

when

an

application

receives

credentials

from

another

system

on

the

network.

Typically,

these

credentials

are

placed

into

a

buffer

by

azn_creds_get_pac().

Complete

the

following

steps:

1.

Set

the

input

string

pac_svc_id

to

NULL.

2.

Set

the

input

buffer

pac

to

the

buffer

returned

by

a

previous

call

to

azn_creds_get_pac().

3.

Call

azn_pac_get_creds().

This

function

returns

a

handle

to

a

credentials

structure

of

type

azn_creds_h_t,

for

access

by

other

authorization

API

functions.

Creating

a

chain

of

credentials

Use

the

function

azn_creds_combine

to

combine,

or

chain,

two

credentials

together.

Use

this,

for

example,

when

the

credentials

for

a

server

application

must

be

combined

with

user

credentials

in

order

to

delegate

the

authorization

decision

to

another

application.

Chapter

4.

Using

the

authorization

API

63

Complete

the

following

steps:

1.

Assign

the

credentials

handle

creds_to_prepend

to

point

to

the

credentials

of

the

initiator

of

the

request.

2.

Assign

the

credentials

handle

creds_to_add

to

point

to

the

credentials

to

be

added.

3.

Call

azn_creds_create()

to

create

a

new,

empty

credentials

structure.

4.

Call

azn_creds_combine().

The

combined

credentials

are

placed

in

a

credentials

structure

that

can

be

referenced

by

the

credentials

handle

combined_creds.

Determining

the

number

of

credentials

in

a

credentials

chain

Use

the

function

azn_creds_num_of_subjects()

to

determine

the

number

of

credentials

that

are

contained

in

a

credentials

chain.

Credentials

chains

are

created

by

the

azn_creds_combine()

function.

This

functions

takes

as

an

input

parameter

the

credentials

handle

of

the

credentials

chain,

and

returns

an

integer

containing

the

number

of

credentials.

Obtaining

a

credential

from

a

chain

of

credentials

Use

the

function

azn_creds_for_subject()

to

extract

individual

credentials

from

a

credentials

chain.

Credentials

chains

are

created

by

the

azn_creds_combine()

function.

Complete

the

following

steps:

1.

Assign

the

credentials

handle

creds

to

point

to

the

credentials

chain.

2.

Assign

the

integer

subject_index

the

index

of

the

needed

credential

within

the

credentials

chain.

The

credentials

of

the

user

who

made

the

request

are

always

stored

at

index

0.

To

retrieve

the

credentials

for

the

initiator

(user),

you

can

pass

the

constant

AZN_C_INITIATOR_INDEX

as

the

value

for

subject_index.

Use

azn_creds_num_of_subjects(),

if

necessary,

to

determine

the

number

of

credentials

in

the

chain.

3.

Call

azn_creds_for_subject().

This

function

returns

the

requested

credentials

in

the

credentials

structure

new_creds.

Modifying

the

contents

of

a

credential

Use

the

function

azn_creds_modify()

and

the

default

credential

modification

service

to

modify

a

credential

by

placing

additional

information,

contained

in

an

attribute

list,

into

the

credentials

structure.

Use

this

function

when

you

need

to

add,

delete,

or

modify

application-specific

information

in

a

user’s

credentials.

The

effect

of

this

call

is

to

replace

the

existing

credential

attribute

list

with

the

new

attribute

list

supplied.

Complete

the

following

steps:

1.

Use

the

attribute

list

functions

to

create

an

attribute

list

containing

the

information

to

be

added.

(Alternatively,

you

can

use

azn_creds_get_attrlist_for_subject()

to

obtain

a

handle

to

an

existing

attribute

list.)

Assign

the

attribute

list

handle

mod_info

to

the

new

attribute

list.

64

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

For

more

information

on

attribute

lists,

see

the

section

“Attribute

lists”

on

page

18.

2.

Set

the

credential

modification

service

mod_svc_id

to

NULL.

This

invokes

the

default

credential

modification

service,

which

replaces

the

existing

attribute

list

in

the

credential

with

the

new

attribute

list

passed

as

mod_info.

3.

Assign

the

credentials

handle

creds

to

point

to

the

credentials

to

be

modified.

4.

Call

azn_creds_modify(),

passing

the

credential

to

be

modified

in

the

creds

parameter

and

the

attribute

list

that

will

replace

the

credential’s

existing

attribute

list

in

the

mod_info

parameter.

The

modified

credentials

are

placed

in

the

credentials

structure

new_creds.

Note

that

the

following

attributes

are

considered

read-only

and

must

not

be

modified

by

azn_creds_modify():

v

azn_cred_principal_uuid

v

azn_cred_principal_name

v

azn_cred_principal_domain

v

azn_cred_version

v

azn_cred_mech_id

v

azn_cred_group_uuids

v

azn_cred_group_names

v

azn_cred_authzn_id

v

azn_cred_ldap_dn

Obtaining

an

attribute

list

from

a

credential

Use

the

function

azn_creds_get_attrlist_for_subject()

to

obtain

information,

in

the

form

of

an

attribute

list,

from

a

credential.

You

can

use

this

function

to

obtain

the

attribute

list

for

a

credential

that

is

part

of

a

credentials

chain

as

well.

Entire

attribute

lists

can

be

added

or

modified

within

the

credential

structures

by

using

the

azn_creds_modify()

function.

Single

string

attributes

can

be

set

and

retrieved

by

using

the

azn_creds_set_attr_value_string()

and

azn_creds_get_attr_value_string()

functions,

respectively.

The

authorization

API

defines

a

number

of

attributes

that

can

be

returned

in

the

attribute

list.

Some

of

the

attributes

might

not

be

present

in

an

attribute

list

according

to

the

type

of

authenticated

user

and

the

information

that

was

used

when

the

credential

was

built.

The

defined

attributes

are:

"AUTHENTICATION_LEVEL"

azn_cred_auth_method

azn_cred_authnmech_info

azn_cred_authzn_id

azn_cred_browser_info

azn_cred_group_registry_ids

azn_cred_group_uuids

azn_cred_groups

azn_cred_ip_address

azn_cred_mech_id

azn_cred_principal_domain

azn_cred_principal_name

azn_cred_principal_uuid

azn_cred_qop_info

azn_cred_registry_id

azn_cred_user_info

azn_cred_version

Chapter

4.

Using

the

authorization

API

65

For

a

description

of

each

of

the

defined

attributes,

see

“Credential

attributes”

on

page

261.

Complete

the

following

steps:

1.

Assign

the

credentials

handle

creds

to

point

to

the

credentials

chain.

2.

Assign

the

integer

subject_index

to

the

index

of

the

credential

within

the

credentials

chain.

If

the

credential

is

not

part

of

a

chain,

set

subject_index

to

0.

The

credentials

of

the

user

who

made

the

request

are

always

stored

at

index

0.

To

retrieve

the

credentials

for

the

initiator

(user),

you

can

pass

the

constant

AZN_C_INITIATOR_INDEX

as

the

value

for

subject_index.

Use

azn_creds_num_of_subjects(),

if

necessary,

to

determine

the

number

of

credentials

in

the

chain.

3.

Call

azn_attrlist_create()

to

create

a

new,

empty

attribute

list.

4.

Call

azn_creds_get_attrlist_for_subject().

The

function

returns

a

pointer

to

a

handle

to

the

attribute

list

containing

the

credential’s

attribute

information.

The

handle

is

named

creds_attrlist.

Setting

and

getting

string

attribute

values

for

a

credential

The

azn_creds_get_attr_value_string()

and

azn_creds_set_attr_value_string()

functions

are

provided

for

manipulating

a

single

string

attribute

within

a

credential.

Use

the

function

azn_creds_get_attr_value_string()

to

obtain

the

string

value

of

a

specified

attribute

in

a

credential.

This

function

accesses

the

attribute

list

for

a

specified

credential,

and

returns

the

string

value

of

the

specified

attribute.

Use

the

function

azn_creds_set_attr_value_string()

to

set

the

value

of

a

specified

attribute

in

the

user

credential.

This

function

edits

the

attribute

list

of

the

specified

credential

and

sets

the

attribute

to

the

specified

string

value.

Note

that

the

following

attributes

are

considered

read-only

and

must

not

be

modified

by

azn_creds_set_attr_value_string():

v

azn_cred_principal_uuid

v

azn_cred_principal_name

v

azn_cred_principal_domain

v

azn_cred_version

v

azn_cred_mech_id

v

azn_cred_group_uuids

v

azn_cred_group_names

v

azn_cred_authzn_id

v

azn_cred_ldap_dn

Note:

To

work

with

attribute

values

other

than

strings,

or

to

work

with

more

than

one

attribute

within

the

credential

at

a

time,

you

should

use

the

azn_creds_get_attrlist_for_subject()

and

azn_creds_modify()

functions

instead.

See

“Modifying

the

contents

of

a

credential”

on

page

64.

66

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

For

more

information,

see

the

reference

pages

for

“azn_creds_set_attr_value_string()”

on

page

190

and

“azn_creds_get_attr_value_string()”

on

page

180.

Comparing

two

credentials

Use

the

function

azn_creds_equal()

to

compare

the

contents

of

two

credentials.

1.

Identify

the

credentials

handles

(azn_creds_h_t)

for

each

credential

to

be

compared.

2.

Pass

the

credentials

handles

as

input

parameters

to

azn_creds_equal().

The

function

azn_creds_eqaul()

returns

a

boolean

value

of

type

azn_boolean_t.

The

value

is

true

if

the

credentials

are

identical

or

false

if

the

credentials

differ.

Copying

a

credential

Use

the

azn_creds_copy()

function

to

copy

the

contents

of

one

credentials

to

another,

new

credentials.

The

azn_creds_copy()

function

does

not

actually

make

another

copy

of

the

credentials,

it

merely

creates

a

new

handle

to

the

credentials.

Tivoli

Access

Manager

releases

the

storage

associated

with

the

credentials

after

the

last

handle

to

the

credentials

is

released.

1.

Identify

the

credentials

handles

(azn_creds_h_t)

for

the

credential

to

be

copied.

2.

Pass

the

credentials

handle

as

the

input

parameter

to

azn_creds_copy().

The

azn_creds_copy()

function

returns

a

new

credentials

handle

to

the

credential.

When

the

application

is

finished

using

the

new

credential,

use

azn_creds_delete()

to

release

the

handle.

The

storage

for

the

credentials

is

released

after

all

handles

have

been

released.

Note:

To

add

a

credential

to

an

existing

credential,

use

the

azn_creds_combine()

function.

Chapter

4.

Using

the

authorization

API

67

68

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

5.

Backwards

compatibility

and

application

migration

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

Base

Version

5.1

is

binary

backwards

compatible

to

existing

Tivoli

Access

Manager

Versions

4.1

and

Version

3.9.

Existing

authorization

API

clients

that

are

being

migrated

to

use

the

Tivoli

Access

Manager

Base

Version

5.1

ADK

must

run

the

svrsslcfg

utility

again.

You

should

use

the

sample

configuration

file

aznAPI.conf,

which

is

provided

with

the

authorization

API

demonstration

program,

as

the

base

to

create

the

authorization

API

configuration

file.

When

the

svrsslcfg

configuration

is

complete

you

can

merge

the

configuration

file

entries

into

the

new

aznAPI.conf

file

as

required.

Where

possible

you

may

need

to

translate

entries

from

the

configuration

file

entries

of

an

older

client

version

to

the

new

configuration

file

format.

You

might

receive

errors

for

some

interfaces

when

compiling

existing

authorization

API

clients

with

the

Tivoli

Access

Manager

Version

5.1

ADK.

This

is

because

some

of

the

authorization

API

interfaces

from

Version

3.9

and

Version

4.1

have

been

deprecated

for

Version

5.1.

The

deprecated

interfaces

are

located

in

the

azn_deprecated.h

header

file.

You

can

look

in

theazn_deprecated.h

file

to

determine

the

new

interface

that

replaces

each

deprecated

interface.

You

can

also

review

the

section

“Deprecated

API

elements”

on

page

70.

In

the

short

term,

you

can

compile

with

the

azn_deprecated.h

header

file

to

continue

to

use

the

deprecated

Version

3.9

and

Version

4.1

interfaces.

However,

you

should

switch

as

soon

as

possible

to

the

new

interfaces,

to

avoid

further

problems.

This

chapter

contains

the

following

sections:

v

“Binary

backwards

compatibility”

on

page

70

v

“Deprecated

API

elements”

on

page

70

©

Copyright

IBM

Corp.

2000,2003

69

Binary

backwards

compatibility

The

Tivoli

Access

Manager

Version

5.1

runtime

environment

supports

applications

compiled

against

the

following

Tivoli

Access

Manager

application

development

kits

(ADKs):

v

Tivoli

Access

Manager

Version

4.1

v

Tivoli

Access

Manager

Version

3.9

Deprecated

API

elements

This

section

describes

elements

of

the

authorization

API

that

have

been

deprecated.

The

deprecated

elements

are

supported

for

backwards

compatibility

in

Tivoli

Access

Manager

Version

5.1.

Application

developers

should

not

use

any

deprecated

elements

in

new

applications

Deprecated

attributes

for

Version

5.1

Deprecated

attribute

Replacement

attribute

azn_cred_group_names

azn_cred_groups

azn_cred_ldap_dn

azn_cred_group_registry_ids

azn_pac_svc_dce_epac

none

azn_perminfo_qop_uint

azn_perminfo_qop_ulong

azn_perminfo_qop_uint_none

azn_perminfo_qop_value_none

azn_perminfo_qop_uint_integrity

azn_perminfo_qop_value_integrity

azn_perminfo_qop_uint_privacy

azn_perminfo_qop_value_privacy

azn_perminfo_al_ulong

azn_perminfo_auditlevel_ulong

azn_perminfo_wm_ulong

azn_perminfo_warningmode_ulong

azn_perminfo_wm_permitted_ulong

azn_perminfo_warmingmodepermitted_ulong

unsigned

int

azn_perminfo_al_none

azn_perminfo_auditlevel_none

unsigned

int

azn_perminfo_al_permit

azn_perminfo_auditlevel_permit

unsigned

int

azn_perminfo_al_deny

azn_perminfo_auditlevel_deny

unsigned

int

azn_perminfo_al_error

azn_perminfo_auditlevel_error

unsigned

int

azn_perminfo_al_admin

azn_perminfo_auditlevel_admin

unsigned

int

azn_perminfo_al_all

azn_perminfo_auditlevel_all

IV_DCE

none

IV_LDAP

none

IV_URAF

none

IV_UNAUTH

none

Operation

attributes

Deprecated

Replacement

azn_operation_bypasstod

azn_operation_bypasspop

70

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Permission

info

attribute

values

The

following

values

for

the

azn_init_set_perminfo_attrs

attribute

have

been

deprecated:

v

azn_perminfo_wm

Replaced

by

azn_perminfo_wm_ulong.

v

azn_perminfo_wm_permitted

Replaced

by

azn_perminfo_wm_permitted_ulong

v

azn_perminfo_al

Replaced

by

azn_perminfo_al_ulong

The

above

attributes

are

passed

as

input

parameters

to

azn_initialize().

Each

of

the

deprecated

attributes

has

a

corresponding

attribute

that

is

returned

by

the

permission_info

output

parameter

of

the

azn_decision_access_allowed_ext()

function

call.

The

corresponding

attributes

have

been

deprecated

also.

The

deprecated

attributes

do

not

work

when

the

remote

authorization

API

client

and

the

Authorization

server

are

on

operating

system

platforms

that

implement

different

Endian

ordering.

Remote

authorization

API

clients

no

longer

receive

the

azn_perminfo_qop

and

azn_perminfo_qop_int

attributes

by

default.

To

enable

this

support,

you

must

specify

these

attributes

in

the

authorization

server’s

configuration

file

ivacld.conf.

To

specify

these

attributes,

uncomment

the

following

line

in

the

configuration

file:

#permission-info-returned

=

azn_perminfo_qop

azn_perminfo_qop_ulong

Initialization

attributes

The

following

initialization

attribute

has

been

deprecated:

v

Attribute

List

Entry:

azn_init_master_dn

v

Configuration

File

Entry:

master-dn

The

configuration

file

entry

was

located

in

the[manager]

stanza.

When

specifying

communication

attributes

for

the

policy

server,

it

is

no

longer

necessary

to

supply

the

policy

server

distinguished

name.

Deprecated

API

for

comparing

credentials

The

API

for

comparing

credentials

have

been

deprecated.

v

azn_creds_compare()

The

azn_creds_compare()

API

has

been

replaced

by

azn_creds_equal().

You

should

use

azn_creds_equal()

because

it

returns

an

azn_status_t

return

code,

which

can

be

used

to

handle

API

execution

failures.

Obtaining

the

user’s

authorization

identification

The

new

attribute

azn_cred_authzn_id

replaces

the

following

attributes:

v

azn_cred_dce_name

v

azn_cred_uraf_name

The

attribute

azn_cred_ldap_dn

remains

a

valid

attribute

specific

to

LDAP

but

does

not

now

perform

the

same

function

as

azn_cred_authzn_id.

The

Chapter

5.

Backwards

compatibility

and

application

migration

71

azn_cred_ldap_dn

attribute

is

now,

for

LDAP

credentials

only,

defined

to

be

the

LDAP

Distinguished

Name

(DN)

of

the

principal

Authorization

API

initialization

attributes

The

following

attributes

have

been

deprecated.

These

attributes

formerly

were

passed

as

parameters

to

azn_initialize().

v

azn_init_namespace_location

v

azn_init_tcp_port

v

azn_init_udp_port

v

azn_init_qop

v

azn_init_remote_ns_loc

v

azn_init_max_handle_groups

The

following

configuration

file

entries

have

been

deprecated.

These

configuration

file

entries

correspond

to

each

of

the

attributes

in

the

list

above.

v

namespace-location

v

tcp-port

v

udp-port

v

remote-qop

v

remote-ns-loc

v

max-handle-groups

DCE

authentication

APIs

The

following

DCE

authentication

APIs

have

been

deprecated:

v

azn_util_server_authenticate()

v

azn_util_client_authenticate()

When

called,

these

functions

now

return

the

error

code

AZN_S_UNIMPLEMENTED_FUNCTION.

Applications

are

now

authenticated

as

part

of

azn_initialize().

User

registry

information

The

new

data

structure

azn_authdefault_t

contains

credential

and

other

information

used

within

the

Tivoli

Access

Manager

secure

domain.

This

data

structure

replaces

the

following

deprecated

data

structures:

v

azn_authdce_t

v

azn_authldap_t

v

azn_authuraf_t

Deprecated

return

codes

The

following

minor

error

codes

have

been

deprecated:

v

AZN_ENT_PDPOBJ_INVALID_SVCINFO_HDL

v

AZN_ENT_PDPOBJ_INVALID_ARG_COUNT

v

AZN_ENT_PDPOBJ_ARG_ARRAY

v

AZN_ENT_PDPOBJ_OUT_OF_MEMORY

v

AZN_ENT_PDPOBJ_INVALID_ARGUMENT

v

AZN_PAC_EPAC_INVALID_SVCINFO_HDL

72

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_PAC_EPAC_INVALID_ARG_COUNT

v

AZN_PAC_EPAC_ARG_ARRAY

v

AZN_PAC_EPAC_OUT_OF_MEMORY

v

AZN_PAC_EPAC_INVALID_ARGUMENT

The

following

return

codes

have

been

replaced

by

major

error

codes

defined

in

ogauthzn.h.

v

AZN_S_SVC_ENT_INVALID_SVCINFO_HDL

v

AZN_S_SVC_ENT_INVALID_ARG_COUNT

v

AZN_S_SVC_ENT_ARG_ARRAY

v

AZN_S_SVC_ENT_OUT_OF_MEMORY

v

AZN_S_SVC_ENT_INVALID_ARGUMENT

v

AZN_S_SVC_PAC_INVALID_SVCINFO_HDL

v

AZN_S_SVC_PAC_INVALID_ARG_COUNT

v

AZN_S_SVC_PAC_ARG_ARRAY

v

AZN_S_SVC_PAC_OUT_OF_MEMORY

v

AZN_S_SVC_PAC_INVALID_ARGUMENT

Chapter

5.

Backwards

compatibility

and

application

migration

73

74

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

6.

Authorization

service

plug-ins

The

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

API

supports

a

service

plug-in

model.

This

model

enables

developers

to

write

plug-in

modules

that

extend

the

capabilities

of

the

Tivoli

Access

Manager

authorization

service.

Developers

of

third

party

applications

can

use

authorization

API

functions

that

access

the

service

plug-in

interface

to

perform

authorization

operations

that

are

specific

to

the

Tivoli

Access

Manager

secure

domain.

This

chapter

contains

the

following

sections:

v

“Service

plug-in

architecture”

on

page

76

v

“Implementing

a

service

plug-in”

on

page

81

v

“Supplied

implementations

for

service

plug-ins”

on

page

96

©

Copyright

IBM

Corp.

2000,2003

75

Service

plug-in

architecture

The

Authorization

service

plug-in

Architecture

features

the

following

objects:

v

Authorization

service

plug-in

dispatcher

v

Service

plug-in

modules

v

Calling

applications

When

an

external

application

needs

authorization

information,

it

sends

a

request

to

the

service

dispatcher.

The

service

dispatcher

vectors

the

request

to

the

appropriate

service

plug-in.

The

architecture

for

each

type

of

service

plug-in

may

expand

the

architecture

model

illustrated

above.

For

example,

the

administration

service

presents

some

extensions,

as

shown

in

Figure

4

on

page

125.

Access ManagerPolicy Server

Access Manager Administration API

pdadmin

AccessManager

Web PortalManager

UserApplication

or GUI

CredentialsModification

ServicePlug-in

databasedatabase

PrivilegeAttribute

CertificateServicePlug-in

EntitlementsServicePlug-in

ExternalAuthorization

ServicePlug-in

AdministrationServicePlug-in

User Application

Authorization API Client

Service Dispatcher

Authorization APIAdministration

Service APIInterface

AuthorizationEngine

Figure

3.

Authorization

service

plug-in

Architecture

76

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

authorization

service

dispatcher

The

authorization

service

dispatcher

is

a

service

of

the

authorization

API

library.

The

dispatcher

is

the

management

layer

between

authorization

API

interfaces

and

the

service

plug-in

modules.

The

dispatcher

manages

the

location,

configuration

and

loading

of

available

service

plug-ins.

The

service

dispatcher

performs

the

following

tasks:

v

Initializes

each

configured

service

plug-in.

v

Directs

authorization

API

interface

calls

to

the

specified

service

plug-in.

v

Receives

returned

information

from

the

service

plug-in

and

returns

it

to

the

calling

application.

v

Shuts

down

each

configured

service

plug-in

when

the

authorization

API

is

shut

down.

Authorization

service

plug-ins

Authorization

service

plug-ins

are

shared

libraries

written

by

application

developers.

Developers

create

these

libraries

to

implement

a

domain-specific

task

for

the

domain-specific

application.

The

types

of

data

passed

between

the

service

plug-in

and

the

application

are

also

domain-specific.

This

means

that

the

only

restrictions

on

the

data

types

are

the

parameter

definitions

in

the

authorization

API

service

functions.

The

data

can

be

in

a

format

that

is

unknown

to

the

Tivoli

Access

Manager

authorization

server.

The

data

is

passed

unchanged

through

the

authorization

service

dispatcher

to

the

authorization

service

plug-ins.

Authorization

service

plug-ins

are

identified

by

a

unique

identification

number

(ID).

The

service

dispatcher

uses

the

unique

ID

number

to

load

the

service

plug-in.

The

service

dispatcher

can

optionally

pass

initialization

parameters

to

the

service

plug-in.

The

service

plug-in

can

optionally

return

service

information,

such

as

the

plug-in

version

number,

to

the

service

dispatcher.

Calling

applications

Applications

may

choose

to

use

information

received

from

service

plug-ins

to

make

authorization

decisions

without

requiring

access

to

databases

maintained

by

the

Tivoli

Access

Manager

authorization

server.

In

general,

the

service

plug-in

framework

operates

independently

from

the

authorization

functionality.

The

exception

to

this

is

External

Authorization

Services

which

can

only

be

invoked

in

the

course

of

making

an

access

decision

from

an

azn_decision_*

interface.

The

application

invokes

an

authorization

API

function

that

is

specific

to

the

type

of

service.

For

example,

to

obtain

entitlements

information,

the

calling

application

calls

azn_entitlement_get_entitlements().

The

API

call

is

processed

by

the

service

dispatcher

and

forwarded

to

the

appropriate

service

plug-in.

The

service

performs

basic

error

checking

on

the

passed

parameters,

to

ensure

that

all

handles

are

valid.

Handles

can

be

either

input

parameters

or

output

parameters.

An

input

parameter

is

valid

when

the

handle

was

either:

v

Created

by

a

call

to

azn_creds_create()

v

Created

by

a

call

to

azn_attrlist_create()

v

Returned

as

output

from

an

authorization

API

function

Chapter

6.

Authorization

service

plug-ins

77

If

the

handle

is

an

output

parameter,

then

its

valid

values

also

include

an

initialization

to

AZN_C_INVALID_HANDLE.

The

following

table

lists

the

handles

that

must

be

valid:

Service

API

Function

Invoked

By

the

Calling

Application

Handle

Entitlements

azn_svc_entitlement_get_entitlements()

entitlements

Output

parameter.

Credentials

Modification

azn_svc_creds_modify()

creds

Input

parameter.

new_creds

Output

parameter.

Privilege

Attribute

Certificate

azn_svc_pac_get_creds()

new_creds

Output

parameter.

azn_svc_creds_get_pac()

pac

Output

parameter.

Administration

ivadmin_protobj_get2()

ivadmin_protobj_list3()

ivadmin_server_gettasklist()

ivadmin_server_performtask()

creds

indata

outdata

The

creds

and

indata

parameters

are

input

parameters.

The

outdata

parameter

is

an

output

parameter.

External

authorization

azn_svc_decision_access_allowed_ext()

creds

app_context

permission_info

The

creds

and

app_context

parameters

are

input

parameters.

The

permission_info

parameter

is

an

output

parameter.

Applications

are

responsible

for

initializing

and

shutting

down

the

authorization

API.

To

do

this,

applications

call

the

authorization

API

functions

azn_initialize()

and

azn_shutdown().

These

functions

call

the

appropriate

functions

for

initializing

and

shutting

down

the

service

plug-ins.

For

some

services,

Tivoli

Access

Manager

provides

a

default

service.

For

all

other

services,

the

application

must

specify

a

service

ID

as

a

parameter

to

the

appropriate

API

service

function

interface.

For

example,

custom

entitlement

services

can

be

invoked

from

an

application

by

calling

the

azn_entitlement_get_entitlements()

API

interface

with

the

service

ID

of

the

required

entitlement

service.

Authorization

service

plug-ins

automatically

inherit

the

codeset

of

the

application

because

they

are

loaded

into

the

address

space

of

the

authorization

client

78

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

application.

The

service

plug-ins

cannot

run

in

a

different

codeset

to

the

application

that

is

loading

them.

Authorization

services

can

determine

the

codeset

of

the

calling

application

from

the

value

of

the

azn_svc_init_code_set

initialization

attribute.

This

attribute

is

passed

to

the

service

plug-in

by

the

service

dispatcher

at

initialization

time.

The

service

plug-in

receives

this

attribute

in

the

svcInit

attribute

list

passed

to

its

azn_svc_initialize()

interface.

Supported

types

of

service

plug-ins

The

authorization

service

supports

these

types

of

service

plug-ins:

v

Entitlement

service

v

Credentials

modification

service

v

Privilege

attribute

certificate

(PAC)

service

v

Administration

service

v

External

authorization

service

The

authorization

API

provides

common

initialization

and

shutdown

interface

calls

for

use

by

the

service

plug-ins.

The

authorization

API

also

provides

additional

interfaces

that

are

specific

to

each

of

the

service

plug-ins.

Entitlement

services

An

entitlement

service

plug-in

enables

domain-specific

authorization

API

applications

to

retrieve

the

entitlements

for

a

user

from

a

domain-specific

policy

repository.

The

application

can

use

this

entitlements

information

as

needed.

For

example:

v

An

application

can

allow

or

deny

a

user

request

for

access

to

a

protected

action

or

protected

resource,

based

on

the

user’s

entitlements.

v

A

graphical

user

interface

application

can

use

entitlements

information

to

construct

a

graphical

view

of

the

Tivoli

Access

Manager

secure

domain

that

contains

only

those

protected

objects

that

the

user

is

authorized

to

view.

Tivoli

Access

Manager

5.1

also

supports

two

sub-classes

of

entitlement

service

known

as

the

dynamic

ADI

retrieval

service

and

the

credential

attribute

service.

For

more

information

on

dynamic

ADI

retrieval

services,

see

“Dynamic

ADI

retrieval

services”

on

page

110.

For

information

on

the

credential

attribute

entitlement

service,

see

“Credential

attributes

entitlement

service”

on

page

112

Credentials

modification

service

A

credentials

modification

service

plug-in

enables

domain-specific

authorization

API

applications

to

perform

modifications

on

a

Tivoli

Access

Manager

credential.

The

credentials

modification

service

can

then

return

this

modified

credential

for

use

by

the

calling

application.

Applications

can

use

this

service

to

add

additional

information

to

a

user’s

credential.

For

example,

this

additional

information

could

include

the

user’s

credit

card

number

and

the

user’s

credit

limit.

Privilege

attribute

certificate

service

A

privilege

attribute

certificate

(PAC)

service

plug-in

gives

domain-specific

authorization

API

applications

the

ability

to

move

Tivoli

Access

Manager

credentials

back

and

forth

between

the

native

Tivoli

Access

Manager

credentials

format

and

an

alternate

format

called

privilege

attribute

certificates

(PAC).

Applications

can

convert

user

credentials

to

PACs

for

use

within

other

authorization

domains.

Applications

can

then

pass

the

PACs

to

a

server

in

another

authorization

domain

and

perform

an

operation.

For

example,

the

default

PAC

service

supplied

with

the

authorization

API

converts

a

Tivoli

Access

Manager

Chapter

6.

Authorization

service

plug-ins

79

credential

into

a

proprietary

flattened

text

format

for

transmission

over

text-based

transmission

mediums

like

HTML.

Customers

may

also

write

a

PAC

service

implementation

to

transform

the

attributes

in

Tivoli

Access

Manager

credentials

into

a

SAML

assertion,

an

attribute

certificate,

or

some

other

standardized

PAC

format

used

by

other

elements

of

the

business

model.

Administration

service

An

administration

service

plug-in

enables

applications

to

perform

application-specific

administration

tasks

on

protected

object

resources

that

are

secured

in

the

Tivoli

Access

Manager

secure

domain.

The

administration

service

provides

functions

that

enable

a

plug-in

to

obtain

the

contents

of

a

defined

portion

of

the

protected

object

hierarchy.

Additional

functions

enable

a

plug-in

to

define

application-specific

administration

tasks,

and

to

return

commands

that

perform

those

tasks.

The

administration

service

plug-in

is

accessed

by

a

calling

application

that

sends

Tivoli

Access

Manager

administration

API

calls.

The

calling

application

can

be

either

a

administrative

utility

such

as

the

Tivoli

Access

Manager

pdadmin

command

or

the

Tivoli

Access

Manager

Web

Portal

Manager,

or

can

be

a

custom-built

application.

The

administration

service

maps

the

administration

API

calls

to

the

corresponding

administration

service

API

calls,

and

carries

out

the

requested

action.

External

authorization

service

An

external

authorization

service

plug-in

is

an

optional

extension

of

the

Tivoli

Access

Manager

authorization

service

that

allows

you

to

impose

additional

authorization

controls

and

conditions.

You

can

use

an

external

authorization

service

plug-in

to

force

authorization

decisions

to

be

made

based

on

application-specific

criteria

that

are

not

known

to

the

Tivoli

Access

Manager

authorization

service.

80

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Implementing

a

service

plug-in

This

section

describes

how

to

implement

a

service

plug-in.

The

service

plug-in

architecture

supports

standard

methods

for

initialization,

configuration,

error

handling

and

shutdown.

Each

service

plug-in

requires

implementation

of

interfaces

that

are

specific

to

the

service

type.

This

section

contains

the

following

topics:

v

“Initialization

and

configuration

of

service

plug-ins”

on

page

82

v

“Implementing

service

interfaces”

on

page

86

v

“Using

error

codes”

on

page

88

v

“Shut

down”

on

page

92

v

“Example

service

source

code”

on

page

93

Chapter

6.

Authorization

service

plug-ins

81

Initialization

and

configuration

of

service

plug-ins

Applications

initialize

the

authorization

API

by

calling

azn_initialize().

This

function

checks

the

services

stanzas

in

either

the

specified

authorization

configuration

file

or

in

data

contained

in

the

init_data

attribute

list

parameter.

When

a

service

is

defined,

azn_initialize()

loads

the

service

plug-in

and

calls

the

azn_svc_initialize()

interface

of

the

plug-in.

The

azn_svc_initialize()

interface

contains

parameters

named

argc

and

argv.

When

the

azn_svc_initialize()

interface

is

called

by

the

authorization

API

runtime,

these

parameters

contain

arguments

to

the

service

plug-in

specified

in

the

service

definition

within

the

configuration

file.

The

service

definition

defines

all

text

after

the

character

&

to

be

initialization

parameters.

Unlike

the

C

language

argv,

the

argv[0]

array

entry

is

the

first

parameter,

and

not

the

name

of

the

service

plug-in.

The

azn_svc_initialize()

interface

must

also

take

the

svc_init

input

parameter,

which

specifies

an

attribute

list.

The

service

dispatcher

may

use

the

attribute

list

to

pass

additional

information

to

the

service

plug-in.

Note:

Currently,

there

are

no

initialization

attributes

defined

for

the

svc_init

parameter.

The

service

plug-in

can,

but

is

not

required

to,

return

information

to

the

service

dispatcher

through

the

optional

output

parameter

svc_info.

This

parameter

specifies

an

attribute

list

that

can

be

used

to

return

information,

such

as

the

version

number,

that

is

specific

to

the

service

plug-in.

For

more

information,

see

the

reference

page

for

“azn_svc_initialize()”

on

page

244.

Constructing

a

service

definition

You

can

deploy

an

authorization

service

plug-in

by

registering

it

with

the

authorization

service.

To

register

a

service

plug-in,

construct

a

service

definition.

The

service

definition

can

be

entered

into

a

configuration

file,

or

passed

in

programmatically

to

azn_svc_initialize().

To

construct

a

service

definition,

you

must

define

several

elements

and

then

combine

them

into

a

service

definition.

To

do

this,

complete

the

following

tasks:

1.

Specifying

a

service

ID

The

service

ID

is

a

unique

string

that

identifies

the

service

to

the

calling

application.

The

service

ID

can

be

any

string

that

is

accepted

as

a

valid

key

name

by

the

stanza

file

parsing

code.

The

service

ID

is

case

insensitive.

2.

Specifying

the

location

of

the

plug-in

library

The

plug-in

location

is

the

fully

qualified

path

name

for

the

shared

library

or

DLL

module

that

contains

the

plug-in

for

the

given

service

ID.

The

fully

qualified

path

name

is

case

sensitive.

If

the

library

or

DLL

is

located

in

a

directory

that

is

normally

searched

for

system

libraries

or

DLLs,

you

can

just

use

the

library

name.

Examples

of

this

type

of

location

are

/usr/lib

on

UNIX

systems

and

%PATH%

on

Windows

NT

systems.

You

can

specify

a

“short

form”

library

name

if

you

want

the

library

name

to

be

platform

independent.

This

enables

the

library

to

be

loaded

on

any

supported

Tivoli

Access

Manager

platform.

The

authorization

API

will

prepend

and

append

the

library

with

known

library

prefixes

and

suffixes,

and

search

for

each

possibility

in

turn.

82

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

For

example,

the

authorization

API

will

search

for

a

library

with

the

short

form

name

of

azn_ent_user

by

looking

for

each

of

the

following

files:

Platform

Library

File

Name

Windows

NT

azn_ent_user.dll

AIX

libazn_ent_user.so,

libazn_ent_user.a

Solaris

libazn_ent_user.so

HP/UX

libazn_ent_user.sl

3.

Specifying

plug-in

parameters

The

entry

of

additional

parameters

is

optional.

The

azn_svc_initialize()

function

can

pass

these

parameters

to

the

service

plug-in

as

initialization

information

in

the

form

of

arguments.

To

add

optional

initialization

parameters

to

the

service

definition,

insert

the

&

character

and

then

specify

the

arguments.

4.

Building

a

service

definition

Each

service

plug-in

entry

uses

the

following

syntax:

<service-id>

=

<plug-in

location>

[

&

<plug-in

parameters>

]

Parameters

specified

after

the

ampersand

(&)

are

passed

to

the

service

plug-in’s

shared

library.

The

shared

library

takes

the

remainder

of

the

string

following

the

ampersand

&,

breaks

the

string

up

into

white

space

separated

tokens,

and

passes

the

tokens

directly

to

the

administration

service’s

initialization

interface,

azn_svc_initialize(),

in

the

argv

array

parameter.

The

number

of

strings

in

the

argv

array

is

indicated

by

the

argc

function

parameter.

Parameters

specified

before

the

&

are

processed

by

the

authorization

API.

For

example,

the

external

authorization

service

can

have

an

optional

weight

parameter,

and

the

administration

service

can

optionally

take

the

name

of

a

protected

object

hierarchy

name.

The

following

line

is

an

example

entry

for

an

entitlement

service

plug-in:

entsvc

=

/lib/libentsvc.so

&

-server

barney

In

the

above

example:

v

The

service

ID

is

entsvc.

v

The

plug-in

location

is

/lib/libentsvc.so

v

The

optional

arguments

are

-server

barney.

In

this

example,

the

optional

arguments

tell

the

service

plug-in

the

name

of

the

server

where

the

plug-in

executes.

After

constructing

your

service

definition,

choose

one

of

the

following

methods

for

registering

your

service

definition:

v

“Configuring

a

service

by

using

a

configuration

file”

on

page

83

v

“Configuring

a

service

programmatically”

on

page

84

Configuring

a

service

by

using

a

configuration

file

The

Tivoli

Access

Manager

authorization

service

recognizes

and

registers

service

plug-ins

by

reading

entries

in

the

authorization

API

client

configuration

file.

Chapter

6.

Authorization

service

plug-ins

83

When

the

application

initializes

the

authorization

API,

the

authorization

server

parses

the

configuration

file.

The

dispatcher

resolves

the

location

of

each

service

plug-in,

and

loads

each

service

plug-in.

The

azn_svc_initialize()

function

returns

an

error

if

a

service

plug-in

is

not

configured

correctly

or

if

the

service

plug-in

module

cannot

be

located.

Each

type

of

service

has

a

separate

section

within

the

configuration

file.

The

default

configuration

file

contains

the

following

entries:

Entry

Service

Type

[aznapi-entitlement-services]

entitlement

service

plug-ins

[aznapi-pac-services]

Privilege

attribute

certificate

service

plug-ins

[aznapi-cred-modification-services]

Credentials

modification

service

plug-ins

[aznapi-admin-services]

Administration

service

plug-ins

[aznapi-extern-authzn-services]

External

Authorization

service

plug-ins

Configuring

a

service

programmatically

You

can

use

the

init_data

input

parameter

to

pass

a

service

definition

to

azn_initialize().

Service

definitions

that

are

defined

programmatically

do

not

have

to

be

defined

in

the

configuration

file.

To

use

init_data,

build

an

attribute

list

that

contains

the

service

definition

entries.

The

file

ogauthzn.h

defines

the

following

strings

to

use

for

the

attribute

list

names

for

each

type

of

service.

/*

Entitlement

service

definition

attribute

*/

AZN_DECLSPEC

azn_string_t

azn_init_ent_svc;

/*

PAC

service

definition

attribute

*/

AZN_DECLSPEC

azn_string_t

azn_init_pac_svc;

/*

Credential

modification

service

definition

attribute

*/

AZN_DECLSPEC

azn_string_t

azn_init_cred_mod_svc;

/*

Administration

service

definition

attribute

*/

AZN_EXTSPEC

azn_string_t

azn_init_admin_svc;

/*

External

authorization

service

definition

attribute

*/

AZN_EXTSPEC

azn_string_t

azn_init_extern_authzn_svc;

Use

each

of

the

above

attributes

to

define

a

service

of

that

particular

type.

The

format

of

the

string

attribute

values

is

described

in

“Constructing

a

service

definition”

on

page

82.

Each

part

of

service

definition,

such

as

<service

id>,

represents

a

separate

string

value

for

the

attribute.

Each

attribute

can

have

multiple

service

definitions.

Use

the

function

azn_attrlist_add_entry()

to

add

the

attribute

and

string

values

to

the

attribute

list.

The

following

example

shows

source

code

for

configuring

an

entitlement

service

programmatically.

azn_status_t

status;

azn_attrlist_h_t

init_data

=

AZN_C_INVALID_HANDLE;

azn_attrlist_h_t

init_info

=

AZN_C_INVALID_HANDLE;

84

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_string_t

service_entry;

azn_attrlist_create(&init_data);

azn_attrlist_create(&init_info);

/*

*

Load

an

entitlement

service

programmatically.

The

service

*

entry

will

load

the

DLL

“mysvc”

and

associate

it

with

the

*

service

ID

“MYSVC”.

The

dispatcher

will

automatically

search

*

the

library

search

path

for

the

platform

specific

DLL

name

*

variations

of

this

name.

On

NT:

mysvc.dll,

and

on

Unix:

*

libmysvc.so.

The

parameters

-server

and

-port

will

be

passed

*

to

the

azn_svc_initialize()

interface

of

the

service

in

the

*

argv

array.

*/

service_entry

=

“MYSVC=mysvc

&

-server

barney

-port

1234";

status

=

azn_attrlist_add_entry(init_data,

azn_init_ent_svc,

service_entry);

if

(status

!=

AZN_S_COMPLETE)

{

fprintf(stderr,

“azn_attrlist_add_entry_failed:

[%08X:%08X]\n”,

azn_error_major(status),

azn_error_minor(status));

exit

-1;

}

/*

*

Call

initialize

*/

status

=

azn_initialize(init_data,

&init_info);

if

(status

!=

AZN_S_COMPLETE)

{

fprintf(stderr,

“\nazn_initialize

failed:

[%08X:%08X]\n”,

azn_error_major(status),

azn_error_minor(status));

exit

-1;

}

Chapter

6.

Authorization

service

plug-ins

85

Implementing

service

interfaces

The

implementation

of

a

service

plug-in

consists

of

building

a

shared

library.

The

shared

library

must

contain

interfaces

that

are

specific

to

the

type

of

service.

These

interfaces

perform

the

work

that

is

specific

to

the

service.

A

calling

application

sends

a

request

to

the

authorization

API,

which

vectors

the

request

to

the

appropriate

service

plug-in.

The

service

plug-in

shared

library

must

contain

an

implementation

of

the

authorization

API

interface

that

will

perform

the

tasks

specific

to

the

service

plug-in.

The

following

table

shows

the

authorization

API

interface

that

is

invoked

by

the

calling

application,

and

the

corresponding

authorization

API

interface

that

is

implemented

in

the

service

plug-in

shared

library.

Service

API

function

invoked

by

the

calling

application

Function

implemented

by

the

service

plug-in

Entitlement

service

azn_entitlement_get_entitlements()

azn_svc_entitlement_get_entitlements()

Credentials

modification

service

azn_creds_modify()

azn_svc_creds_modify()

Privilege

attribute

certificate

service

azn_creds_get_pac()

azn_svc_creds_get_pac()

azn_pac_get_creds()

azn_svc_pac_get_creds()

Administration

service

ivadmin_protobj_get2()

azn_admin_get_object()

ivadmin_protobj_list3()

azn_admin_get_objectlist()

ivadmin_server_gettasklist()

azn_admin_get_tasklist()

ivadmin_server_performtask()

azn_admin_perform_task()

External

authorization

service

azn_decision_access_allowed()

azn_decision_access_allowed_ext()

azn_svc_decision_access_allowed_ext()

Note

that

the

name

of

the

authorization

API

function

that

is

invoked

by

the

calling

application

and

the

name

of

the

authorization

API

function

that

is

invoked

by

the

service

plug-in

shared

library

are

often

the

same.

Note,

however,

that

these

are

two

separate

implementations

of

the

interface

(function).

The

service

plug-in

shared

library

implements

its

own

version

of

the

interface,

in

order

to

perform

service

type-specific

tasks.

For

example,

calling

applications

often

call

azn_decision_access_allowed_ext()

to

request

an

authorization

decision.

When

the

authorization

API

has

been

configured

to

recognize

an

external

authorization

service,

this

call

to

azn_decision_access_allowed_ext()

is

routed

through

the

service

dispatcher

to

the

appropriate

external

authorization

service

plug-in

shared

library.

Within

this

library

the

plug-in

developer

will

have

implemented

a

local

version

of

azn_svc_decision_access_allowed_ext()

that

can

make

authorization

decisions

based

on

conditions

or

rules

that

are

potentially

unknown

to

the

core

Tivoli

Access

Manager

authorization

engine.

As

long

as

the

implementation

of

the

interface

within

the

service

plug-in

satisfies

the

interface

(function)

signature

of

the

authorization

API

function,

the

service

plug-in

shared

library

can

augment

the

default

authorization

process

with

code

specific

to

the

plug-in.

86

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Note

that

the

interfaces

described

in

this

section

are

in

addition

to

the

interfaces

that

are

generic

to

all

types

of

service

plug-ins.

These

generic

interfaces

include

initialization

and

shutdown.

Chapter

6.

Authorization

service

plug-ins

87

Using

error

codes

The

authorization

API

service

plug-in

interface

defines

a

number

of

major

error

codes.

The

interface

also

defines

a

minor

error

code

mask

and

an

error

code

creation

utility

which

service

plug-ins

must

use

to

construct

error

codes.

Use

of

this

error

mask

ensures

that

the

32

bit

major

and

minor

error

codes

are

correctly

translated

to

a

32

bit

error

code

for

return

to

the

calling

application.

The

calling

application

parses

the

returned

error

code

into

its

major

and

minor

error

code

components

by

the

using

the

azn_error_major()

and

azn_error_minor()

function

calls.

Developers

of

service

plug-ins

should

use

the

authorization

API

utility

function

azn_util_errcode()

to

construct

valid

error

codes

to

return

to

the

calling

application.

The

function

azn_util_errcode()

takes

major

and

minor

integer

error

code

values

and

converts

them

in

to

an

azn_status_t

value.

The

minor

error

code

must

be

defined

as

described

in

“Minor

error

codes”

on

page

90.

Major

error

codes

Authorization

service

plug-ins

should

return

all

applicable

major

error

codes

that

are

defined

by

the

authorization

API.

service

plug-ins

should

also

return

the

major

error

codes

defined

for

a

particular

type

of

service

plug-in,

such

as

the

entitlement

service.

Note:

Some

error

codes

do

not

apply

to

all

service

plug-in

types.

The

following

additional

major

error

codes

are

defined

for

the

authorization

API

service

modules

in

ogauthzn.h.

The

service

dispatcher

returns

only

some

of

the

error

codes,

while

other

error

codes

are

returned

only

by

the

service

plug-in.

The

following

table

shows

the

error

codes

that

the

service

dispatcher

returns.

Error

Description

AZN_S_SVC_DEFINITION_ERROR

The

service

dispatcher

returns

this

error

when

the

service

definition

is

constructed

incorrectly

in

the

Service

stanza

of

the

configuration

file

or

in

a

value

that

is

passed

in

the

init_data

attribute

list

of

azn_intialize().

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

dispatcher

returns

this

error

when

it

cannot

locate

the

authorization

API

service

plug-in.

The

service

dispatcher

also

returns

this

error

when

it

cannot

load

the

service

plug-in.

AZN_S_SVC_INITIALIZE_NOT_FOUND

The

service

dispatcher

returns

this

error

when

it

encounters

an

error

while

either

locating

or

loading

a

service

interface

within

a

specific

service

plug-in.

For

example,

the

service

dispatcher

returns

this

error

if

the

azn_svc_initialize()

interface

could

not

be

found

in

the

loaded

service

plug-in.

AZN_S_INVALID_MOD_FUNCTION

The

supplied

modification

service

identifier

is

invalid.

AZN_S_INVALID_PAC_SVC

The

identifier

(id)

of

the

PAC

service

is

invalid.

AZN_S_SVC_DISPATCHER_FAILURE

88

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Error

Description

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

AZN_S_SVC_DLL_LOAD_FAILED

The

DLL

for

a

service

plug-in

failed

to

load

correctly

AZN_S_SVC_SERVICE_IS_REGISTERED

The

service

ID

cannot

be

registered

because

it

is

already

listed

as

registered

by

the

service

dispatcher.

AZN_S_SVC_INITIALIZE_NOT_FOUND

The

azn_svc_intialize()

function

was

not

found.

AZN_S_SVC_SHUTDOWN_NOT_FOUND

The

azn_svc_shutdown()

function

was

not

found.

AZN_S_SVC_ENT_FUNC_NOT_FOUND

The

azn_entitlement_get_entitlements()

function

was

not

found.

AZN_S_SVC_PAC_FUNC_NOT_FOUND

One

of

either

azn_pac_get_creds()

or

azn_creds_get_pac()

was

not

found.

AZN_S_SVC_CRED_MOD_FUNC_NOT_FOUND

The

azn_creds_modify()

function

was

not

found.

AZN_S_SVC_EAS_FUNC_NOT_FOUND

One

of

either

azn_decision_access_allowed()

or

azn_decision_access_allowed_ext()

was

not

found.

AZN_S_SVC_ADMIN_POBJ_FUNC_NOT_FOUND

One

of

either

azn_admin_get_object()

or

azn_admin_get_objectlist()

was

not

found.

AZN_S_SVC_ADMIN_TASK_FUNC_NOT_FOUND

One

of

either

azn_admin_perform_task()

or

azn_admin_get_tasklist()

was

not

found.

The

following

table

shows

the

major

error

codes

that

service

plug-ins

return:

Error

Description

AZN_S_SVC_INIT_FAILED

The

service

plug-in

returns

this

error

when

it

encounters

an

error

during

initialization.

AZN_S_SVC_SHUTDOWN_FAILED

The

service

plug-in

returns

this

error

when

it

encounters

an

error

during

shutdown.

AZN_S_SVC_AUTHORIZATION_FAILURE

The

service

plug-in

returns

this

error

when

the

calling

application

lacks

authorization

to

invoke

the

Service.

In

addition

to

the

generic

major

codes

that

apply

to

all

types

of

service

plug-ins,

there

exist

generic

major

codes

that

apply

to

a

specific

service

plug-in.

These

major

codes

are

defined

in

ogauthzn.h.

Chapter

6.

Authorization

service

plug-ins

89

Error

Code

Prefix

Description

AZN_S_SVC_ADMIN_*

Administration

service

plug-in

major

error

codes.

AZN_S_SVC_ENT_*

Entitlement

service

plug-in

major

error

codes.

AZN_S_SVC_EAS_*

External

authorization

service

plug-in

major

error

codes

AZN_S_SVC_CRED_MOD_*

Credentials

modification

service

plug-in

major

error

codes.

AZN_S_SVC_PAC_*

Privilege

attribute

certificate

services

plug-in

major

error

codes

In

all

of

the

above

cases,

the

application

developer

may

also

insert

an

implementation

specific

minor

error

code

into

the

status

code.

The

minor

error

code

provides

the

calling

application

with

further

information

on

the

error

that

the

service

plug-in

encountered.

The

calling

application

uses

azn_error_minor()

to

extract

the

minor

error

code.

Minor

error

codes

The

service

plug-in

modules

define

minor

error

codes.

Each

minor

error

code

is

specific

to

a

particular

service

plug-in.

Developers

should

define

the

minor

error

codes

in

the

interface

file

for

the

service

plug-in.

The

interface

file

also

contains

other

details

specific

to

the

service

plug-in,

such

as

the

names

of

the

attributes

recognized

by

the

service.

Applications

that

use

the

service

plug-in

will

include

and

reference

the

service

interface

file.

The

authorization

API

encodes

all

minor

error

codes

by

using

a

table

of

known

message

catalog

prefixes.

There

is

one

prefix

for

all

service

plug-ins

of

the

same

type.

For

example,

all

entitlement

service

plug-ins

use

the

same

prefix.

The

file

ogauthzn.h

defines

the

following

prefixes:

Service

Prefix

Entitlements

azn_ent_svc_err_prefix

Credentials

Modification

azn_mod_svc_err_prefix

Privilege

Attribute

Certificate

azn_pac_svc_err_prefix

Administration

service

azn_admin_svc_err_prefix

External

authorization

service

azn_eas_svc_err_prefix

The

service

plug-in

developer

must

use

these

prefixes

to

define

the

minor

error

codes

for

each

service

plug-in.

The

azn_util_errcode()

interface

uses

these

prefixes

to

properly

encode

each

minor

error

into

an

azn_status_t.

For

example,

the

prefix

for

Entitlement

Services

is

defined

as

follows

in

the

file

ogauthzn.h:

extern

unsigned

int

azn_ent_svc_err_prefix;

Entitlement

service

developers

should

define

their

error

messages

in

terms

of

azn_ent_svc_err_prefix.

90

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

For

example,

minor

error

codes

for

authorization

API

entitlement

service

plug-ins

are

defined

in

the

interface

file

as

follows:

#define

ENT_SVC_CORE_DUMP

(azn_ent_svc_err_prefix

|

0x1)

#define

ENT_SVC_INVALID_ATTRIBUTE

(azn_ent_svc_err_prefix

|

0x2)

#define

ENT_SVC_BAD_FILENAME

(azn_ent_svc_err_prefix

|

0x3)

The

service

plug-in

developer

has

16

bits

of

the

minor

error

code

to

use

for

minor

error

codes

specific

to

a

service.

The

16

bit

error

code

can

be

personalized

for

the

service,

to

avoid

conflicts

with

other

service

plug-ins

of

the

same

type.

For

example:

#define

MY_ENTSVC_ERR

(0xE000)

#define

ENT_SVC_CORE_DUMP

\

(azn_ent_svc_err_prefix

|

(MY_ENTSVC_ERR

|

0x1))

Chapter

6.

Authorization

service

plug-ins

91

Shut

down

Applications

shut

down

the

service

plug-ins

as

part

of

shutting

down

the

authorization

API.

The

application

calls

azn_shutdown().

If

a

Service

is

initialized,

azn_shutdown()

calls

the

azn_svc_shutdown()

interface

of

the

service

plug-in.

The

azn_svc_shutdown()

interface

is

called

with

the

same

argc

and

argv

parameters

that

were

passed

to

the

azn_svc_initialize()

interface

when

the

service

plug-in

was

first

initialized.

The

azn_svc_shutdown()

also

takes

the

optional

input

parameter

svc_init,

which

specifies

an

attribute

list.

The

service

plug-in

developer

can

use

the

attribute

list

to

pass

additional

information

to

the

service

plug-in.

Currently,

there

are

no

defined

attributes

for

svc_init.

The

service

plug-in

can

return

information

to

the

service

dispatcher

through

the

optional

output

parameter

svc_info.

For

more

information,

see

the

reference

page

for

“azn_svc_shutdown()”

on

page

249.

92

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Example

service

source

code

This

section

contains

source

code

for

an

example

implementation

of

an

entitlement

service

plug-in.

This

code

demonstrates

configuration,

initialization,

shutdown,

and

implementation

of

interfaces

specific

to

the

service

type.

/*

*

FILENAME

*

mysvc.cpp

*

*

DESCRIPTION

*

*

Example

entitlement

service

for

the

aznAPI.

*

*/

#include

<stdio.h>

#include

<ogauthzn.h>

#include

<aznutils.h>

#ifdef

_WIN32

#define

AZN_DECLSPEC

__declspec(dllexport)

#else

#define

AZN_DECLSPEC

#endif

#define

MY_SVC_VER

“Example

Entitlement

Service

v1.0”

/*

*

Define

a

mask

to

identify

minor

errors

that

originate

from

this

*

service.

All

3rd

party

entitlement

services

must

use

the

*

azn_ent_svc_err_prefix

to

prefix

minor

code

definitions.

The

lower

*

16

bits

should

be

differentiated

from

other

installed

entitlements

*

services.

eg.

in

this

case

0x8000

identifies

the

error

as

originating

*

from

this

service.

*/

#define

AZN_MYSVC_ERROR_MASK

(azn_ent_svc_err_prefix

|

0x8000)

#define

AZN_MYSVC_INVALID_SVCINFO_HDL

(AZN_MYSVC_ERROR_MASK

|

1)

#define

AZN_MYSVC_INVALID_ARG_COUNT

(AZN_MYSVC_ERROR_MASK

|

2)

#define

AZN_MYSVC_INVALID_ARG_ARRAY

(AZN_MYSVC_ERROR_MASK

|

3)

#ifdef

__cplusplus

extern

“C”

{

#endif

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

*

Interface

function

definitions.

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

/*

*

FUNCTION

NAME

*

azn_svc_initialize

*

*

DESCRIPTION

*

init

the

entitlement

service

*

*

ARGUMENTS

*

[in]

argc

The

count

of

arguments

to

the

service.

*

[in]

argv

The

array

of

argument

strings.

*

[in]

svc_init

List

of

initialization

attributes

for

the

service.

*

[out]

svc_info

attr

list

ptr

for

attributes

returned

by

the

*

service.

*

*

RETURN

VALUE

*

AZN_S_COMPLETE

on

success,

error

code

on

failure

Chapter

6.

Authorization

service

plug-ins

93

*/

AZN_DECLSPEC

azn_status_t

AZN_CALLTYPE

azn_svc_initialize(

int

argc,

/*

in

*/

char

**argv,

/*

in

*/

azn_attrlist_h_t

svc_init,

/*

in

*/

azn_attrlist_h_t

*svc_info

/*

out

*/

)

{

azn_status_t

st;

azn_boolean_t

freeAttrlist

=

FALSE;

/*

svc_info

must

not

be

NULL

*/

if

(svc_info

==

NULL)

{

return

(azn_util_errcode(AZN_S_FAILURE,

AZN_MYSVC_INVALID_SVCINFO_HDL));

}

/*

ensure

argc

is

valid

*/

if

(argc

<

0

||

(argc

==

0

&&

argv

!=

NULL))

{

return

(azn_util_errcode(AZN_S_FAILURE,

AZN_MYSVC_INVALID_ARG_COUNT));

}

if

(argc

>

0

&&

argv

==

NULL)

{

return

(azn_util_errcode(AZN_S_FAILURE,

AZN_MYSVC_INVALID_ARG_ARRAY));

}

/*

*

*

Process

arguments

and

initialize

service.

*

*/

/*

return

the

service

version

to

the

dispatcher

*/

if

(*svc_info

==

AZN_C_INVALID_HANDLE)

{

azn_attrlist_create(svc_info);

freeAttrlist

=

TRUE;

}

st

=

azn_attrlist_add_entry(*svc_info,

azn_svc_version,

MY_SVC_VER);

if

(st

!=

AZN_S_COMPLETE)

{

if

(freeAttrlist)

{

azn_attrlist_delete(svc_info);

}

return

(st);

}

return

(AZN_S_COMPLETE);

}

/*

*

FUNCTION

NAME

*

azn_svc_shutdown

*

*

DESCRIPTION

*

Shutdown

the

entitlement

service.

*

The

initialization

parameters

are

passed

in

*

again

on

shutdown

but

are

ignored.

No

version

*

info

is

returned.

*

94

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

*

ARGUMENTS

*

[in]

argc

The

count

of

arguments

to

the

service.

*

[in]

argv

The

array

of

argument

strings.

*

[in]

svc_init

List

of

initialization

attributes

for

the

service.

*

*

[out]

svc_info

attr

list

ptr

for

attributes

returned

by

the

*

service.

*

*

RETURN

VALUE

*

AZN_S_COMPLETE

*/

AZN_DECLSPEC

azn_status_t

AZN_CALLTYPE

azn_svc_shutdown(

int

argc,

/*

in

*/

char

**argv,

/*

in

*/

azn_attrlist_h_t

svc_init,

/*

in

*/

azn_attrlist_h_t

*svc_info

/*

out

*/

)

{

return

(AZN_S_COMPLETE);

}

/*

*

FUNCTION

NAME

*

azn_svc_entitlement_get_entitlements

*

*

DESCRIPTION

*

Returns

entitlements

information

associated

with

*

the

credential

and

context

info

passed

in.

*

*

ARGUMENTS

*

[in]

creds

The

credentials

of

the

caller

*

[in]

svc_id

The

id

of

the

entitlement

service

*

[in]

app_context

attribute

list

containing

information

*

regarding

the

type

of

object

we

are

*

operating

on

*

[out]

entitlements

attribute

list

containing

the

*

entitlements

associated

with

the

specified

*

object

*

*

RETURN

VALUE

*

AZN_S_COMPLETE

on

success,

error

code

on

failure

*/

AZN_DECLSPEC

azn_status_t

AZN_CALLTYPE

azn_svc_entitlement_get_entitlements(

azn_creds_h_t

creds,

/*

in

*/

azn_string_t

svc_id,

/*

in

*/

azn_attrlist_h_t

app_context,

/*

in

*/

azn_attrlist_h_t

*entitlements

/*

out

*/

)

{

/*

Obtain

entitlements

data

from

back-end

database

*/

return

(AZN_S_COMPLETE);

}

#ifdef

__cplusplus

}

#endif

Chapter

6.

Authorization

service

plug-ins

95

Supplied

implementations

for

service

plug-ins

The

Tivoli

Access

Manager

authorization

ADK

supplies

implementations

for

a

number

of

different

service

plug-in

types.

Some

of

these

implementations

are

built

into

the

authorization

API.

Others

consist

of

separate

shared

libraries.

The

name

for

each

implementation

that

consists

of

a

shared

library

is

specified

as

the

short

name

in

the

table

in

each

of

the

following

sections.

You

can

use

the

short

name

when

specifying

the

plug-in

location,

as

part

of

constructing

the

service

definition.

For

more

information,

see

“Constructing

a

service

definition”

on

page

82.

The

following

sections

describe

the

supplied

service

implementations:

v

“Entitlement

services”

on

page

97

v

“Credentials

modification

service”

on

page

101

v

“Privilege

attribute

certificate

service”

on

page

102

v

“External

authorization

service”

on

page

102

96

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Entitlement

services

Tivoli

Access

Manager

provides

the

following

entitlement

services:

v

Tivoli

Access

Manager

protected

objects

entitlement

service

This

is

the

default

entitlement

service.

v

Extended

attributes

entitlement

service

v

IBM

Tivoli

Access

ManagerAttribute

Retrieval

Service

v

Credential

attributes

entitlement

service

These

services

are

described

in

the

following

tables:

Service

Plug-in

Summary

Category

Description

Name

Protected

objects

entitlement

service

Service

ID

NULL

Plug-in

Short

Name

Not

applicable

(implemented

internally)

Parameters

app_context

(input)

The

entitlement

service

accepts

a

single,

multi-valued

string

attribute

that

specifies

the

root

node(s)

for

searching

the

Tivoli

Access

Manager

protected

object

namespace.

This

enables

the

application

to

limit

its

search

to

a

particular

set

of

protected

objects

in

the

web

space,

rather

than

search

the

entire

web

space.

Because

the

attribute

can

contain

multiple

values,

the

application

can

specify

multiple

root

nodes

for

the

search.

The

app_context

attribute

list

contains

these

attributes:

v

azn_ent_svc_pd_pobj_path

(multi-valued)

v

azn_ent_svc_pd_pobj_reqd_ops

(single

value)

This

attribute

contains

a

string

to

denote

the

set

of

operations

that

the

credential

must

have

upon

the

protected

object.

For

example:

rxT.

entitlements

(output)

Entitlements

data

is

returned

as

a

multi-valued

attribute

list

of

protected

objects

for

each

search

tree

root

node

passed

in

to

the

azn_entitlement_get_entitlements()

call.

The

list

only

contains

objects

underneath

the

specified

root

node

that

have

an

ACL

explicitly

attached

to

them.

The

attribute

list

is

appended

with

the

attribute

azn_ent_svc_pd_pobj_matches,

which

contains

string

protected

object

names.

The

attribute

list

may

contain

AZN_C_INVALID_HANDLE

if

there

are

no

protected

objects

that

match.

Chapter

6.

Authorization

service

plug-ins

97

Service

Plug-in

Summary

Category

Description

Description

The

service

returns

a

list

of

protected

resources

in

the

database

that

have

an

ACL

explicitly

attached

to

them

and

for

which

the

ACL

allows

the

specified

credential

the

specified

access

privilege.

For

example,

the

application

can

request

the

service

to

return

a

list

of

HTML

objects

under

/WebSEAL/srvA/staff

for

which

a

specified

user

has

read

permission.

A

graphical

user

interface

application

can

use

the

returned

entitlements

(protected

object

names)

to

determine

which

buttons

the

specified

user

can

see

when

the

GUI

application

is

loaded.

This

entitlement

service

should

be

configured

in

secure

domains

with

Tivoli

Access

Manager

servers

that

have

been

configured

and

are

running.

The

following

table

describes

the

extended

attributes

entitlement

service:

Service

Plug-in

Summary

Category

Description

Name

Extended

attributes

entitlement

service

Service

ID

User

specified

in

the

service

definition.

Plug-in

Short

Name

azn_ent_ext_attr

Parameters

app_context

(input)

Input

attribute

name:

One

of

“POP”,

“ACL”

or

“OBJ”.

This

attribute

contains

the

protected

object

name

that

is

the

target

for

the

request.

entitlements

(output)

An

list

of

the

extended

attributes

that

are

defined

for

the

target

object.

Description

Returns

the

extended

attributes

defined

for

an

ACL,

POP

or

protected

object.

The

protected

object

to

which

the

ACL

or

POP

is

attached

or

that

is

the

target

for

the

operation

is

specified

as

a

parameter.

98

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

following

table

describes

the

IBM

Tivoli

Access

Manager

Attribute

Retrieval

Service,

a

customizable

web

service-based

dynamic

ADI

retrieval

entitlement

service:

Service

Plug-in

Summary

Category

Description

Name

AMWebARS

(Web

service-based

dynamic

ADI

retrieval

entitlement

service)

Service

ID

User

specified

in

the

service

definition.

Plug-in

Short

Name

azn_ent_amwebars

Parameters

app_context

(input)

Input

attribute

name:

azn_perminfo_rules_adi_request.

This

attribute

contains

a

list

of

ADI

container

names

that

should

be

obtained

from

the

IBM

Tivoli

Access

Manager

Attribute

Retrieval

Service

(AMWebARS).

Additional

attributes

can

be

specified

to

Web-based

applications.

For

more

information

on

these

attributes,

see

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide.

entitlements

(output)

The

entitlements

attribute

list

output

parameter

contains

the

result

of

the

request

to

the

AMWebARS.

The

AMWebARS

returns

each

ADI

container

name

specified

in

the

input

attribute

azn_perminfo_rules_adi_request

as

a

separate

attribute

entry

in

the

output

entitlements

attribute

list.

The

attribute

name

for

each

returned

ADI

value

is

the

container

name

of

the

item.

Additional

attributes

are

returned

to

Web-based

applications.

For

more

information

on

these

attributes,

see

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide.

Description

Retrieves

values

for

the

requested

ADI

container

names

by

querying

the

IBM

Tivoli

Access

Manager

Attribute

Retrieval

Service

(AMWebARS).

Values

are

only

returned

for

those

container

names

that

are

supported

by

the

plug-ins

loaded

into

the

AMWebARS.

For

more

information

on

the

AMWebARS,

see

the

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide.

The

status

code

returned

from

the

entitlements

call

is

AZN_S_COMPLETE,

unless

a

serious

internal

error

is

encountered.

In

this

case,

an

error

code

is

returned.

The

inability

to

fulfill

the

request

for

one

or

more

of

the

requested

ADI

container

names

is

not

an

error

condition.

Chapter

6.

Authorization

service

plug-ins

99

The

following

table

describes

the

registry

attribute

entitlement

service.

Note

that

this

is

an

implementation

of

a

credential

attribute

entitlement

service.

Service

Plug-in

Summary

Category

Description

Name

Registry

attribute

entitlement

service

Service

ID

User

specified

in

the

service

definition.

Plug-in

Short

Name

azn_ent_cred_attrs

Parameters

app_context

(input)

Input

attribute

name:

azn_ent_cred_attrs_attribute.

This

attribute

contains

a

list

of

attributes

to

obtain

from

the

user

registry.

entitlements

(output)

The

entitlements

attribute

list

output

parameter

contains

the

list

of

attributes

obtained

from

the

user

registry.

Description

This

entitlement

service

obtains

a

specified

list

of

attributes

from

the

user

registry.

The

list

can

be

specified

in

several

different

ways.

The

list

can

be

built

from

entries

placed

in

the

application

file.

The

entitlement

service

is

called

automatically

by

azn_id_get_creds(),

or

can

be

manually

called

by

azn_entitlement_get_entitlements().

For

more

information,

see

“Registry

attribute

entitlement

service

overview”

on

page

113.

100

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Credentials

modification

service

The

Tivoli

Access

Manager

authorization

ADK

provides

two

implementations

of

a

credentials

modification

service.

One

implementation

modifies

attribute

lists.

The

other

implementation

modifies

group

memberships.

The

service

described

in

the

table

below

is

built-in

to

the

authorization

API.

Service

Plug-in

Summary

Category

Description

Name

Credentials

attribute

list

modification

service

Service

ID

Null

Plug-in

Short

Name

not

applicable

(built-in)

Parameters

creds

(input)

The

credentials

with

which

to

work.

list

(input)

The

attribute

list

to

replace.

outcred

(output)

The

credential

resulting

from

the

operation.

Description

This

service

will

replace

the

attribute

list

in

credential

creds

with

the

attribute

list

list.

Read-only

attributes,

such

as

group

UUIDs,

cannot

be

changed

by

this

service.

The

original

credential

is

left

unchanged

and

a

new

credential

containing

list

is

returned

in

outcred.

The

service

described

in

the

table

below

is

not

built

into

the

authorization

API.

Service

Plug-in

Summary

Category

Description

Name

Credentials

group

membership

modification

service

Service

ID

User

specified

in

the

service

definition.

Plug-in

Short

Name

azn_mod_rad

Parameters

creds

(input)

The

credentials

to

modify

mod_info

(input)

Input

attribute:

AZN_MOD_RAD_GROUP_NAMES

Contains

the

names

of

the

groups

to

which

the

resulting

credential

creds

will

effectively

be

added.

newcreds

(output)

A

new

credential

based

on

creds

and

built

to

include

the

groups

in

mod_info.

Description

Gives

a

credential

membership

in

a

specified

set

of

groups.

The

new

credential

is

returned

in

newcreds.

The

original

credential

is

unaffected

and

the

results

are

localized

to

authorization

checks

made

with

the

returned

credential

newcreds.

The

actual

user

registry

and

the

user’s

entry

within

the

registry

are

not

affected

by

this

modification

service.

Chapter

6.

Authorization

service

plug-ins

101

Privilege

attribute

certificate

service

This

service

is

built

in

to

the

authorization

API.

Service

Plug-in

Summary

Category

Description

Name

Tivoli

Access

Manager

privilege

attribute

certificate

(PAC)

encoding

service

Service

ID

NULL

Plug-in

Name

not

applicable

(built-in)

Parameters:

azn_creds_get_pac()

creds

(input)

Input

parameter.

The

credentials

to

be

encoded.

pac

(output)

An

azn_buffer_t

that

will

contain

the

encoded

credentials

PAC

for

creds

on

completion.

Parameters:

azn_pac_get_creds()

pac

(input)

An

encoded

PAC

to

be

decoded

into

credentials.

new_creds

(output)

A

pointer

to

an

azn_creds_h_t

that

will

refer

to

the

credential

decoded

by

the

service

from

pac.

Description

Encodes

and

decodes

a

Tivoli

Access

Manager

credential

to

or

from

a

format

that

is

transmissible

in

a

text

only

environment.

The

format

is

a

combination

of

ASN1

and

MIME

encoding.

External

authorization

service

The

Authorization

ADK

provides

a

sample

implementation

of

an

external

authorization

service

(EAS)

plug-in.

This

implementation

is

not

built-in

to

the

authorization

API.

Service

Plug-in

Summary

Category

Description

Name

Example

external

authorization

service

Service

ID

User

specified

in

the

service

definition.

Plug-in

Short

Name

azn_eas_demo

Parameters

not

applicable

Description

This

is

an

example

EAS

plug-in

which

simply

returns

AZN_C_PERMITTED

for

all

authorizations

in

which

it

is

called

to

participate.

Configure

the

EAS

to

be

called

for

a

decision

that

would

normally

return

AZN_C_NOT_PERMITTED.

The

demonstration

program

performs

some

perfunctory

checking

of

input

parameters

but

does

not

attempt

to

make

any

authorization

related

decisions

based

upon

the

incoming

access

decision

information

(ADI).

102

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

7.

Entitlement

service

plug-ins

The

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

API

services

framework

provides

a

modular,

plug-in

style

architecture

that

enables

application

developers

to

supplement

Tivoli

Access

Manager

authorization

with

their

own

entitlements

models.

Developers

can

build

a

shared

library

object

that

implements

an

entitlement

service.

Developers

then

configure

the

authorization

API

to

use

their

module

by

exposing

the

appropriate

entitlements

interface.

The

entitlements

shared

library

object

is

a

plug-in

to

the

authorization

API.

Application

developers

build

their

plug-in

as

an

authorization

API

client.

The

entitlement

service

plug-in

must

know

how

to

manipulate

authorization

API

structures

such

as

user

credentials

and

attribute

lists.

In

most

cases,

the

service

plug-in

functions

as

an

authorization

API

client.

Tivoli

Access

Manager

5.1

also

supports

a

new

class

of

entitlement

service

known

as

the

dynamic

ADI

retrieval

service.

More

information

on

this

class

of

entitlement

service

is

presented

later

in

this

chapter.

This

chapter

contains

the

following

topics:

v

“Understanding

entitlements”

on

page

104

v

“Initialization,

configuration,

and

shut

down”

on

page

106

v

“Obtaining

entitlements

for

a

specified

user”

on

page

107

v

“Authorizing

a

caller

to

a

specific

entitlement

service

plug-In”

on

page

108

v

“Using

authorization

API

interfaces”

on

page

108

v

“Entitlement

service

error

codes”

on

page

109

v

“Dynamic

ADI

retrieval

services”

on

page

110

v

“Credential

attributes

entitlement

service”

on

page

112

©

Copyright

IBM

Corp.

2000,2003

103

Understanding

entitlements

An

entitlement

is

a

data

structure

that

contains

externalized

policy

information.

An

entitlement

is

policy

data

or

capabilities

that

is

formatted

in

a

way

that

is

understandable

to

a

specific

application.

The

application

uses

the

authorization

API

to

instruct

the

Tivoli

Access

Manager

authorization

service

to

obtain

and

return

the

entitlements.

For

example,

an

application

for

processing

stock

market

trading

can

define

an

entitlement

called

trading

limit.

This

entitlement

defines

the

maximum

amount

that

a

specific

trader

can

trade

in

one

transaction.

The

entitlement

can

be

set

independently

for

each

trader

known

to

the

application.

The

application

can

request

the

trading

limit

for

a

specific

trader.

The

authorization

service

returns

the

entitlement

in

a

format,

such

as

United

States

dollars,

that

the

application

can

understand.

Entitlements

to

be

brokered

by

the

service

are

designed

with

the

target

application

in

mind.

The

policy

to

be

modeled

using

entitlements

is

first

identified

and

then

the

possible

values

for

these

entitlements

are

specified.

The

authorization

API

uses

attributes

within

an

attribute

list

to

represent

individual

entitlements.

Each

attribute

within

the

list

consists

of

an

attribute

name

and

a

multi-valued

list

of

values

for

that

attribute.

Attributes

can

consist

of

values

represented

by

data

of

type

azn_string_t,

by

data

of

type

azn_buffer_t,

or

by

any

other

valid

attribute

type.

Note:

For

more

information

on

authorization

API

attribute

lists

and

data

types,

see

Chapter

2,

“Authorization

API

functions

and

data

types,”

on

page

11.

Entitlements

of

type

azn_string_t

An

example

of

an

entitlement

is

the

time

of

day

access

restrictions

for

a

particular

resource.

This

refers

to

the

time

periods

during

a

day

that

a

particular

user

is

permitted

to

access

the

resource

to

which

the

entitlement

is

attached.

The

attribute

name

defined

by

the

entitlement

service

for

this

entitlement

is

simply

a

string:

extern

azn_string_t

time_of_day_restriction;

The

value

of

the

data

returned

is

specific

to

the

implementation

and

so

may

be

returned

as

multiple

strings

identifying

times

of

the

day

in

which

the

resource

may

be

accessed.

For

example:

"mon-fri:

9am-5pm"

“mon-fri:

1pm-5pm”

“sat:

9am-12pm”

These

string

values

for

time_of_day_restriction

define

valid

access

times.

The

entitlement

service

defines

how

these

strings

are

formatted

and

interpreted

by

the

calling

application.

104

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

Tivoli

Access

Manager

protected

object

entitlement

service

Another

example

of

an

entitlement

is

the

data

returned

by

the

Tivoli

Access

Manager

protected

object

entitlement

service.

This

service

returns

a

list

of

objects

within

the

protected

object

space

for

which

the

given

user

credential

has

the

specified

access

privileges.

An

application

could

use

this

information

to

create

a

portal

interface

specifically

for

each

user

that

invokes

the

application.

The

services

that

each

user

can

employ

are

returned

to

the

application

as

a

list

of

strings.

Each

string

represents

a

protected

object

within

the

Tivoli

Access

Manager

protected

object

space

that

the

caller

with

the

specified

privileges

can

access.

Entitlements

of

type

azn_buffer_t

Entitlement

services

may

also

define

an

entitlement

as

a

blob

of

data

using

an

azn_buffer_t

value

for

the

attribute.

This

may

be

used

by

distributed

object

based

applications

such

as

Common

Object

Request

Broker

Architecture

(CORBA)

to

retrieve

encoded

CORBA

objects

from

the

entitlement

service

that

can

then

be

used

to

perform

an

operation

for

the

calling

application.

The

contents

of

the

azn_buffer_t

data

type

are

opaque

to

the

authorization

service.

For

more

information

on

data

type

azn_buffer_t,

see

“Buffers”

on

page

14.

Chapter

7.

Entitlement

service

plug-ins

105

Initialization,

configuration,

and

shut

down

Each

entitlement

service

plug-in

is

a

standalone

module

that

is

dynamically

loaded

into

the

authorization

service.

The

Tivoli

Access

Manager

authorization

service

recognizes

and

registers

entitlement

service

plug-ins

with

the

service

dispatcher

by

reading

entries

in

the

aznapi.conf

configuration

file

.

Entitlement

service

plug-ins

are

declared

in

the

configuration

file

under

the

following

stanza

entry:

[aznapi-entitlement-services]

The

Tivoli

Access

Manager

authorization

service

also

recognizes

and

registers

entitlement

service

plug-ins

through

arguments

passed

to

the

init_data

parameter

of

the

azn_initialize()

function.

For

complete

configuration

specifications,

see

“Initialization

and

configuration

of

service

plug-ins”

on

page

82.

The

authorization

API

service

plug-in

model

provides

standard

interfaces

to

the

service

dispatcher

to

initialize

and

shut

down

all

types

of

service

plug-ins.

Developers

of

entitlement

service

plug-ins

should

provide

the

standard

functions.

See

the

following

sections:

For

more

information,

see

the

following

sections:

v

“Initialization

and

configuration

of

service

plug-ins”

on

page

82

v

“Shut

down”

on

page

92

See

also

the

reference

pages

for

“azn_svc_initialize()”

on

page

244

and

“azn_svc_shutdown()”

on

page

249.

106

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Obtaining

entitlements

for

a

specified

user

The

authorization

API

provides

the

azn_entitlement_get_entitlements()

interface

for

obtaining

entitlements

for

a

specified

user.

The

service

plug-in

must

provide

the

azn_svc_entitlement_get_entitlements()

interface,

which

has

the

following

input

parameters:

Input

Parameter

Type

Parameter

Description

azn_creds_h_t

creds

The

credentials

of

the

user

for

whom

the

calling

application

wants

the

list

of

entitlements.

azn_string_t

svc_id

The

service

identification

string

of

the

entitlement

service

plug-in.

azn_attrlist_h_t

app_context

The

resource

within

the

protected

object

space,

and

the

action

requested.

The

authorization

API

service

dispatcher

directs

the

request

to

the

appropriate

service

plug-in,

based

on

the

svc_id

parameter.

The

service

plug-in

also

takes

the

above

parameters

as

input,

and

returns

the

requested

entitlements

in

the

attribute

list

entitlements.

The

service

plug-in

is

not

required

to

use

the

input

parameters,

but

it

is

required

to

return

valid

data

in

the

entitlements

output

parameter.

Entitlement

service

plug-ins

share

the

address

space

of

both

the

calling

application

and

the

authorization

API

shared

library.

Service

plug-ins

can

assume

that

pointers

passed

in

through

the

app_context

parameter

are

valid

within

the

address

space

of

the

service

plug-in.

Credential

and

attribute

list

handles

are

also

valid

to

use

within

the

service

plug-in.

Chapter

7.

Entitlement

service

plug-ins

107

Authorizing

a

caller

to

a

specific

entitlement

service

plug-In

Entitlement

service

plug-ins

typically

supply

information

in

a

directory

service,

such

as

LDAP,

or

in

a

data

store,

such

a

DB2

database,

to

the

application

caller.

These

directory

services

or

data

stores

may

require

a

proprietary

authentication

step

before

permitting

access

to

stored

information.

The

developer

of

each

entitlement

service

plug-in

must

implement

these

proprietary

authentication

steps.

The

authorization

API

does

not

provide

functions

to

implement

proprietary

authentication

models.

The

authorization

API

does,

however,

provide

the

plug-in

initialization

interface

azn_svc_initialize().

This

interface

permits

the

passing

of

proprietary

data

in

parameters

to

the

service

initialization

function.

Alternately,

the

developer

can

use

the

initialization

parameters

to

authenticate

the

authorization

API

application

before

loading

the

entitlement

service

plug-in.

In

this

case,

the

entitlement

service

plug-in

can

inherit

privileges

from

the

authorization

API

application.

Using

authorization

API

interfaces

Entitlement

service

plug-ins

should

access

the

contents

of

passed

parameters

using

the

authorization

API.

The

entitlement

service

plug-ins

are

not

required

to

make

use

of

any

other

features

or

interfaces

of

the

authorization

API

other

than

those

that

provide

access

to

these

data

types.

The

entitlement

service

plug-in

becomes

part

of

the

authorization

API

application’s

address

space.

The

service

plug-in

can

assume

that

if

it

is

denied

access

to

a

particular

authorization

API

interface

that

the

calling

application

was

not

allowed

to

perform

the

operation.

108

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Entitlement

service

error

codes

The

following

functions

can

receive

an

error

code

as

a

result

of

calling

an

entitlement

service:

v

azn_initialize()

v

azn_shutdown()

v

azn_entitlement_get_entitlements()

For

information

on

error

codes

for

azn_initialize()

and

azn_shutdown(),

see

“Using

error

codes”

on

page

88.

The

azn_entitlement_get_entitlements()

function

returns

the

following

error

codes:

Error

Code

Description

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

AZN_S_INVALID_ENTITLEMENTS_SVC

The

entitlement

service

identifier

is

invalid.

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

application

context

is

invalid.

AZN_S_INVALID_ENTITLEMENTS_HDL

The

attribute

list

handle

for

the

entitlements

is

invalid.

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

Each

entitlement

service

plug-in

can

optionally

return

minor

error

codes

that

express

errors

specific

to

the

service

plug-in

implementation.

For

more

information

on

implementing

minor

error

codes,

see

“Minor

error

codes”

on

page

90.

Chapter

7.

Entitlement

service

plug-ins

109

Dynamic

ADI

retrieval

services

This

class

of

entitlement

service

is

designed

to

fulfill

requests

for

access

decision

information

(ADI)

that

is

needed

for

the

Tivoli

Access

Manager

authorization

engine

to

perform

an

authorization

rule

evaluation.

To

meet

the

classification

of

attribute

retrieval

service

the

entitlement

service

needs

to

take

a

specific

set

of

inputs

and

return

to

the

caller

a

specific

set

of

outputs

in

XML

format.

Dynamic

ADI

retrieval

services

are

configured

in

the

same

way

as

other

entitlement

services.

To

have

the

authorization

rules

evaluator

call

a

dynamic

ADI

retrieval

service

when

ADI

is

required

to

complete

a

rule

evaluation,

you

must

specify

the

service

ID

of

the

entitlement

service

as

a

value

for

the

configuration

file

entry

dynamic-adi-entitlement-services

or

specified

to

the

azn_initialize()

application

interface

using

the

initialization

attribute

azn_init_dynamic_adi_entitlement_services.

Multiple

service

IDs

can

be

specified

in

this

way.

They

are

called

in

the

order

in

which

they

are

specified

in

the

configuration

setting

or

initialization

parameter.

Note:

Tivoli

Access

Manager

also

supports

authorization

rule

evaluation

when

attribute

retrieval

services

are

not

required.

For

more

information

on

authorization

rules,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

An

entitlement

service

may

provide

other

classes

of

entitlement

services

in

addition

to

providing

a

attribute

retrieval

service.

Existing

entitlement

services

may

be

adapted

to

include

attribute

retrieval

service

functionality.

The

Tivoli

Access

Manager

authorization

ADK

package

includes

an

example

entitlement

service.

The

source

file

is

azn_ent_svc_demo.c.

This

example

file

shows

how

an

entitlement

service

can

be

written

to

perform

the

function

of

a

standard

authorization

API

entitlement

service

to

be

called

from

azn_entitlement_get_entitlements().

This

example

file

also

shows

how

an

entitlement

service

can

perform

the

functions

of

a

dynamic

ADI

retrieval

service

and

a

credential

attribute

retrieval

service.

In

addition,

the

Tivoli

Access

Manager

runtime

provides

a

dynamic

ADI

entitlement

service

that

can

be

used

to

retrieve

dynamic

ADI

attributes

for

use

in

authorization

rules

from

the

Tivoli

Access

Manager

user

registry.

For

more

information,

see

“Registry

attribute

entitlement

service

overview”

on

page

113.

The

attribute

retrieval

service

must

accept

the

azn_perminfo_rules_adi_request

attribute

as

input.

This

is

the

same

attribute

that

can

be

returned

as

permission

information

by

the

azn_decision_access_allowed_ext()

authorization

API

call.

The

values

for

the

attribute

are

also

the

same.

This

attribute

is

a

request

from

the

authorization

engine

for

ADI

that

it

needs

in

order

to

evaluate

a

rule.

The

attribute

retrieval

service

must

scan

the

list

of

ADI

container

names

found

in

the

azn_perminfo_rules_adi_request

attribute.

If

it

can

provide

the

data

for

any

of

these

ADI,

it

must

return

the

data

to

the

caller

as

an

attribute

name/value

pair

in

the

entitlements

attribute

list

parameter.

Each

item

of

ADI

found

will

be

added

as

a

separate

attribute

in

the

output

attribute

list,

with

an

attribute

name

that

corresponds

to

the

ADI

container

name.

The

value

of

the

ADI

item

is

added

as

a

value

to

the

attribute.

ADI

can

have

multiple

values

so

additional

values

can

be

added

to

the

same

attribute

name.

If

the

value

of

the

ADI

data

is

a

simple

type,

for

example

a

string

or

a

numeric

value,

then

the

attribute

type

can

be

either

a

string

or

unsigned

long

type.

If

the

110

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

data

is

a

complex

data

type,

the

value

can

be

expressed

in

XML

as

a

single

string,

in

which

case

the

attribute

type

is

string.

ADI

values

formatted

in

XML

must

be

formatted

as

an

XML

element

with

the

element

name

matching

the

container

name

of

the

ADI

item.

For

example,

given

a

request

for

an

ADI

item

called

customer,

which

contains

the

customer

name,

address

and

credit

card

data,

the

attribute

retrieval

service

would

format

the

following

XML

data

as

a

single

string

and

add

it

as

an

attribute

value

to

an

attribute

named

customer:

<customer>

<name>John

Smith</name>

<address>3004

Mission

St,

Santa

Cruz,

CA</address>

<credit_card>5555

5555

5555

5555</credit_card>

</customer>

The

attribute

retrieval

service

must

be

aware

of

namespace

identifiers

in

ADI

container

names

when

processing

requests

for

ADI.

If

the

customer

item

above

was

defined

within

an

XML

namespace

with

the

ID

arl,

then

the

container

name

requested

by

the

authorization

engine

would

be

arl:customer.

When

the

attribute

retrieval

service

is

processing

the

container

name,

it

should

consider

that

a

namespace

ID

might

be

prepended

to

an

ADI

container

name.

If

the

container

name

contains

a

namespace

ID,

then

the

customer

XML

element

definition

should

also

include

the

appropriate

namespace

declaration

for

the

item.

The

declaration

should

also

match

any

similar

declaration

made

in

the

xsl-stylesheet-prolog

configuration

entry

in

the

authorization

client’s

configuration

file.

The

namespace

declaration

is

included

in

the

element

start

token

which,

in

the

example

container

name

of

arl:customer,

now

becomes

<arl:customer>.

To

properly

define

the

arl:customer

item

to

be

in

the

namespace

with

an

ID

of

arl,

the

<customer>

and

</customer>

elements

in

the

above

example

would

be

replaced

as

follows:

<arl:customer

xmlns:arl="http://www.arl.com.au">

<name>John

Smith</name>

<address>3004

Mission

St,

Santa

Cruz,

CA</address>

<credit_card>5555

5555

5555

5555</credit_card>

</arl:customer>

If

the

attribute

retrieval

service

can’t

provide

data

for

some

or

all

of

the

requested

items,

it

should

return

values

for

the

container

names

that

it

knows

about,

along

with

a

status

of

AZN_S_COMPLETE.

It

should

not

return

an

error

if

it

can’t

provide

values

for

the

ADI.

However,

it

can

and

should

return

an

error

if

the

service

is

configured

incorrectly

or

it

encounters

other

problems

during

execution.

Note:

For

optimum

security,

ensure

that

this

service

is

installed

with

permissions

that

permit

only

the

owner

of

the

service

to

modify

it.

Chapter

7.

Entitlement

service

plug-ins

111

Credential

attributes

entitlement

service

This

class

of

entitlement

service

is

designed

to

provide

attributes

to

the

authorization

credential

building

process

performed

by

azn_id_get_creds().

When

a

credential

attribute

entitlement

service

is

configured,

azn_id_get_creds()

calls

out

to

this

service

using

the

azn_entitlement_get_entitlements()

interface

and

then

inserts

the

returned

attributes

into

the

authorization

credential

it

is

building.

This

class

of

entitlement

service

conforms

to

the

general

requirements

of

all

authorization

entitlement

services.

There

are

no

specific

requirements

placed

upon

credential

attribute

entitlement

services

since

they

are

called

by

azn_id_get_creds()

with

no

specific

parameters

other

than

those

passed

to

a

normal

entitlement

service.

Credential

attribute

retrieval

entitlement

services

are

configured

in

the

same

way

as

other

entitlement

services.

To

have

the

azn_id_get_creds()

call

your

credential

attributes

entitlement

service

when

authorization

credentials

are

being

built,

you

must

specify

the

service

ID

of

the

entitlement

service

as

a

value

for

the

configuration

file

entry

cred-attribute-entitlement-services

or

specify

the

azn_initialize()

application

interface

using

the

initialization

attribute

azn_init_cred_attribute_entitlement_services.

Multiple

service

IDs

can

be

specified

in

this

way.

They

are

called

in

the

order

in

which

they

are

specified

in

the

configuration

file

or

the

initialization

parameter.

The

Tivoli

Access

Manager

authorization

ADK

package

includes

an

example

entitlement

service.

The

source

file

is

azn_ent_svc_demo.c.

This

example

file

shows

how

an

entitlement

service

can

be

written

to

perform

the

function

of

a

standard

authorization

API

entitlement

service

to

be

called

from

azn_entitlement_get_entitlements().

This

example

file

also

shows

how

an

entitlement

service

can

perform

the

functions

of

a

dynamic

ADI

retrieval

service

and

a

credential

attribute

retrieval

service.

The

following

section

describes

a

credential

attributes

entitlement

service

that

is

supplied

with

the

Tivoli

Access

Manager

authorization

runtime

package

and

that

can

be

used

to

retrieve

attributes

from

the

Tivoli

Access

Manager

user

registry.

This

section

contains

the

following

topics:

v

“Registry

attribute

entitlement

service

overview”

on

page

113

v

“Registry

attribute

entitlement

service

configuration”

on

page

115

v

“Migration

from

a

previous

release”

on

page

118

v

“Configuring

a

credential

attributes

entitlement

service

as

a

dynamic

ADI

retrieval

service”

on

page

119

112

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Registry

attribute

entitlement

service

overview

This

entitlement

service

retrieves

attributes

and

values

from

the

user

registry.

This

entitlement

service

is

a

shared

library

that

is

dynamically

loaded

during

the

authorization

API

application

initialization.

The

attributes

that

are

retrieved

from

the

user

registry

can

be

utilized

in

the

following

ways:

v

To

add

extended

attributes

to

the

user

credential

v

To

use

registry

data

during

an

authorization

rule

evaluation

v

For

any

other

application-specific

purpose

that

can

utilize

an

attribute

list

retrieved

by

either

azn_id_get_creds()

or

azn_entitlement_get_entitlements()..

When

using

this

entitlement

service

to

provide

data

for

customizing

user

credentials,

the

administrator

must

specify

which

attributes

are

to

be

added

to

the

credential.

The

attributes

must

be

declared

in

the

application

configuration

file

or

in

an

entitlement

service

configuration

file,

or

passed

to

azn_entitlement_get_entitlements()

in

the

input

parameter

app_context.

Tivoli

Access

Manager,

when

asked

to

build

a

credential

for

a

user,

maps

these

configuration

file

entries

to

Tivoli

Access

Manager

attribute

names.

For

each

name,

the

entitlement

service

retrieves

the

corresponding

value

from

the

user

registry,

and

the

new

attribute

name/value

pairs

are

added

to

the

credential

attribute

list.

The

process

flow

is:

1.

The

application

starts

and

initializes

the

authorization

API.

During

initialization

the

authorization

API

loads

any

entitlement

services

that

are

configured.

2.

The

application

calls

azn_id_get_creds()

to

obtain

a

credential

for

the

client.

This

function

call

looks

for

a

list

of

credential

attribute

entitlement

service

IDs

to

call.

When

one

or

more

service

IDs

are

found,

the

function

calls

out

to

the

entitlement

service

for

each

service

ID.

3.

The

service

dispatcher

loads

the

registry

attribute

entitlement

service

(as

identified

by

a

service

ID

for

a

credential

attribute

entitlement

service)

with

a

parameter

that

specifies

a

configuration

file

name.

The

configuration

file

contains

the

name/value

(also

called

tag/value)

attributes

to

retrieve.

4.

The

service

takes

the

values

from

the

registry

and

adds

them

into

an

authorization

API

attributes

list.

The

attribute

names

are

made

from

the

tags

configured

in

the

configuration

file.

The

values

are

the

values

in

the

user

registry.

The

entitlement

service

returns

this

list

to

the

authorization

API.

5.

The

azn_id_get_creds()

function

adds

this

attribute

list

as

part

of

the

credential

and

returns

to

the

caller.

The

attributes

retrieved

by

the

credential

attributes

entitlement

service

do

not

necessarily

have

to

be

placed

directly

into

a

user

credential.

These

name/value

pairs

from

the

user

registry

are

placed

into

an

attribute

list,

which

can

then

be

used

for

purposes

other

than

adding

information

to

a

user

credential.

In

this

case,

the

process

flow

is:

1.

The

application

starts

and

initializes

the

authorization

API.

During

initialization

the

authorization

API

loads

any

entitlement

services

that

are

configured

2.

The

application

calls

azn_entitlement_get_entitlements(),

specifying

the

service

ID

of

the

registry

attribute

retrieval

service,

in

order

to

obtain

the

attribute

list.

The

authorization

API

initialization

algorithm

enables

users

to

override

configuration

information

specified

in

a

configuration

file.

The

caller

can

do

Chapter

7.

Entitlement

service

plug-ins

113

this

through

either

command

line

arguments

or

through

API

initialization

parameters.

Use

the

app_context

input

parameter

to

azn_entitlement_get_entitlements()

to

specify

exactly

which

objects

are

to

be

retrieved.

By

this

method,

you

do

not

have

to

retrieve

all

objects

for

the

user.

Alternatively,

the

list

of

attributes

can

also

be

configured

in

a

file,

and

the

file

name

passed

as

an

argument

to

the

entitlement

service

library

at

load

time.

3.

The

entitlement

service

is

initialized

with

a

parameter

that

specifies

a

configuration

file

name.

The

configuration

file

contains

the

name/value

(also

called

tag/value)

attributes

to

retrieve.

4.

The

registry

attribute

retrieval

service

takes

the

values

from

the

registry

and

adds

them

into

an

authorization

API

attributes

list.

The

attribute

names

are

made

from

the

tags

configured

in

the

configuration

file.

The

values

are

the

values

in

the

user

registry.

The

entitlement

service

returns

this

list

to

the

authorization

API.

5.

The

azn_entitlement_get_entitlements()

function

call

returns

the

attribute

list.

If

no

attributes

are

returned

from

the

registry,

the

attribute

list

is

returned

empty.

6.

The

application

does

whatever

it

wants

with

the

attribute

list.

114

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Registry

attribute

entitlement

service

configuration

This

section

contains

a

configuration

overview

and

a

set

of

configuration

steps:

v

“Configuration

overview”

v

“Step

1

Declare

a

Service

ID

and

a

library

name”

v

“Step

2

Enable

automatic

startup

of

the

entitlement

service”

on

page

116

v

“Step

3

Specify

the

attributes

to

be

added

to

the

credential”

on

page

116

v

“Obtaining

attributes

through

an

entitlement

service

without

accessing

a

user

credential”

on

page

117

Configuration

overview

Use

of

a

credential

attribute

entitlement

service

is

specified

in

the

application

configuration

file.

The

example

configuration

file

is

aznapi.conf.

Alternatively,

you

can

specify

the

credential

attribute

entitlement

service

by

supplying

a

parameter

to

init_data

when

calling

azn_initialize()

to

initialize

the

authorization

API.

v

Attribute

List

Entry:

azn_init_cred_attribute_entitlement_services

v

Configuration

File

Entry:

cred-attribute-entitlement-services

v

Configuration

File

Stanza:

[aznapi-configuration]

Each

entry

is

part

of

a

list

of

authorization

API

entitlement

service

IDs

that

will

be

queried

by

the

azn_id_get_creds()

interface

to

compile

a

list

of

attributes

to

be

added

to

the

user

credential

while

the

credential

is

being

built.

Each

service

ID

is

queried

in

the

order

of

declaration

here

and

the

attributes

returned

in

the

entitlements

parameter

are

inserted

into

the

credential

attribute

list

of

each

principal

built

with

the

azn_id_get_creds()

call.

cred-attribute-entitlement-services

=

myEntSvcID

cred-attribute-entitlement-services

=

myOtherEntSvcID

This

mechanism

cannot

be

used

to

override

the

read-only

attributes

in

the

credential

attribute

list,

which

includes

the

principal

name,

principal

UUID,

and

others.

The

read-only

attributes

are

listed

in

“Modifying

the

contents

of

a

credential”

on

page

64.

The

exception

to

this

rule

is

for

the

azn_cred_groups

attribute.

If

this

attribute

is

found

in

the

list

of

returned

attributes,

then

azn_id_get_creds()

will

first

determine

whether

the

application

has

loaded

the

credential

group

modification

authorization

service,

azn_mod_rad

If

this

specific

group

modification

service

has

been

loaded,

azn_id_get_creds()

automatically

calls

the

service

to

add

the

new

groups

to

the

credential.

Administrators

who

do

not

want

this

capability

should

ensure

that

the

azn_mod_rad

service

is

not

and

cannot

be

loaded

by

the

application.

Note:

For

more

information

on

this

service,

see

“Credentials

modification

service”

on

page

101.

Step

1

Declare

a

Service

ID

and

a

library

name

A

user-defined

service

ID

specifies

this

service.

For

example,

MY_CRED_ATTRS_SVC.

The

value

assigned

to

this

ID

can

be

either

the

service,

or

an

entirely

different

one

written

by

an

authorization

API

application

developer.

The

value

for

the

registry

attribute

retrieval

service

that

is

part

of

the

Tivoli

Access

Manager

runtime

environment

is

azn_ent_cred_attrs.

For

example:

[aznapi-entitlement-services]

MY_CRED_ATTRS_SVC

=

azn_ent_cred_attrs

YOUR_CRED_ATTRS_SVC

=

name_of_shared_library&

name_of_configuration_file

Chapter

7.

Entitlement

service

plug-ins

115

The

command-line

arguments

are

optional.

The

Tivoli

Access

Manager

shared

library

takes

one

optional

argument.

This

argument

must

be

the

name

of

the

configuration

file

that

contains

the

attributes

stanzas.

Note

that

this

optional

argument

takes

precedence

over

any

entry

that

you

might

have

configured

in

the

application

configuration

file.

Note:

For

optimum

security,

ensure

that

this

service

is

installed

with

permissions

that

permit

only

the

owner

of

the

service

to

modify

it.

Step

2

Enable

automatic

startup

of

the

entitlement

service

Services

to

be

automatically

called

by

azn_id_get_creds()

must

also

be

listed

in

the

[aznapi-configuration]

stanza.

Services

listed

under

this

stanza

are

enabled

and

called

automatically.

To

specify

that

the

service

ID

refers

to

a

credential

attributes

entitlement

service,

you

must

use

the

keyword

cred-attributes-entitlement-services.

For

example:

[aznapi-configuration]

cred-attribute-entitlement-services

=

MY_CRED_ATTRS_SVC

cred-attribute-entitlement-services

=

YOUR_CRED_ATTRS_SVC

Step

3

Specify

the

attributes

to

be

added

to

the

credential

The

attributes

to

be

added

to

the

credential

are

configured

in

several

stanzas.

This

information

can

go

in

the

application

configuration

file,

or

as

a

separate

file

that

is

passed

in

to

the

service

[MY_CRED_ATTRS_SVC]

user

=

azn_cred_authzn_id

group

=

cn=enterprise,

o=tivoli

[MY_CRED_ATTRS_SVC:user]

credattrs_lastname

=

sn

credattrs_employeetype

=

employeetype

credattrs_address

=

homepostaladdress

credattrs_email

=

mail

[MY_CRED_ATTRS_SVC:group]

credattrs_businesscategory

=

businesscategory

The

stanza

name

[MY_CRED_ATTRS_SVC]

is

the

Service

ID.

Inside

this

stanza

are

sources

of

attributes

to

be

retrieved.

The

source

names,

such

as

user

and

group

are

used

to

identify

the

source

location

in

the

registry

and

are

defined

by

the

user.

The

values

for

these

sources

are

registry

identifiers

that

exist

in

the

registry.

The

values

can

be

existing

credential

attribute

names.

If

this

is

the

case,

the

service

automatically

finds

and

uses

the

respective

values.

Configure

the

registry

attribute

for

each

of

the

sources

in

a

separate

stanza.

The

syntax

of

the

separate

stanza

is

the

service

ID

library

name

followed

by

a

colon

(:)

and

then

the

source

name.

This

connection

is

necessary

because

more

than

one

service

can

be

configured

in

the

same

file.

The

configuration

file

entries

contain

mappings

of

user

registry

attribute

to

user-defined

credential

attributes.

For

example,

in

an

LDAP

user

registry,

the

DN

for

a

user

could

be

cn=joeuser,

o=tivoli

For

this

user,

the

LDAP

user

registry

entries

could

be:

116

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

sn=Smith

employeetype=bankteller

homepostaladdress="3004

Mission

St

Santa

Cruz

CA

95060"

[email protected]

businesscategory=finance

Using

the

example

configuration

entries

shown

above,

the

attribute

list

returned

by

either

azn_id_get_creds()

or

azn_entitlement_get_entitlements()

would

have

the

following

entries

Attribute

name

Attribute

value

credattrs_lastname

Smith

credattrs_employeetype

bankteller

credattrs_address

3004

Mission

St

Santa

Cruz

CA

95060

credattrs_email

[email protected]

credattrs_businesscategory

finance

Note

that

the

service,

source,

and

attributes

can

be

multi-valued.

If

you

specify

the

same

attribute

name

as

a

stanza

entry

keyword,

then

the

attributes

retrieved

will

be

added

as

a

multi-valued

attribute

even

when

they

come

from

different

sources.

For

example,

more

than

one

entitlement

service

can

be

chained

together.

Chaining

enables

values

retrieved

from

one

service

to

be

used

as

input

values

for

another

service.

Likewise,

attributes

can

be

retrieved

from

more

than

one

DN

in

the

user

registry.

Thus,

using

the

example

above,

you

could

add

values

from

multiple

users

(DNs)

to

one

credattrs_businesscategory

attribute,

if

you

wanted

a

list

of

all

the

businesscategory

entries

for

a

group

of

users.

For

example,

if

you

want

to

build

an

attribute

called

myemployeeinfo

to

add

to

the

credential,

and

you

want

this

attribute

to

contain

the

last

name

and

employee

type

of

everyone

who

authenticates,

you

could

then

define

the

following:

[myID]

source

=

azn_cred_authzn_id

[myID:source]

myemployeeinfo

=

lastname

myemployeeinfo

=

employeetype

Obtaining

attributes

through

an

entitlement

service

without

accessing

a

user

credential

You

can

use

the

azn_entitlement_get_entitlements()

call

to

use

the

registry

attribute

entitlement

service

without

accessing

the

user

credential,

as

described

in

“Registry

attribute

entitlement

service

overview”

on

page

113.

To

do

this,

you

need

to

add

the

attribute

azn_ent_cred_attrs_attribute

to

the

app_context

attribute

list

that

is

passed

as

an

input

parameter

to

azn_entitlement_get_entitlements().

The

values

for

attribute

name

azn_ent_cred_attrs_attribute

must

be

of

the

form

registry_id:attribute.

For

example,

a

value

for

azn_ent_cred_attrs_attirbute

would

be:

azn_cred_authzn_id:employeetype

The

format

of

the

returned

entitlements

attribute

list

is:

name

=

registry_id:attribute,

value

=

value

Chapter

7.

Entitlement

service

plug-ins

117

Migration

from

a

previous

release

Developers

that

have

used

the

tag/value

function

in

previous

versions

of

Tivoli

Access

Manager

can

migrate

their

existing

deployments

to

Version

5.1.

The

migration

requires

one

manual

step:

v

The

stanza

[ldap-ext-cred-tags]

and

its

contents

must

be

manually

copied

from

the

previous

version

pd.conf

to

the

new

application

configuration

file.

For

example,

webseald.conf,

or

aznapi.conf,

or

your_app_name.conf.

v

Tivoli

Access

Manager

will

automatically

migrate

the

data

to

the

new

information

format

For

example,

in

the

old

pd.conf

file:

[ldap-ext-cred-tags]

attribute1

=

address

attribute2

=

mail

The

information

above

is

migrated

in

the

new

configuration

files,

where

the

following

new

entries

are

added

or

created

as

needed:

[aznapi-configuration]

cred-attribute-entitlement-services

=

LEGACY_ldap-ext-cred-tags

[aznapi-entitlement-services]

LEGACY_ldap-ext-cred-tags

=

azn_ent_cred_attrs

[LEGACY_ldap-ext-cred-tags]

registry_id

=

azn_cred_registry_id

[LEGACY_ldap-ext-cred-tags:registry_id]

tagvalue_attribute1

=

address

tagvalue_attribute2

=

mail

Note

that

the

original

pd.conf

file

is

not

changed.

The

source

name

DN

comes

from

the

caller

credential

attribute

azn_cred_registry_id.

The

prefix

tagvalue_

is

prepended

to

each

source

attribute

name

to

ensure

backwards

compatibility

with

the

previous

version.

Note

that

in

the

previous

version,

the

prefix

was

hard-coded.

Note

that

the

attribute

value

azn_cred_registry_id

can

be

changed

to

a

more

generic

keyword,

such

as

azn_cred_authzn_id

after

migration

is

completed.

This

change

would

reflect

the

change

from

the

previous

version

support

(LDAP

only)

to

the

current

version

support

(more

than

LDAP).

118

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Configuring

a

credential

attributes

entitlement

service

as

a

dynamic

ADI

retrieval

service

The

credential

attributes

entitlement

service

can

be

used

by

the

authorization

rules

evaluator

to

retrieve

registry

data

dynamically

for

rule

evaluation.

No

new

interfaces

are

required.

A

special

input

parameter

azn_perminfo_rules_adi_request

indicates

that

this

is

a

dynamic

ADI

request.

The

result

is

returned

in

a

specific

format

as

required

by

the

attribute

retrieval

entitlement

service

interface.

In

this

case,

the

entitlement

service

ID

is

added

as

an

entry

to

the

dynamic-adi-entitlement-service

entry

in

the

[aznapi-configuration]

stanza.

The

service

can

be

called

from

multiple

applications.

To

use

credential

attributes

entitlement

service

as

an

attribute

retrieval

service,

complete

the

following

steps:

v

“Step

1

Define

a

policy

to

be

enforced

as

an

authorization

rule”

v

“Step

2

Declare

a

Service

ID

and

a

library

name”

v

“Step

3

Enable

automatic

startup

of

the

entitlement

service

as

a

dynamic

ADI

retrieval

service”

on

page

120

v

“Step

4

Define

a

namespace

in

the

resource

manager

configuration

file”

on

page

120

v

“Step

5—

Define

the

namespace

in

the

policy

server

configuration

file”

on

page

120

v

“Step

6:

Create

an

authorization

rule”

on

page

121

You

can

also

obtain

entitlements

without

calling

azn_id_get_creds():

v

“Obtaining

entitlements

through

a

dynamic

ADI

retrieval

service

without

accessing

a

user

credential”

on

page

121

Step

1

Define

a

policy

to

be

enforced

as

an

authorization

rule

To

use

the

authorization

rules

engine,

you

must

define

a

policy

that

will

be

used

to

test

a

condition

when

evaluating

an

access

request.

For

example,

the

policy

could

be

stated

as

follows:

Allow

access

to

this

protected

resource

only

if

the

user

requesting

access

has

an

LDAP

user

registry

that

has

a

UID

entry

with

the

value

joeuser.

This

policy

will

need

to

be

expressed

as

configuration

file

settings

and

as

an

authorization

rule.

These

actions

are

taken

by

the

remaining

steps

in

this

set

of

instructions.

These

configuration

steps

will

use

the

following

information:

v

You

can

use

the

azn_cred_registry_id

permission

info

attribute

in

the

user

credential

to

obtain

the

user

registry

entry

for

the

user.

In

the

case

of

an

LDAP

user

registry,

azn_cred_registry_id

contains

the

Distinguished

Name

(DN).

v

LDAP

user

registry

entries

consist

of

name=value

pairs.

There

can

be

a

UID=user_name.

In

this

case,

the

rule

will

be

looking

for

UID=joeuser.

Step

2

Declare

a

Service

ID

and

a

library

name

A

user-defined

service

ID

specifies

this

service.

For

example,

MY_CRED_ATTR_SVC.

The

value

assigned

to

this

ID

can

be

either

the

default

credentials

attribute

entitlement

service,

or

an

entirely

different

one

written

by

an

authorization

API

application

developer.

The

default

credentials

attribute

entitlement

service

which

is

part

of

the

Tivoli

Access

Manager

runtime

environment

is

azn_ent_cred_attrs.

Chapter

7.

Entitlement

service

plug-ins

119

For

example:

[aznapi-entitlement-services]

MY_CRED_ATTRS_SVC

=

azn_ent_cred_attrs

The

command-line

arguments

are

optional.

The

Tivoli

Access

Manager

built-in

credentials

attribute

entitlement

service

takes

one

optional

argument.

This

argument

must

be

the

name

of

the

configuration

file

that

contains

the

attributes

stanzas.

Note

that

this

optional

argument

takes

precedence

over

any

entry

that

you

might

have

configured

in

the

application

configuration

file.

Note:

For

optimum

security,

ensure

that

this

service

is

installed

with

permissions

that

permit

only

the

owner

of

the

service

to

modify

it.

Step

3

Enable

automatic

startup

of

the

entitlement

service

as

a

dynamic

ADI

retrieval

service

Services

to

be

automatically

called

by

azn_id_get_creds()

must

also

be

listed

in

the

[aznapi-configuration]

stanza.

Services

listed

under

this

stanza

are

enabled

and

called

automatically.

The

credential

attributes

entitlement

service

can

optionally

be

called

by

the

rules

evaluator

as

a

attribute

retrieval

service.

To

specify

that

the

service

ID

refers

to

a

credential

attributes

entitlement

service

that

is

being

used

as

an

attribute

retrieval

service,

you

must

use

the

keyword

dynamic-adi-entitlement-services.

For

example:

[aznapi-configuration]

dynamic-adi-entitlement-services

=

MY_CRED_ATTRS_SVC

Step

4

Define

a

namespace

in

the

resource

manager

configuration

file

The

resource

manager

is

the

application

that

makes

the

access

decision

by

calling

azn_decision_access_allowed()

or

azn_decision_access_allowed_ext().

The

resource

manager

can

be

an

application

(such

as

WebSEAL)

provided

by

Tivoli

Access

Manager

or

can

be

an

authorization

API

client.

1.

Add

entries

to

the

[aznapi-configuration]

stanza

to

specify

the

namespace

that

will

be

used

by

the

authorization

rules

evaluator.

In

the

following

example,

the

text

in

bold

has

been

added

to

the

default

template:

[aznapi-configuration]

xsl-stylesheet-prolog

=

<xml

version=’1.0’

encoding=’UTF-8’?>

>

<xsl:stylesheet

xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’

xmlns:azn_cred_registry_id=’http://my.company.com’

version=’1.0’>

<xsl:template

match=’text()’>

</xsl:template>

2.

Define

the

namespace

in

the

[xmladi-attribute-definitions]

stanza:

[xmladi-attribute-definitions]

xmlns:azn_cred_registry_id=

"http://my.company.com"

appID

=

"my

app

id"

Step

5—

Define

the

namespace

in

the

policy

server

configuration

file

When

the

policy

server

runs,

it

builds

the

authorization

database.

When

building

this

database,

the

policy

server

builds

authorization

rules

based

on

the

namespaces

that

are

defined

in

the

policy

server

configuration

file,

ivmgrd.conf.

Add

the

same

configuration

file

entries

to

the

policy

server

configuration

file.

[aznapi-configuration]

xsl-stylesheet-prolog

=

<xml

version=’1.0’

encoding=’UTF-8’?>

<xsl:stylesheet

xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’

xmlns:azn_cred_registry_id=’http://my.company.com’

version=’1.0’>

<xsl:template

match=’text()’>

</xsl:template>

120

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[xmladi-attribute-definitions]

xmlns:azn_cred_registry_id=

"http://my.company.com"

appID

=

"my

app

id"

Step

6:

Create

an

authorization

rule

Create

a

rule

that

identifies

the

user

whose

credential

information

must

be

accessed

for

whom

authorization

rule

information.

The

rule

says

to

grant

access

to

the

specified

user,

when

the

UID

of

the

user

is

an

attribute

of

the

credential.

This

attribute

value

is

obtained

from

the

azn_cred_registry_id:

<xsl:if

test=’azn_cred_registry_id:uid="joeuser"’>!TRUE!</xsl:if>

The

azn_cred_registry_id

specifies

a

user

DN.

The

entitlement

service

retrieves

the

user

registry

entries

for

the

DN.

The

authorization

rule

engine

then

checks

to

see

if

the

value

of

the

UID

entry

is

joeuser.

If

it

is,

access

is

allowed.

If

it

is

not,

access

is

denied.

You

can

use

either

the

Web

Portal

Manager

utility

or

pdadmin

to

create

authorization

rules.

For

more

information,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

Obtaining

entitlements

through

a

dynamic

ADI

retrieval

service

without

accessing

a

user

credential

You

can

use

the

azn_entitlement_get_entitlements()

call

to

use

the

credential

attributes

entitlement

service

without

accessing

the

user

credential,

as

described

in

“Registry

attribute

entitlement

service

overview”

on

page

113.

You

can

also

use

azn_entitlement_get_entitlements()

to

use

the

credential

attributes

entitlement

service

as

a

dynamic

ADI

retrieval

service.

To

do

this,

you

need

to

add

the

permission

attribute

azn_perminfo_rules_adi_request

to

the

app_context

attribute

list

that

is

passed

as

an

input

parameter

to

azn_entitlement_get_entitlements().

The

values

for

attribute

name

azn_perminfo_rules_adi_request

must

be

of

the

form

source:attr.

For

example,

using

the

policy

defined

in

“Step

1

Define

a

policy

to

be

enforced

as

an

authorization

rule”

on

page

119,

the

value

for

azn_perminfo_rules_adi_request

would

be:

azn_cred_registry_id:uid

Chapter

7.

Entitlement

service

plug-ins

121

122

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

8.

Administration

service

plug-ins

This

chapter

contains

the

following

topics:

v

“Understanding

administration

service

plug-ins”

on

page

124

v

“Configuring

administration

service

plug-ins”

on

page

127

v

“Initializing

and

shutting

down

administration

service

plug-ins”

on

page

129

v

“Using

an

administration

service

plug-in”

on

page

130

v

“Error

codes”

on

page

132

v

“Deploying

an

administration

service

plug-in”

on

page

135

©

Copyright

IBM

Corp.

2000,2003

123

Understanding

administration

service

plug-ins

The

administration

service

makes

available

to

applications

several

administrative

functions

that

operate

on

objects

in

the

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

protected

object

namespace.

Application

developers

can

write

a

plug-in

to

the

administration

service

that

applies

these

administrative

functions

to

objects

in

a

section

of

the

namespace

that

is

specific

to

the

application.

Through

the

plug-in,

application

developers

can

also

specify

administrative

actions

that

are

specific

to

objects

in

the

application-specific

namespace.

The

administration

service

differs

from

other

authorization

API

services

in

that

it

does

not

provide

direct

access

to

the

administrative

function

to

the

calling

applications.

Instead,

the

calling

applications

use

the

Tivoli

Access

Manager

administration

API

to

send

a

request.

For

example,

the

administration

service

functions

are

called

in

response

to

administrative

operations

that

are

issued

by

a

calling

application

such

as

the

pdadmin

command

line

interface,

the

Tivoli

Access

Manager

Web

Portal

Manager

graphical

console,

or

a

third-party

application

that

has

been

written

to

use

the

Tivoli

Access

Manager

administration

API.

The

administration

service

maps

the

administration

API

calls

to

the

corresponding

administration

service

API

calls,

and

carries

out

the

requested

action.

There

is

a

one-to-one

mapping

between

several

administration

API

functions

and

a

corresponding

administration

service

function.

The

administration

service

supports

dynamic

object

creation

and

task

execution

by

adding

an

externalized

administration

family

of

functions

to

the

authorization

API.

The

name

of

each

of

these

functions

is

prefixed

by

azn_admin.

You

implement

these

functions

within

libraries

that

are

registered

with

the

Authorization

administration

service

by

an

authorization

API

client

application.

124

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

In

Figure

4,

the

user

application

or

GUI

sends

an

administrative

operation

through

the

Tivoli

Access

Manager

administration

API

to

the

Tivoli

Access

Manager

policy

server.

The

Tivoli

Access

Manager

policy

server

forwards

the

call

to

the

administration

service

interface

of

the

authorization

API

resource

manager

application

that

is

configured

to

administer

the

target

protected

object

space

for

the

administration

request.

The

service

dispatcher

within

the

authorization

API

resource

manager

application

calls

the

applicable

service

interface

of

all

administration

service

plug-ins

that

have

registered

to

service

this

type

of

request.

Each

plug-in’s

service

interface

is

called

in

turn

by

the

dispatcher

and

the

results

are

returned

to

the

Tivoli

Access

Manager

policy

server.

The

Tivoli

Access

Manager

policy

server

then

returns

the

results

to

the

calling

application.

Note

that

the

diagram

above

shows

three

different

administration

service

plug-ins.

You

do

not

need

to

implement

more

than

one

plug-in,

but

multiple

plug-ins

are

supported.

Do

not

confuse

the

Tivoli

Access

Manager

authorization

administration

service

with

the

Tivoli

Access

Manager

administration

API.

The

Tivoli

Access

Manager

Access ManagerPolicy Server

AdministrationService Plug-in

A

database

AdministrationService Plug-in

B

AdministrationService Plug-in

C

database database

Access Manager Administration API

pdadminAccess

Manager WebPortal Manager

UserApplication or

GUI

Service Dispatcher

Authorization APIAdministration

Service APIInterface

AuthorizationEngine

Figure

4.

The

administration

service

plug-in

to

the

authorization

API

Chapter

8.

Administration

service

plug-ins

125

administration

API

provides

a

series

of

programmatic

interfaces

that

a

calling

application

can

use

to

send

requests

to

the

Tivoli

Access

Manager

policy

server.

In

most

cases,

applications

can

use

the

administration

API

independent

from

any

use

of

the

authorization

administration

service.

However,

application

developers

can

use

the

authorization

administration

service

plug-in

to

provide

“back-end”

authorization

functions

that

can

leverage

administration

API

functions

to

execute

application-specific

administrative

commands.

This

is

described

in

more

detail

in

“Using

an

administration

service

plug-in”

on

page

130.

Most

of

the

Tivoli

Access

Manager

administration

API

functions

provide

programmatic

equivalents

to

each

of

the

pdadmin

command

line

interfaces.

The

names

of

the

administration

API

functions

begin

with

the

ivadmin_

prefix.

The

functions

are

described

in

the

ivadminapi.h

header

file.

For

more

information

on

the

Tivoli

Access

Manager

administration

API,

see

the

IBM

Tivoli

Access

Manager

for

e-business

Administration

C

API

Developer

Reference.

126

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Configuring

administration

service

plug-ins

You

can

configure

an

administration

service

plug-in

either

manually

or

programmatically.

Manual

configuration

is

accomplished

by

setting

values

in

a

configuration

file.

Programmatic

configuration

is

accomplished

by

passing

attributes

to

the

administration

API

at

API

initialization.

These

methods

correspond

directly

to

the

registration

steps

used

by

all

types

of

authorization

service

plug-ins,

as

described

in

“Constructing

a

service

definition”

on

page

82.

Configuration

of

an

administration

service

plug-in

is

describe

d

in

the

following

sections:

v

“Creating

a

configuration

file

entry

for

an

administration

service”

v

“Configuring

an

administration

service

programmatically”

on

page

128

Creating

a

configuration

file

entry

for

an

administration

service

Administration

service

plug-ins

are

typically

configured

in

aznapi.conf,

under

the

following

stanza:

[aznapi-admin-services]

The

administration

services

definition

syntax

is

as

follows:

<service-id>

=

<plug-in

location>

[-pobj

<protected

object

hierarchy

name>]

[&

<plug-in

parameters>]

The

protected

object

hierarchy

name

is

an

optional

parameter.

This

parameter

refers

to

either

the

name

of

a

protected

object

space

(hierarchy)

or

simply

to

a

protected

object.

The

authorization

service

takes

the

remainder

of

the

string

following

the

ampersand

&,

breaks

the

string

up

into

white

space

separated

tokens,

and

passes

the

tokens

directly

to

the

administration

service’s

initialization

interface,

azn_svc_initialize(),

in

the

argv

array

parameter.

The

number

of

strings

in

the

argv

array

is

indicated

by

the

argc

function

parameter.

Here

is

an

example

configuration

file

entry:

[aznapi-admin-services]

adminsvc1

=

/lib/libadminsvc1.so

-pobj

/Printers/printer1

&

-printer

sequoia

adminsvc2

=

/lib/libadminsvc2.so

-pobj

/Printers/printer2

&

-printer

sequoia

adminsvc3

=

/lib/libadminsvc3.so

&

-printer

sequoia

adminsvc4

=

/lib/libadminsvc4.so

As

shown

in

the

example

above,

an

authorization

API

application

can

register

more

than

one

administration

service

plug-in,

but

each

must

have

a

unique

service

ID.

Each

authorization

service

plug-in

passes

the

administration

service

definitions

to

the

Tivoli

Access

Manager

policy

server

during

the

azn_initialize()

call.

This

enables

the

Tivoli

Access

Manager

policy

server

to

know

the

mapping

of

a

protected

object

hierarchy

name

to

the

authorization

API

client

application

that

has

registered

an

administration

service

plug-in

for

it.

This

is

important

for

object

space

oriented

administration

API

interfaces

which

operate

on

the

objects

within

the

object

space.

Since

this

mapping

is

global,

care

must

be

taken

to

specify

protected

object

space

mappings

that

do

not

conflict

across

authorization

API

client

applications.

Thus,

protected

object

hierarchy

names

must

be

unique

for

each

administration

service

plug-in

within

the

scope

of

an

authorization

API

application.

Multiple

Chapter

8.

Administration

service

plug-ins

127

authorization

API

application

instances,

however,

can

register

to

service

the

same

protected

object

hierarchy

name(s).

This

can

be

used

to

provide

failover

support

for

administration

of

an

object

space

in

the

event

that

a

particular

authorization

API

application

server

fails.

Configuring

an

administration

service

programmatically

The

authorization

API

header

file

ogauthzn.h

contains

a

service

definition

attribute:

azn_string_t

azn_init_admin_svc

Complete

the

following

steps

to

use

this

service

definition

attribute

to

configure

an

administration

service

plug-in.

1.

Use

the

azn_attrlist_add_entry()

API

to

assign

to

the

init_data

attribute

list

as

many

values

to

the

azn_init_admin_svc

attribute

as

the

number

of

Administrative

service

plug-ins

needed.

These

values

are

expressed

as

strings,

and

need

to

conform

to

the

administration

service

definition

syntax

specified

in

“Initialization

and

configuration

of

service

plug-ins”

on

page

82.

Ensure

that

protected

object

hierarchies

that

are

specified

as

part

of

the

service

definition

attribute

are

unique.

See

the

discussion

just

above

in

“Creating

a

configuration

file

entry

for

an

administration

service”

on

page

127.

2.

Pass

the

init_data

attribute

to

the

azn_initialize()

call

to

ensure

that

the

specified

administration

service

plug-ins

are

loaded.

128

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Initializing

and

shutting

down

administration

service

plug-ins

Each

administration

service

plug-in

is

a

standalone

module

that

is

dynamically

loaded

into

the

authorization

service.

The

authorization

API

service

plug-in

model

provides

standard

interfaces

to

the

service

dispatcher

to

initialize

and

shut

down

all

types

of

service

plug-ins.

Developers

of

administration

service

plug-ins

should

provide

the

standard

functions.

See

the

following

sections:

v

“Initialization

and

configuration

of

service

plug-ins”

on

page

82

v

“Shut

down”

on

page

92

For

more

information,

see

the

reference

pages

for

“azn_svc_initialize()”

on

page

244

and

“azn_svc_shutdown()”

on

page

249.

Chapter

8.

Administration

service

plug-ins

129

Using

an

administration

service

plug-in

The

administration

service

supports

the

following

authorization

API

functions:

Function

Description

azn_admin_get_object()

Retrieves

a

potential

protected

object.

Tests

for

the

existence

of

a

protected

object.

azn_admin_get_objectlist()

Accesses

the

administration

service

to

provide

a

list

of

all

potential

protected

objects

that

are

children

of

the

specified

parent

object.

azn_admin_perform_task()

Instructs

the

service

to

perform

an

administration

task.

The

service

returns

the

results

of

the

task.

azn_admin_get_tasklist()

Returns

a

list

of

all

the

supported

administration

tasks.

Each

of

the

functions

above

maps

to

an

equivalent

administration

API

function

and

an

equivalent

pdadmin

command

line

interface.

The

mappings

are

shown

in

the

table

below.

Authorization

API

administration

Function

Administration

API

function

pdadmin

command

line

interface

azn_admin_get_object()

ivadmin_protobj_get2()

pdadmin

object

show

object_name

azn_admin_get_objectlist()

ivadmin_protobj_list3()

pdadmin

object

list

object_name

pdadmin

object

listandshow

object_name

azn_admin_perform_task()

ivadmin_server_performtask()

pdadmin

server

task

server_name

task

azn_admin_get_tasklist()

ivadmin_server_gettasklist()

pdadmin

server

listtasks

server_name

The

Tivoli

Access

Manager

policy

server

uses

these

mappings

to

redirect

the

administration

API

calls

(ivadmin_*)

and

the

pdadmin

command

lines

that

correspond

to

the

azn_admin_get_object()

and

azn_admin_get_objectlist()

APIs

to

the

appropriate

administration

service

plug-in.

When

processing

the

administration

APIs

(ivadmin_*)

and

the

pdadmin

command

lines

that

correspond

to

the

azn_admin_perform_task()

and

azn_admin_get_tasklist()

APIs,

the

Tivoli

Access

Manager

policy

server

just

forwards

them

as

a

single

unparsed

string

to

the

corresponding

authorization

API

client

application.

An

authorization

API

administration

service

should

provide

a

server

task

to

handle

help

requests

for

every

command

it

supports.

A

valid

response

should

be

produced

for

any

pdadmin

server

task

server-name

help

command-name

command

for

a

supported

command-name.

However,

in

response

to

a

pdadmin

server

task

server-name

help

command,

a

major

error

code

of

AZN_S_SVC_ADMIN_INVALID_TASK

should

be

returned,

as

the

service

does

not

know

about

other

administration

services

that

could

be

registered

for

the

same

server.

Not

all

of

the

authorization

API

administration

service

interfaces

are

relevant

to

every

Authorization

administration

service

plug-in.

Therefore,

a

result

of

not

supported

is

returned

for

each

administration

service

interface

not

implemented

by

the

authorization

service

plug-in.

The

administration

service

plug-ins

make

use

of

the

following

attributes

in

the

outdata

attribute

list

that

the

authorization

API

administration

service

interfaces

130

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

return.

Attribute

Description

azn_admin_svc_pobj

Administration

service

protected

object

attribute,

of

type

azn_string_t.

azn_admin_svc_task

Administration

service

task

attribute,

of

type

azn_string_t.

azn_admin_svc_results

Administration

service

results

attribute,

of

type

azn_string_t.

For

more

information

on

the

authorization

API

administration

functions,

see

the

following

reference

pages:

v

“azn_admin_get_object()”

on

page

224

v

“azn_admin_get_objectlist()”

on

page

226

v

“azn_admin_get_tasklist()”

on

page

228

v

“azn_admin_perform_task()”

on

page

231

Chapter

8.

Administration

service

plug-ins

131

Error

codes

This

section

contains

the

following

topics:

v

“Errors

when

registering

the

administration

service

plug-in”

v

“Errors

when

registering

administration

definitions”

on

page

132

v

“Major

errors

from

administration

service

functions”

on

page

133

v

“Minor

errors

from

administration

service

functions”

on

page

133

v

“Error

codes

specific

to

an

authorization

services

plug-in”

on

page

133

Errors

when

registering

the

administration

service

plug-in

The

authorization

API

initialization

function

azn_initialize()

fails

when

the

Authorization

administration

service

definitions

made

by

a

single

authorization

API

application

result

in

following

error

conditions:

Error

Code

Description

AZN_S_SERVICE_IS_REGISTERED

Attempted

to

register

more

than

one

service

definition

with

the

same

service-id

AZN_S_SVC_ADMIN_POBJ_ALREADY_REGISTERED

Attempted

to

register

more

than

one

service

definition

with

the

same

protected

object

hierarchy

name

AZN_S_SVC_ADMIN_POBJ_FUNC_NOT_FOUND

The

-pobj

option

is

specified

for

an

administration

service

definition,

but

the

specified

plug-in

does

not

contain

the

azn_admin_get_objectlist()

and

the

azn_admin_get_object()

functions.

When

the

-pobj

option

is

not

specified,

the

plug-in

is

not

required

to

support

either

of

these

functions.

AZN_S_SVC_ADMIN_TASK_FUNC_NOT_FOUND

The

administration

service

plug-in

supports

only

one

of

the

task

related

functions

azn_admin_get_tasklist()

and

azn_admin_perform_task().

Each

Administration

service

plug-in

must

support

either

both

the

task-related

functions

or

support

none

of

them.

AZN_S_INVALID_LISTENING_PORT

When

the

administration

service

plug-in

registration

succeeds,

but

the

ssl-listening-port

has

not

been

specified

as

part

of

the

authorization

API

initialization,

azn_initialize()

returns

this

error.

Errors

when

registering

administration

definitions

The

authorization

API

registers

the

administration

service

definitions

with

the

Tivoli

Access

Manager

policy

server

during

the

azn_initialize()

call.

The

policy

server

stores

the

registered

administration

service

definitions

in

persistent

store

and

overwrites

an

existing

registration

when

it

receives

a

new

registration

from

the

same

authorization

API

application.

When

the

authorization

API

cannot

contact

the

Tivoli

Access

Manager

policy

server

during

azn_initialize(),

it

skips

registration

of

the

specified

administration

132

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

service

definitions,

logs

a

message

describing

that

failure,

loads

the

associated

plug-ins,

and

completes

the

azn_initialize()

call.

The

failure

of

the

authorization

API

to

contact

the

Tivoli

Access

Manager

policy

server

can

occur

within

one

of

the

following

contexts:

v

The

administration

services

have

already

been

registered

with

the

policy

server.

In

this

case,

when

the

policy

server

becomes

operational

again,

any

administration

API

functions

or

pdadmin

command

lines

that

are

handled

by

the

administration

service

definitions

will

automatically

succeed

again.

v

The

administration

service

definitions

have

not

been

registered

with

the

policy

server,

because

this

was

the

first

attempt

to

register

them.

In

this

case,

the

authorization

API

must

be

re-initialized

so

that

it

can

register

the

administration

service

definitions.

Once

contact

with

the

policy

server

succeeds,

the

administration

API

functions

and

pdadmin

commands

will

succeed.

v

The

authorization

API

has

already

registered

the

administration

services

with

the

policy

server.

However,

the

service

definitions

being

registered

now

differ

from

definitions

that

are

already

registered.

In

this

case,

the

new

service

definitions

have

not

successfully

registered,

and

the

administration

API

functions

and

pdadmin

commands

will

fail

once

the

policy

server

starts.

The

authorization

API

needs

to

be

restarted.

This

causes

the

authorization

API

to

be

re-initialized,

which

results

in

the

policy

server

registering

the

new

service

definitions

and

deleting

the

old

ones.

Major

errors

from

administration

service

functions

The

authorization

service

APIs

are

not

invoked

directly

by

the

end

user.

They

are

invoked

by

policy

server

in

response

to

certain

administration

API

functions

or

pdadmin

commands.

The

administration

service

plug-ins

can

return

the

major

error

codes

specified

for

the

authorization

API,

as

well

as

those

specified

generically

for

all

authorization

service

plug-ins.

The

authorization

service

APIs

can

also

return

the

AZN_S_SVC_ADMIN_*

major

status

codes

that

are

generic

for

all

Authorization

administration

service

plug-ins.

The

authorization

API

forwards

these

return

codes

to

the

policy

server,

which

returns

them

to

the

administration

API

or

pdadmin

command.

The

final

return

code

sent

to

the

end-user

conforms

to

the

error

codes

returned

by

the

administration

API

functions

or

the

pdadmin

commands.

Minor

errors

from

administration

service

functions

The

administration

service

functions

conform

to

the

authorization

services

plug-in

model

for

using

azn_util_errorcode()

to

return

plug-in

specific

error

return

codes

within

the

16-bit

minor

error

code

portion

of

azn_status_t.

The

returned

minor

error

code

must

be

a

valid

Tivoli

Access

Manager

minor

error

code,

in

order

for

the

Tivoli

Access

Manager

policy

server

to

generate

a

message

for

it.

If

the

returned

minor

code

is

invalid,

an

error

message

of

unknown

error

is

returned

to

the

pdadmin

command

or

administration

API

function

that

issued

the

request.

For

more

information

on

authorization

service

minor

error

codes,

see

“Minor

error

codes”

on

page

90.

Error

codes

specific

to

an

authorization

services

plug-in

Administration

service

plug-ins

can

also

return

implementation-specific

return

codes

in

the

outdata

output

parameter

for

the

azn_admin_*

calls.

For

example,

the

Chapter

8.

Administration

service

plug-ins

133

functions

can

return

status

codes

of

type

unsigned

long

by

using

the

azn_attrlist_add_entry_ulong()API

to

add

unsigned

long

values

to

a

pre-defined

attribute

in

the

outdata

attribute

list.

The

administration

service

functions

can

return

results

strings

(which

are

displayed

at

the

pdadmin

CLI)

as

values

for

the

azn_admin_svc_results

attribute

of

the

outdata

attribute

list.

These

results

strings

are

forwarded

by

the

policy

server

to

the

pdadmin

command

line

interface

or

to

the

application

using

the

administration

API

functions.

The

administration

service

functions

can

also

return

other

attributes

of

their

choice.

These

attributes

are

added

to

the

outdata

attribute

list

and

directly

forwarded

to

the

caller

of

the

administration

API.

134

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Deploying

an

administration

service

plug-in

When

you

have

developed

your

administration

service

plug-in,

and

are

ready

to

deploy

it,

complete

the

following

steps:

v

Run

svrsslcfg

for

the

authorization

API

application.

Specify

the

appropriate

input

parameters.

For

more

information

on

the

svrsslcfg

command

line

utility,

see

the

IBM

Tivoli

Access

Manager

for

e-business

Command

Reference.

v

When

configuring

the

authorization

API

calling

application,

use

pdadmin

or

the

administration

API

to

create

the

application-specific

portion

of

the

protected

object

namespace.

v

Create

the

appropriate

protected

objects

under

the

application-specific

portion

of

the

protected

object

namespace.

v

Register

the

administration

service

plug-ins

for

the

protected

objects

created

in

the

previous

step.

See

“Configuring

administration

service

plug-ins”

on

page

127.

Chapter

8.

Administration

service

plug-ins

135

136

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Chapter

9.

External

authorization

service

plug-ins

This

sections

consists

of

the

following

topics:

v

“Introducing

the

external

authorization

service”

on

page

138

v

“Understanding

the

external

authorization

service”

on

page

139

v

“Configuring

an

external

authorization

service

plug-in”

on

page

143

v

“Initializing

and

shutting

down

external

authorization

service

plug-Ins”

on

page

145

v

“Obtaining

an

authorization

decision”

on

page

146

v

“Error

codes”

on

page

147

©

Copyright

IBM

Corp.

2000,2003

137

Introducing

the

external

authorization

service

The

external

authorization

service

is

a

modular

authorization

service

plug-in

that

allows

system

designers

to

supplement

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager)

authorization

with

their

own

authorization

models.

Developers

can

build

a

shared

library

object

that

implements

an

external

authorization

service.

You

can

configure

the

authorization

API

client

to

use

this

plug-in

by

ensuring

that

the

appropriate

interfaces

are

exposed

within

the

library.

The

external

authorization

service

is

implemented

as

an

authorization

API

client

so

that

the

plug-in

can

manipulate

authorization

API

data

structures

such

as

the

credentials

and

attribute

lists.

External

authorization

service

plug-ins

are

called

only

by

local-mode

authorization

API

client.

Remote-mode

authorization

API

clients

do

not

have

a

local

authorization

server

and

thus

cannot

call

out

to

an

external

authorization

service.

The

configuration

of

external

authorization

service

plug-ins

is

applicable

only

to

local-mode

authorization

API

clients.

The

external

authorization

service

plug-in

model

includes

a

Distributed

Computing

Environment

(DCE)

Remote

Procedure

Call

(RPC)

based

external

authorization

service,

for

backwards

compatibility

with

previous

versions

of

the

Tivoli

SecureWay

Policy

Director

product.

This

plug-in

transforms

the

parameters

of

the

new

plug-in

interface

into

those

used

by

the

RPC

interface

in

Policy

Director

Version

3.7

and

earlier.

Clients

that

want

to

consult

an

RPC-based

external

authorization

service

need

to

deploy

a

DCE

client

on

the

client

machine.

Configuration

of

external

authorization

service

plug-ins

is

performed

in

the

same

way

as

other

authorization

service

plug-ins.

Initialization

settings

are

specified

either

through

a

configuration

file

or

programmatically

through

the

initialization

attribute

list

of

the

azn_initialize()

function.

For

legacy

DCE-RPC

external

authorization

servers,

the

configuration

that

was

previously

stored

in

the

authorization

database

is

now

configured

for

each

local

mode

authorization

API

client.

This

configuration

information

is

passed

to

the

plug-in

as

parameters

that

are

specific

to

the

individual

plug-in.

Initialization

settings

consist

of

a

service

definition

that

specifies

a

policy

trigger

for

which

the

external

authorization

service

is

invoked,

a

weighting

that

is

assigned

in

the

access

decision

process

to

the

particular

external

authorization

service,

and

the

location

of

the

dynamically-loadable

library

module

that

performs

the

authorization

work

specific

to

the

external

authorization

service.

The

concepts

of

policy

triggers

and

weightings

are

described

later

in

this

section.

Each

external

authorization

service

plug-in

must

expose

three

interfaces

to

the

authorization

service:

v

azn_svc_intialize()

v

azn_svc_shutdown()

v

azn_svc_decision_access_allowed_ext()

The

external

authorization

service

plug-ins

follow

the

service

plug-in

model

for

returning

error

messages

by

combining

major

error

codes

and

application-specific

minor

error

codes

to

produce

valid

error

codes

that

can

be

returned

to

the

calling

applications.

138

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Understanding

the

external

authorization

service

This

section

consists

of

the

following

topics:

v

“External

authorization

service

architecture”

v

“Policy

triggers”

on

page

140

v

“Weightings”

on

page

142

External

authorization

service

architecture

The

external

authorization

service

architecture

is

derived

directly

from

the

general

authorization

service

plug-in

architecture.

The

calling

application

is

represented

by

the

authorization

API

application

object

in

the

above

diagram.

The

calling

application

sends

access

decision

information

(ADI)

to

the

authorization

engine

to

request

an

authorization

decision.

The

authorization

LDAPDatabase

OracleDatabase

Authorization API Application

OtherDatabase

EAS Plug-in A EAS Plug-in B EAS Plug-in C

Authorization API

Authorization Engine

Authorization Decision Combinator

Service Dispatcher

Figure

5.

The

external

authorization

service

architecture

Chapter

9.

External

authorization

service

plug-ins

139

engine

first

makes

an

access

decision

based

on

the

ADI

that

was

passed-in

and

on

the

credentials

of

the

requesting

user.

The

decision

is

assigned

an

integer

value

called

a

weighting.

Next,

the

Access

Decision

Combinator

is

called.

It

returns

a

weighted

access

decision

result,

based

on

calls

to

all

applicable

external

authorization

service

plug-ins.

The

Combinator

is

responsible

for

identifying

and

invoking

each

external

authorization

service

that

is

applicable

to

the

authorization

decision

request.

The

Combinator

uses

policy

trigger

information

to

call

the

service

dispatcher

to

identify

a

list

of

external

authorization

service

plug-ins

which

must

be

called.

The

Combinator

then

calls

each

external

authorization

service

in

turn.

The

permission

value

returned

from

each

call

is

multiplied

by

the

weighting

for

the

specific

EAS.

The

weighted

result

is

then

passed

to

the

Tivoli

Access

Manager

authorization

engine.

The

service

dispatcher

for

the

external

authorization

service

plug-ins

manages

the

location,

configuration,

and

loading

of

the

available

EAS

plug-ins.

The

service

dispatcher

handles

EAS

plug-ins

in

the

same

manner

as

other

types

of

plug-ins,

such

as

entitlements

services,

administration

services,

and

credentials

modification

services.

Policy

triggers

Policy

triggers

refer

to

the

set

of

policy

circumstances

that

trigger

a

particular

EAS

to

be

invoked

for

any

particular

access

decision.

In

prior

versions

of

Tivoli

Access

Manager,

an

EAS

could

only

be

triggered

if

a

predetermined

action

bit

was

present

in

the

ACL

on

the

object.

The

effect

of

this

trigger

was

much

like

protected

object

policy

in

that

the

EAS

was

always

invoked

on

that

object

if

the

predetermined

bit

was

present

in

the

ACL.

The

action

bits

used

for

EAS

triggers

could

not

be

used

for

other

purposes

and

vice-versa.

This

behavior

changed

in

Version

3.8

to

move

the

protected

object

oriented

nature

of

the

previous

ACL

trigger

mechanism

into

the

POP

policy.

This

is

done

by

using

a

trigger

attribute

that

is

attached

to

the

POP.

The

POP

object

is

a

more

suitable

place

to

store

protected

object

policy.

The

nature

of

ACL

triggers

has

changed

to

become

operation

oriented.

From

Version

3.8

onward,

the

operation

set

triggers

the

EAS

when

the

user

requests

the

exact

set

of

operations

in

the

trigger.

This

reorients

the

ACL

trigger

mechanism

to

allow

policy

administrators

to

define

policy

based

on

the

operation

that

the

user

actually

wants

to

perform

on

the

target

object.

These

triggers

are

now

called

operation-based

triggers.

Unlike

versions

prior

to

Version

3.8,

the

set

of

operations

used

to

trigger

an

EAS

can

include

multiple

operations,

or

action

bits,

and

the

bits

do

not

have

to

be

exclusive

of

bits

that

are

already

being

used

for

another

purpose

in

the

access

decision

environment.

For

example,

the

x

bit

is

used

by

many

resource

manager

applications

to

represent

the

execute

operation.

If

desired,

the

policy

administrator

may

set

a

trigger

for

this

operation

using

the

x

action

bit,

and

invoke

an

EAS

anytime

a

request

to

execute

a

target

object

is

made

upon

any

object

in

the

protected

object

space.

The

trigger

can

be

made

even

more

discriminating

by

adding

a

second

action

bit

to

the

trigger.

For

example,

adding

the

l

action

bit,

where

l

indicates

that

the

executed

program

can

return

data

(lx),

would

only

invoke

the

EAS

if

the

user

requested

that

the

target

object

execute,

and

then

return

the

data

after

doing

so.

In

this

case,

simply

requesting

that

the

target

object

be

executed

will

not

trigger

the

EAS

to

be

called.

The

operations

trigger

can

also

include

an

action

group

specification

if

action

groups

are

used

in

the

policy

implementation.

For

instance,

an

action

group

140

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

defining

the

operations

that

can

be

performed

on

a

printer

object

may

be

defined

in

an

action

group

called

Printer.

To

trigger

an

EAS

based

on

a

printer

operation,

you

can

specify

the

action

group

in

the

EAS

trigger

definition.

For

example,

[Printer]s

to

specify

an

s

(system

administrator)

operation

on

the

printer

object.

POP-based

policy

triggers

have

taken

over

the

role

of

the

ACL

bit

trigger

(also

known

as

k

bit

functionality)

implemented

in

versions

of

Tivoli

Access

Manager

prior

to

3.8.

POP-based

policy

triggers

allow

an

EAS

to

be

called

for

one

or

more

specific

protected

objects

within

the

protected

object

space.

The

POP

trigger

is

defined

as

an

extended

attribute

within

the

POP.

Its

value

is

set

to

the

specific

policy

trigger

string

needed

to

trigger

the

target

EAS.

The

policy

trigger

is

simply

the

service

ID

of

the

target

EAS.

When

the

extended

attribute

value

is

not

NULL,

the

POP

is

evaluated

as

part

of

the

authorization

process

in

the

Tivoli

Access

Manager

authorization

engine.

The

attribute

name

to

be

used

must

be

specifically

for

the

purpose

of

EAS

registration.

The

attribute

name

can

have

more

than

one

value.

This

means

that

multiple

policy

triggers

can

be

configured

for

the

one

POP.

Each

policy

trigger

is

called

in

turn.

The

EAS

are

called

in

the

order

in

which

they

were

first

added

to

the

attribute.

Configuring

a

POP

policy

trigger

POP

objects

reserve

the

extended

attribute

name

eas-trigger

for

the

purpose

of

registering

EAS

triggers.

New

POP

objects

have

no

entry

for

this

name

by

default.

User

must

explicitly

register

an

policy

trigger

with

the

POP

through

pdadmin

or

the

administration

API.

To

be

valid,

the

extended

attribute

must

contains

one

or

more

values

that

must

match

the

policy

trigger

field

in

the

service

definition

of

at

least

one

of

the

EAS

modules

that

are

loaded

when

the

authorization

API

is

initialized.

The

following

examples

show

the

pdadmin

commands

for

adding

and

removing

policy

triggers

from

POP

objects.

pdadmin>

pop

show

<pop-name>

attribute

eas-trigger

pdadmin>

pop

modify

<pop-name>

set

attribute

eas-trigger

trigger-string

pdadmin>

pop

modify

<pop-name>

delete

attribute

eas-trigger

pdadmin>

pop

modify

<pop-name>

delete

attribute

eas-trigger

trigger-string

By

passing

the

trigger

string

as

a

parameter

to

the

set

command

you

can

add

a

specific

trigger

from

the

list

of

configured

triggers.

Likewise,

by

passing

the

trigger

string

as

a

parameter

to

the

delete

command

you

can

remove

a

specific

trigger

from

the

list

of

configured

triggers.

You

can

also

use

the

Tivoli

Access

Manager

administration

API

to

add

and

delete

policy

triggers

within

the

POP

extended

attributes.

In

each

of

the

cases

shown

in

the

table

below,

the

caller

passes

the

string

eas-trigger

as

the

attr_key

input

string.

Administration

API

Function

Description

ivadmin_pop_attrget()

Get

the

EAS

policy

triggers

for

a

POP

ivadmin_pop_attrput()

Set

an

EAS

policy

trigger

for

a

POP

ivadmin_pop_attrdelkey()

Delete

all

the

EAS

policy

triggers

for

a

POP

ivadmin_pop_attrdelval()

Delete

a

specific

EAS

policy

trigger

for

a

POP

Chapter

9.

External

authorization

service

plug-ins

141

Weightings

The

Tivoli

Access

Manager

authorization

service

provides

the

core

authorization

engine

responsible

for

making

authorization

decisions.

You

can

add

one

or

more

external

authorization

service

plug-ins

to

provide

additional

authorization

decision-making

decisions.

When

you

have

more

than

one

authorization

decision-making

process,

you

must

specify

the

relative

rank

or

priority

that

each

decision

carries.

You

can

use

the

concept

of

a

weighting

to

specify

this

rank

or

priority.

For

each

external

authorization

service,

you

specify

the

appropriate

weighting

in

the

service

definition

that

is

used

to

configure

the

external

authorization

service.

The

weight

parameter

is

an

unsigned

size_t

value

and

is

optional.

The

default

Tivoli

Access

Manager

Authorization

engine

has

a

weight

of

100.

The

weight

of

each

EAS

is

relative

to

other

external

authorization

services,

and

to

the

core

authorization

engine.

When

the

weighting

for

an

external

authorization

service

is

not

specified

a

default

value

of

101

is

assigned.

When

the

Tivoli

Access

Manager

authorization

engine

or

an

EAS

returns

an

access

permitted

decision,

the

value

of

the

overall

access

decision

is

increased

by

the

integer

amount

of

the

applicable

weighting.

When

the

authorization

engine

or

an

EAS

returns

an

access

denied

decision,

the

value

of

the

overall

access

decision

is

decreased

by

the

integer

amount

of

the

applicable

weighting.

When

the

value

of

the

overall

decision

is

greater

than

zero

(0),

the

access

request

is

approved.

When

the

value

of

the

overall

decision

is

less

than

zero

(0),

the

access

request

is

denied.

When

the

value

equals

zero,

the

access

decision

is

made

based

on

the

value

returned

by

the

Tivoli

Access

Manager

authorization

engine.

Thus,

the

authorization

engine

takes

precedence

over

the

external

authorization

services

when

the

sum

total

of

the

supplemental

external

authorization

services’

decisions

is

not

sufficient

to

override

the

decisions

made

by

the

core

engine.

For

example,

the

core

engine

has

a

weight

of

100,

and

when

it

returns

an

access

permitted

decision,

the

value

of

the

result

is

+100.

When

an

external

authorization

service

with

a

weighting

of

60

is

then

called,

and

returns

an

access

denied

decision,

then

this

final

result

value

is

modified

to

+40.

If

another

EAS

with

weighting

of

60

is

called,

and

it

also

returns

an

access

denied

decision,

then

the

final

result

is

-20.

In

this

case,

access

is

denied

because

the

overall

result

is

less

than

zero.

Each

external

authorization

service

has

the

option

of

not

participating

in

a

specific

access

decision.

The

EAS

can

return

a

permission

value

of

AZN_C_INDIFFERENT.

When

this

occurs,

the

Tivoli

Access

Manager

authorization

service

does

not

factor

the

weighting

for

the

EAS

into

the

final

result.

142

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Configuring

an

external

authorization

service

plug-in

You

can

configure

an

external

authorization

service

plug-in

either

manually

or

programmatically.

Manual

configuration

is

accomplished

by

setting

values

in

a

configuration

file.

Programmatic

configuration

is

accomplished

by

passing

attributes

to

the

administration

API

at

API

initialization.

These

methods

correspond

directly

to

the

registration

steps

used

by

all

types

of

authorization

service

plug-ins,

as

described

in

“Constructing

a

service

definition”

on

page

82.

Configuration

of

an

external

authorization

service

plug-in

is

described

in

the

following

sections:

v

“Using

a

configuration

file

entry”

v

“Configuring

an

external

authorization

service

programmatically”

on

page

144

Using

a

configuration

file

entry

External

authorization

service

plug-ins

are

typically

configured

in

aznapi.conf,

under

the

following

stanza:

[aznapi-external-authzn-services]

The

external

authorization

services

definition

syntax

is

as

follows:

<policy-trigger>

=

<plug-in

location>

[-weight

<N>]

[&

<plug-in

parameters>]

For

example:

Printer:rxT

=

eas_plugin

-weight

60

&

-server

barney

Or

webseal_pop_trigger

=

eas_plugin_2

-weight

70

&

-hostname

fred

The

policy-trigger

can

be

any

string

that

is

recognized

as

a

valid

key

name.

Stanza

key

names

cannot

contain

white

space

or

the

open

bracket

“[“

and

close

bracket

“]”

characters.

The

bracket

characters

are

used

to

define

new

stanza

names.

The

policy-trigger

is

case

sensitive

for

action

set

definitions

because

the

actions

themselves

are

case

sensitive.

However,

the

policy-trigger

is

case

insensitive

if

the

trigger

is

a

POP

attribute.

The

first

example

above

shows

an

operation-based

trigger

with

a

user-defined

action

group

of

Printer

and

the

actions

rxT

within

that

group.

To

specify

the

primary

action

group

you

would

specify

only

:rxT.

The

primary

action

group

can

be

represented

with

an

empty

action

group

name

or

the

string

primary

can

be

used

explicitly.

All

lowercase

letters

are

required

if

primary

is

used

explicitly.

Any

policy-trigger

that

does

not

contain

a

colon

“:”

character

is

considered

to

be

a

protected

object

policy

(POP)

attribute

name.

The

second

example

above

is

for

a

POP

attribute

trigger

called

webseal_pop_trigger.

When

a

POP

that

contains

a

reference

to

this

string

is

passed

to

the

Combinator,

the

appropriate

external

authorization

service

is

called

to

take

part

in

the

access

decision.

Note

that

the

POP

configuration

must

have

been

completed

previously

by

the

secure

domain

administrator,

using

the

pdadmin

command.

The

plug-in

location

is

the

path

name

to

the

shared

library

or

DLL

module

that

contains

the

implementation

of

the

plug-in

that

matches

the

policy

trigger.

The

path

name

can

be

in

a

truncated

form

if

the

external

authorization

service

is

to

be

Chapter

9.

External

authorization

service

plug-ins

143

loaded

by

clients

on

multiple

platforms.

In

this

case,

the

service

dispatcher

searches

for

the

plug-in

using

platform-specific

prefixes

and

suffixes

to

match

DLL

names.

The

weight

parameter

is

an

unsigned

size_t

value

and

is

optional.

The

value

signifies

the

weight

that

any

decision

returned

by

this

external

authorization

service

should

be

given

in

the

entire

decision

process.

Optionally,

the

external

authorization

service

can

be

passed

additional

initialization

information

in

the

form

of

arguments.

The

arguments

must

be

preceded

by

the

ampersand

“&”.

The

authorization

service

takes

the

remainder

of

the

string

following

the

ampersand

&,

breaks

the

string

up

into

white

space

separated

tokens,

and

passes

the

tokens

directly

to

the

administration

service’s

initialization

interface,

azn_svc_initialize(),

in

the

argv

array

parameter.

The

number

of

strings

in

the

argv

array

is

indicated

by

the

argc

function

parameter.

The

optional

arguments

in

the

first

example

above

are

&

-server

-barney

Configuring

an

external

authorization

service

programmatically

The

authorization

API

header

file

ogauthzn.h

contains

a

service

definition

attribute:

azn_string_t

azn_init_extern_authzn_svc

The

value

of

the

attribute

is

a

string

of

the

format:

policy-trigger

=

plug-in_location

[-weight

N]

[&

plug-in_parameters]

For

example:

POP_EAS_A

=

my_eas_pop_1

-weight

50

&

-server

fred

Or

:rmx

=

my_acl_ops_pop_1

-weight

60

&

-server

barney

Complete

the

following

steps

to

use

this

service

definition

attribute

to

configure

an

external

authorization

service

plug-in.

1.

Use

the

azn_attrlist_add_entry()

API

to

assign

to

the

init_data

attribute

list

as

many

values

to

the

azn_init_extern_authzn_svc

attribute

as

the

number

of

Administrative

service

plug-ins

needed.

These

values

are

expressed

as

strings,

and

need

to

conform

to

the

external

authorization

service

definition

syntax

specified

in

“Using

a

configuration

file

entry”

on

page

143.

2.

Pass

the

init_data

attribute

to

the

azn_initialize()

call

to

ensure

that

the

specified

Administration

service

plug-ins

are

loaded.

144

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Initializing

and

shutting

down

external

authorization

service

plug-Ins

Each

external

authorization

service

plug-in

is

a

standalone

module

that

is

dynamically

loaded

into

the

authorization

service.

The

authorization

API

service

plug-in

model

provides

standard

interfaces

to

the

service

dispatcher

to

initialize

and

shut

down

all

types

of

service

plug-ins.

Developers

of

external

authorization

service

plug-ins

should

provide

the

standard

functions.

See

the

following

sections:

v

“Initialization

and

configuration

of

service

plug-ins”

on

page

82

v

“Shut

down”

on

page

92

When

the

authorization

API

is

initialized

the

configuration

file

is

parsed

and

each

external

authorization

service

plug-in

listed

in

the

[aznapi-external-authzn-service]

stanza

is

loaded

and

resolved

by

the

service

plug-in

dispatcher.

The

authorization

API

also

recognizes

the

external

authorization

service

plug-ins

specified

by

the

azn_init_extern_authzn_svc

attribute

in

the

init_data

attribute

list

that

is

passed

as

input

to

azn_initialize().

Each

of

those

plug-ins

is

also

loaded

and

resolved

by

the

service

plug-in

dispatcher.

If

a

plug-in

is

configured

incorrectly,

or

the

plug-in

module

can’t

be

found,

the

azn_initialize()

function

returns

an

appropriate

error.

When

each

external

authorization

service

plug-in

has

been

successfully

loaded,

the

authorization

service

initialization

interface

is

called

with

the

parameters

specified

after

the

ampersand

“&”

character

in

the

service

definition.

For

more

information

on

initialization

and

shutdown

of

service

plug-ins,

see

the

reference

pages

for

“azn_svc_initialize()”

on

page

244

and

“azn_svc_shutdown()”

on

page

249.

Chapter

9.

External

authorization

service

plug-ins

145

Obtaining

an

authorization

decision

The

service

dispatcher

calls

this

interface

to

request

an

access

decision

from

the

EAS

plug-in.

This

interface

is

called

by

the

azn_decision_access_allowed()

and

azn_decision_access_allowed_ext()

API

interfaces

and

is

expected

to

return

both

permission

codes

and

error

codes

consistent

with

that

required

by

authorization

API

interface

specification

for

the

those

interfaces.

For

example:

azn_status_t

azn_svc_decision_access_allowed_ext(

const

azn_creds_h_t

creds,

/*

input

*/

const

azn_string_t

protected_resource,

/*

input

*/

const

azn_string_t

operation,

/*

input

*/

const

azn_attrlist_h_t

app_context,

/*

input

*/

int

*permission,

/*

output

*/

azn_attrlist_h_t

*permission_info

/*

output

*/

);

The

azn_svc_decision_access_allowed_ext()

function

returns

the

same

permission

code

values

as

its

counterpart

calls

do

in

the

authorization

API.

The

EAS

can

return

one

of

three

possible

permission

values

to

the

authorization

engine:

AZN_C_PERMITTED

0

AZN_C_NOT_PERMITTED

1

AZN_C_INDIFFERENT

-1

The

EAS

returns

AZN_C_INDIFFERENT

when

it

does

not

care

about

the

access

decision

in

question.

For

example,

this

can

occur

when

a

minimum

requirement

for

the

input

conditions

was

not

met.

Alternatively,

the

EAS

may

decide

it

does

not

have

jurisdiction

for

the

decision.

In

these

cases,

the

Combinator

ignores

the

return

value

from

this

EAS

when

calculating

the

result

of

the

access

decision.

The

permission_info

parameter

should

contain

any

decision-related

information

attributes

that

the

EAS

wants

to

return

to

the

calling

application.

If

an

initialized

attribute

list

handle

is

passed

back

to

the

service

dispatcher,

then

the

attributes

are

added

to

the

permission_info

list

that

is

passed

back

to

the

caller.

Ensure

that

your

implementation

of

azn_svc_decision_access_allowed_ext()

is

thread-safe.

Input

parameters

must

not

be

modified.

You

can

assume

that

the

calling

application

will

free

the

output

parameters

that

are

returned.

This

interface

returns

AZN_S_COMPLETE

when

successful,

or

an

error

when

it

fails.

146

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Error

codes

The

authorization

service

plug-in

interface,

including

the

EAS

plug-in

interface,

defines

a

number

of

major

error

codes

and

a

minor

error

code

mask

that

an

EAS

must

use

to

construct

error

codes

to

return

to

the

calling

application.

The

error

codes

returned

by

the

plug-in

interfaces

are

not

parsed

or

modified

by

the

authorization

API

runtime

functions.

These

codes

are

passed

back

unmodified

to

the

calling

application.

Thus,

the

error

code

that

is

returned

must

be

able

to

be

parsed

into

its

major

and

minor

error

code

components

by

the

calling

application.

The

calling

application

uses

azn_error_major()

and

azn_error_minor()

to

complete

the

parsing.

To

properly

construct

the

error

codes,

the

authorization

API

provides

a

utility

function

that

enables

developers

of

third-party

extensions,

(including

service

plugs-in

such

as

the

EAS)

to

the

authorization

API

to

construct

valid

error

codes

to

return

to

application

programmers.

This

function

is

azn_util_errcode().

This

function

takes

a

major

and

minor

integer

error

code

value

and

converts

them

into

an

azn_status_t

value.

The

minor

error

code

returned

must

be

defined

in

accordance

with

the

rules

below.

Major

error

codes

External

authorization

service

plug-ins

should

return

all

applicable

major

error

codes

that

are

defined

for

returning

status

from

the

azn_decision_access_allowed()

and

azn_decision_access_allowed_ext()

interfaces.

Note

that

not

all

error

codes

will

apply

to

all

plug-in

services.

The

following

table

shows

major

error

codes:

Error

Code

Description

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid

AZN_S_INVALID_PROTECTED_RESOURCE

The

protected_resource

string

supplied

is

invalid.

AZN_S_INVALID_OPERATION

The

operation

string

supplied

is

invalid.

AZN_S_INVALID_EAS_ACL_TRIGGER

The

EAS

ACL

policy

trigger

specified

is

invalid.

AZN_S_INVALID_EAS_POP_TRIGGER

The

EAS

POP

policy

trigger

specified

is

invalid.

AZN_S_INVALID_EAS_WEIGHTING

The

EAS

weighting

specified

is

invalid.

An

absolute

size_t

value

is

required.

AZN_S_UNKNOWN_EAS_SVC_PARAMETER

A

parameter

other

than

-weight

was

specified

in

an

external

authorization

service

definition.

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

application

context

is

invalid.

AZN_S_INVALID_PERMISSION_REF

The

integer

pointer

for

the

permission

parameter

is

invalid.

AZN_S_FAILURE

Chapter

9.

External

authorization

service

plug-ins

147

Error

Code

Description

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

The

following

additional

major

error

codes

are

defined

for

authorization

API

service

modules

in

ogauthzn.h.

Some

of

the

following

error

codes

are

returned

only

by

the

service

dispatcher,

and

some

are

returned

only

by

the

service

plug-in.

The

returning

entity

is

noted

in

the

description

of

each

error

code.

Error

Code

Description

AZN_S_SVC_DEFINITION_ERROR

Returned

by

the

service

dispatcher

when

an

error

has

been

found

in

the

service

definition

in

the

authorization

API

configuration

file.

AZN_S_SVC_NOT_FOUND

Returned

by

the

service

dispatcher

when

an

error

occurs

either

while

locating

or

loading

an

authorization

service

plug-in.

AZN_S_SVC_INITIALIZE_NOT_FOUND

AZN_S_SVC_SHUTDOWN_NOT_FOUND

AZN_S_SVC_EAS_FUNC_NOT_FOUND

Returned

by

the

service

dispatcher

when

an

error

occurs

either

locating

or

loading

a

service

interface

within

a

particular

plug-in.

For

example,

this

is

returned

by

the

dispatcher

if

the

azn_svc_initialize()

interface

was

not

found

in

the

loaded

plug-in.

AZN_S_SVC_INIT_FAILED

Returned

by

the

plug-in

when

an

error

occurs

while

it

is

initializing.

AZN_S_SVC_SHUTDOWN_FAILED

Returned

by

the

plug-in

when

an

error

occurs

while

it

is

shutting

down.

AZN_S_SVC_AUTHORIZATION_FAILED

The

calling

application

does

not

possess

the

authority

required

to

invoke

the

services

of

this

plug-in.

Minor

error

codes

Minor

error

codes

are

encoded

by

the

authorization

API

using

a

table

of

known

message

catalogue

prefixes.

All

Tivoli

Access

Manager

messages

are

composed

of

a

prefix

value

and

the

specific

error

code

within

that

message

set.

When

the

authorization

API

encodes

a

minor

error

code,

using

azn_util_errcode(),

the

prefix

is

removed

from

the

minor

code

and

cross-referenced

with

a

table

of

known

prefixes.

When

the

prefix

is

identified,

it

is

converted

into

a

mask,

which

is

then

inserted

into

the

major

error

portion

of

the

azn_status_t

code

returned.

The

reverse

operation

is

performed

by

the

azn_error_minor()

function

to

rebuild

the

original

minor

error

code.

To

enable

minor

error

codes

returned

by

authorization

API

services

to

be

properly

encoded

by

azn_util_errcode()

an

appropriate

prefix

must

be

defined

for

authorization

API

service

plug-ins.

The

same

prefix

is

shared

by

all

services

of

the

same

type.

The

prefix

for

all

external

authorization

services

is

defined

in

ogauthzn.h

as

follows:

extern

unsigned

int

azn_eas_svc_err_prefix;

148

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Define

error

messages

for

your

external

authorization

service

by

using

the

azn_eas_svc_err_prefix.

For

example,

minor

error

codes

for

an

external

authorization

service

plug-in

are

defined

in

the

interface

file

as

follows:

#define

EAS_SVC_CORE_DUMP(azn_eas_svc_err_prefix

|

0x1)

#define

EAS_SVC_INVALID_ATTRIBUTE(azn_eas_svc_err_prefix

|

0x2)

#define

EAS_SVC_BAD_FILENAME(azn_eas_svc_err_prefix

|

0x3)

Chapter

9.

External

authorization

service

plug-ins

149

150

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

A.

Authorization

API

reference

This

section

contains

the

following

reference

pages:

v

azn_attrlist_add_entry()

v

azn_attrlist_add_entry_buffer()

v

“azn_attrlist_add_entry_pobj()”

on

page

155

v

“azn_attrlist_add_entry_ulong()”

on

page

156

v

“azn_attrlist_copy()”

on

page

157

v

“azn_attrlist_create()”

on

page

158

v

“azn_attrlist_delete()”

on

page

159

v

“azn_attrlist_delete_entry()”

on

page

160

v

“azn_attrlist_delete_entry_value()”

on

page

161

v

“azn_attrlist_get_entry_buffer_value()”

on

page

162

v

“azn_attrlist_get_entry_pobj_value()”

on

page

164

v

“azn_attrlist_get_entry_string_value()”

on

page

165

v

“azn_attrlist_get_entry_type()”

on

page

167

v

“azn_attrlist_get_entry_ulong_value()”

on

page

169

v

“azn_attrlist_get_names()”

on

page

170

v

“azn_attrlist_name_get_num()”

on

page

171

v

“azn_creds_combine()”

on

page

172

v

“azn_creds_copy()”

on

page

174

v

“azn_creds_create()”

on

page

175

v

“azn_creds_delete()”

on

page

176

v

“azn_creds_equal()”

on

page

177

v

“azn_creds_for_subject()”

on

page

178

v

“azn_creds_get_attr_value_string()”

on

page

180

v

“azn_creds_get_attrlist_for_subject()”

on

page

181

v

“azn_creds_get_pac()”

on

page

183

v

“azn_creds_modify()”

on

page

185

v

“azn_creds_num_of_subjects()”

on

page

188

v

“azn_creds_set_attr_value_string()”

on

page

190

v

“azn_decision_access_allowed()”

on

page

192

v

“azn_decision_access_allowed_ext()”

on

page

194

v

“azn_entitlement_get_entitlements()”

on

page

197

v

“azn_error_get_string()”

on

page

199

v

“azn_error_major()”

on

page

200

v

“azn_error_minor()”

on

page

201

v

“azn_error_minor_get_string()”

on

page

202

v

“azn_id_get_creds()”

on

page

203

v

“azn_initialize()”

on

page

207

v

“azn_pac_get_creds()”

on

page

210

v

“azn_release_buffer()”

on

page

212

v

“azn_release_pobj()”

on

page

213

©

Copyright

IBM

Corp.

2000,2003

151

v

“azn_release_string()”

on

page

214

v

“azn_release_strings()”

on

page

215

v

“azn_shutdown()”

on

page

216

v

“azn_util_errcode()”

on

page

217

v

“azn_util_handle_is_valid()”

on

page

218

v

“azn_util_password_authenticate()”

on

page

219

v

“azn_util_password_change()”

on

page

221

152

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_add_entry()

Adds

a

name

or

string-value

entry

to

an

attribute

list

Syntax

azn_status_t

azn_attrlist_add_entry(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

azn_string_t

string_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Attribute

name

of

the

entry

to

be

added.

string_value

String

attribute

value

to

be

added.

Description

This

function

adds

a

string

value

to

the

attribute

attr_name

within

the

attribute

list

attr_list.

If

the

attribute

attr_name

already

exists

in

the

list

then

the

value

is

appended

to

the

existing

list

of

values

for

attr_name.

The

values

under

attr_name

are

stored

in

the

order

in

which

they

were

inserted

into

the

list.

There

is

no

checking

performed

upon

values

in

the

list;

therefore

duplicate

values

are

permitted.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid.

v

AZN_S_INVALID_STRING_VALUE

Attribute

value

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_minor_error()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

153

azn_attrlist_add_entry_buffer()

Adds

a

name/buffer

value

entry

to

an

attribute

list.

Syntax

azn_status_t

azn_attrlist_add_entry_buffer(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

azn_buffer_t

buffer_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Attribute

name

of

the

entry

to

be

added.

buffer_value

Buffer

attribute

value

to

be

added.

Description

This

function

adds

a

buffer

value

to

the

attribute

attr_name

within

the

attribute

list

attr_list.

If

the

attribute

attr_name

already

exists

in

the

list

then

the

value

is

appended

to

the

existing

list

of

values

for

attr_name.

The

values

under

attr_name

are

stored

in

the

order

in

which

they

were

inserted

into

the

list.

There

is

no

checking

performed

upon

values

in

the

list;

therefore

duplicate

values

are

permitted.

Return

Values

If

successful,

the

function

returns

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major.

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid.

v

AZN_S_INVALID_BUFFER

Attribute

buffer

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_minor_error()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

154

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_add_entry_pobj()

Adds

the

name

of

a

protected

object

entry

to

the

attribute

list.

Syntax

azn_status_t

azn_attrlist_add_entry_pobj(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

azn_pobj_t

pobj_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

of

the

attribute

to

which

the

value

is

to

be

added.

pobj_value

Protected

object

attribute

value

to

be

added.

Description

This

function

adds

a

protected

object

value

to

the

attribute

attr_name

within

the

attribute

list

attr_list.

If

the

attribute

attr_name

already

exists

in

the

list

then

the

value

is

appended

to

the

existing

list

of

values

for

attr_name.

The

values

under

attr_name

are

stored

in

the

order

in

which

they

were

inserted

into

the

list.

There

is

no

checking

performed

upon

values

in

the

list;

therefore

duplicate

values

are

permitted.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

unsuccessful,

the

function

returns

one

of

the

following

major

error

codes:

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

The

attribute

list

name

is

invalid.

v

AZN_S_INVALID_POBJ

The

protected

object

value

is

NULL.

Appendix

A.

Authorization

API

reference

155

azn_attrlist_add_entry_ulong()

Adds

an

unsigned

long

entry

to

the

attribute

list.

Syntax

azn_status_t

azn_attrlist_add_entry_ulong(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

azn_ulong_t

ulong_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Iterate

name

to

which

the

value

is

to

be

added.

ulong_value

Ulong

attribute

value

to

be

added.

Description

This

function

adds

a

ulong

value

to

the

attribute

attr_name

within

the

attribute

list

attr_list.

If

the

attribute

attr_name

already

exists

in

the

list

then

the

value

is

appended

to

the

existing

list

of

values

for

attr_name.

The

values

under

attr_name

are

stored

in

the

order

in

which

they

were

inserted

into

the

list.

There

is

no

checking

performed

upon

values

in

the

list;

therefore

duplicate

values

are

permitted.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

unsuccessful,

the

function

returns

one

of

the

following

major

error

codes:

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

The

attribute

list

name

is

invalid.

156

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_copy()

Copies

a

valid

attribute

list

to

a

new

attribute

list.

Syntax

azn_attrlist_h_t

azn_attrlist_copy(

const

azn_attrlist_h_t

attr_list

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Description

This

function

copies

an

existing

attribute

list

and

returns

a

handle

to

the

new

attribute

list.

Return

Values

If

unsuccessful,

the

function

will

return

AZN_S_INVALID_HANDLE.

Appendix

A.

Authorization

API

reference

157

azn_attrlist_create()

Creates

a

valid,

empty

attribute

list,

assigns

it

a

handle,

and

returns

the

handle.

Syntax

azn_status_t

azn_attrlist_create(

azn_attrlist_h_t

*new_attr_list

);

Parameters

Output

new_attr_list

Pointer

to

an

azn_attrlist_h_t

variable

that

will

contain

the

handle

to

the

new

attribute

list

upon

successful

completion.

Description

This

function

creates

a

new

and

empty

attribute

list,

assigns

it

a

handle

new_attr_list,

and

returns

a

pointer

to

the

handle.

Note:

Alternatively,

when

you

are

declaring

an

attribute

list

handle

to

for

use

as

an

authorization

API

output

parameter

you

can

declare

the

handle

and

assign

it

the

value

AZN_C_INVALID_HANDLE,

which

indicates

that

it

is

uninitialized.

In

this

case

when

the

authorization

API

function

returns

data

in

the

parameter,

it

will

automatically

create

an

attribute

list

and

return

the

handle

in

the

output

parameter.

When

new_attr_list

is

no

longer

needed,

its

storage

should

be

released

by

calling

azn_attrlist_delete().

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

158

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_delete()

Deletes

the

attribute

list

associated

with

the

attribute

list

handle.

Syntax

azn_status_t

azn_attrlist_delete(

azn_attrlist_h_t

*old_attr_list

);

Parameters

Input

old_attr_list

Pointer

to

the

attribute

list

handle

for

the

attribute

list

to

be

deleted.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Output

old_attr_list

NULL

pointer

to

an

attribute

list

handle

that

is

invalid

upon

return.

Description

This

function

deletes

the

attribute

list

associated

with

the

handle

old_attr_list.

This

function

will

set

the

input

attribute

list

handle

to

an

invalid

value

to

ensure

that

it

cannot

be

used

in

future

functions.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

159

azn_attrlist_delete_entry()

Deletes

the

specified

attribute

associated

with

the

attribute

list

handle.

Syntax

azn_status_t

azn_attrlist_delete_entry(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

The

name

of

an

attribute

contained

within

the

attribute

list

that

is

referenced

by

attr_list.

Description

This

function

deletes

the

specified

attribute

attr_name

from

the

attribute

list

associated

with

the

handle

attr_list.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

160

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_delete_entry_value()

Deletes

the

specified

value

associated

with

the

attribute

name

in

the

specified

attribute

list.

Syntax

azn_status_t

azn_attrlist_delete_entry_value(

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

unsigned

int

value_index

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

The

name

of

an

attribute

contained

within

the

attribute

list

that

is

referenced

by

attr_list.

value_index

An

integer

index

into

the

array

of

values

assigned

to

attr_name.

Specifies

the

value

to

be

deleted.

Output

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Description

This

function

deletes

the

value

at

position

value_index

in

the

array

of

values

for

attribute

attr_name,

from

the

specified

attribute

list

associated

with

the

handle

attr_list.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

161

azn_attrlist_get_entry_buffer_value()

Returns

a

single

specified

value

attribute

for

a

name

attribute

that

has

multiple

values

that

are

contained

in

buffers.

Syntax

azn_status_t

azn_attrlist_get_entry_buffer_value(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

unsigned

int

value_index,

azn_buffer_t

*buffer_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

attribute

of

the

entry

from

which

the

value

attribute

is

to

be

returned.

value_index

Index

within

the

entry

of

the

value

attribute

to

be

returned.

Output

buffer_value

Pointer

to

an

azn_buffer_t

variable

that

will

contain

the

address

of

the

buffer

data

upon

successful

completion

of

the

routine.

Description

This

function

returns

one

buffer-type

value

attribute

in

buffer_value.

The

returned

value

attribute

is

the

one

at

position

value_index

within

the

entry

whose

name

attribute

is

specified

by

attr_name.

The

first

value

attribute

for

any

particular

name

attribute

within

an

attribute

list

has

index

0.

When

buffer_value

is

no

longer

needed,

its

storage

should

be

released

by

calling

azn_release_buffer().

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_major_error().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid.

v

AZN_S_INVALID_BUFFER_REF

162

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Buffer

reference

is

not

valid.

v

AZN_S_ATTR_VALUE_NOT_BUFFER_TYPE

The

value

attributes

of

this

entry

are

not

of

type

buffer.

v

AZN_S_ATTR_INVALID_INDEX

Index

is

not

valid

(no

value

exists

for

this

index).

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

163

azn_attrlist_get_entry_pobj_value()

Returns

a

single

specified

value

attribute

for

a

name

attribute

that

has

one

or

more

values

that

contain

protected

object

information.

Syntax

azn_status_t

azn_attrlist_get_entry_pobj_value(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

unsigned

int

value_index,

azn_pobj_t

*pobj_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

of

the

attribute

from

which

the

value

needs

to

be

returned.

value_index

Index

within

the

entry

of

the

value

attribute

to

be

returned

Output

pobj_value

Pointer

to

an

azn_pobj_t

variable

that

will

contain

the

address

of

the

protected

object

information

upon

successful

completion

of

the

routine.

Description

Returns

a

single

specified

value

attribute

for

a

name

attribute

that

has

one

or

more

values

that

contain

protected

object

information.

When

pobj_value

is

longer

needed,

call

azn_release_pobj()

to

release

its

storage.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE

When

unsuccessful,

the

function

returns

one

of

the

following

major

error

codes:

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

The

attribute

name

is

NULL,

or

the

attribute

name

is

not

found.

v

AZN_S_INVALID_INDEX

The

index

value_index

is

invalid.

v

AZN_S_INVALID_POBJ_REF

The

pobj_value

pointer

is

NULL.

v

AZN_S_ATTR_VALUE_NOT_POBJ_TYPE

The

value

type

at

the

specified

index

is

not

of

type

pobj.

164

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_get_entry_string_value()

Returns

a

single

specified

value

attribute

for

a

name

attribute

that

has

multiple

values

that

are

strings.

Syntax

azn_status_t

azn_attrlist_get_entry_string_value(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

unsigned

int

value_index,

azn_string_t

*string_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

attribute

of

the

entry

from

which

the

value

attribute

is

to

be

returned.

value_index

Index

within

the

entry

of

the

value

attribute

to

be

returned

Output

string_value

Pointer

to

an

azn_string_t

variable

that

will

contain

the

string

data

upon

successful

completion

of

the

routine.

Description

This

function

returns

one

string-type

value

attribute

in

string_value.

The

returned

value

attribute

is

the

one

at

position

value_index

within

the

set

of

value

attributes

belonging

to

the

name

attribute

that

is

specified

by

attr_name.

The

first

value

attribute

for

a

specified

name

attribute

within

an

attribute

list

has

index

0.

When

string_value

is

no

longer

needed,

call

azn_release_string()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid.

v

AZN_S_INVALID_STRING_REF

Appendix

A.

Authorization

API

reference

165

String

reference

is

invalid.

v

AZN_S_ATTR_VALUE_NOT_STRING_TYPE

Value

attributes

of

this

entry

are

not

of

type

string.

v

AZN_S_ATTR_INVALID_INDEX

Index

is

invalid

(no

value

exists

for

this

index).

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

166

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_get_entry_type()

Returns

the

type

of

a

specified

value

entry

for

a

specified

attribute

name

within

a

specified

attribute

list.

Syntax

azn_status_t

azn_attrlist_get_entry_type

(

const

azn_attrlist_h_t

attr_list

/*

in

*/,

const

azn_string_t

attr_name

/*

in

*/,

const

unsigned

int

value_index

/*

in

*/,

unsigned

long

*value_type

/*

out

*/

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

attribute

of

the

entry

from

which

the

type

of

the

type

is

to

be

returned.

value_index

Index

within

the

entry

of

the

value

attribute

to

be

returned.

Output

value_type

A

pointer

to

an

unsigned

long.

Contains

the

type

of

the

value

of

the

attribute

at

index

value_index.

Description

Returns

the

type

of

a

specified

value

entry

for

a

specified

attribute

name

within

a

specified

attribute

list.

Supported

types

are

string,

buffer,

pobj

(protected

object),

ulong.

Supported

return

values:

#define

AZN_VALUE_TYPE_NONE

0

#define

AZN_VALUE_TYPE_STRING

1

#define

AZN_VALUE_TYPE_BUFFER

2

#define

AZN_VALUE_TYPE_POBJ

3

(Reserved)

4

#define

AZN_VALUE_TYPE_ULONG

5

#define

AZN_VALUE_TYPE_MAX

5

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Appendix

A.

Authorization

API

reference

167

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_STRING_REF

String

reference

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

168

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_get_entry_ulong_value()

Returns

a

single

specified

value

for

a

name

attribute

that

has

one

or

more

values

that

are

of

type

unsigned

long.

Syntax

azn_status_t

azn_attrlist_get_entry_ulong_value(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

const

unsigned

int

value_index,

azn_ulong_t

*ulong_value

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

attribute

of

the

entry

from

which

the

value

attribute

is

to

be

returned.

value_index

Index

within

the

entry

of

the

value

attribute

to

be

returned.

Output

ulong_value

Pointer

to

an

unsigned

long

variable

that

holds

the

value

of

the

returned

attribute.

Description

Returns

a

single

specified

value

for

a

name

attribute

that

has

one

or

more

values

that

are

of

type

unsigned

long.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

are

derived

from

the

returned

status

code

with

azn_major_error().

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid

or

the

attribute

name

is

not

found.

v

AZN_S_INVALID_INDEX

The

variable

value_index

is

not

valid.

v

AZN_S_ATTR_VALUE_NOT_ULONG_TYPE

The

value

attributes

of

this

entry

are

not

of

type

ulong.

Appendix

A.

Authorization

API

reference

169

azn_attrlist_get_names()

Returns

the

list

of

all

name

attributes

appearing

in

entries

of

the

attribute

list.

Syntax

azn_status_t

azn_attrlist_get_names(

const

azn_attrlist_h_t

attr_list,

azn_string_t

*attr_names[]

);

Parameters

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Output

attr_names

Pointer

to

an

array

of

NULL-terminated

strings

that

hold

the

returned

list

of

name

attributes.

The

last

entry

in

the

array

is

denoted

by

a

NULL

azn_string_t.

Description

This

function

returns

a

list

of

names

attributes

as

an

array

of

NULL

terminated

strings.

When

the

attr_names

array

is

no

longer

required,

call

azn_release_strings()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_STRING_REF

String

reference

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

170

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_attrlist_name_get_num()

Returns

the

number

of

value

attributes

for

a

specified

name

attribute

in

a

specified

attribute

list.

Syntax

azn_status_t

azn_attrlist_name_get_num(

const

azn_attrlist_h_t

attr_list,

const

azn_string_t

attr_name,

unsigned

int

*num_values

);

Description

Input

attr_list

Handle

to

an

attribute

list.

The

attribute

list

handle

should

be

a

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

attr_name

Name

attribute

for

the

entry

whose

number

of

value

attributes

is

to

be

returned.

Output

num_values

Pointer

to

an

integer

through

which

the

number

of

value

attributes

(in

the

entry

whose

name

attribute

is

specified

by

attr_name)

is

returned.

Description

This

function

returns

the

number

of

value

attributes

for

a

specified

name

attribute

in

a

specified

attribute

list.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_ATTRLIST_HDL

Attribute

list

handle

is

invalid.

v

AZN_S_INVALID_ATTR_NAME

Attribute

name

is

invalid.

v

AZN_S_INVALID_INTEGER_REF

Integer

reference

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

171

azn_creds_combine()

Combines

two

authorization

credentials

chains

and

a

returns

a

pointer

to

a

handle

to

the

resulting

combined

credentials

chain.

Syntax

azn_status_t

azn_creds_combine(

const

azn_creds_h_t

creds,

const

azn_creds_h_t

creds_to_add,

azn_creds_h_t

*combined_creds

);

Parameters

Input

creds

Handle

to

an

credentials

chain

whose

first

indexed

entry

is

the

credential

of

the

initiator

of

the

request.

The

credential

handle

should

be

a

handle

for

an

existing,

non-empty

credential

which

contains

valid

data.

creds_to_add

Handle

to

the

credentials

chain

to

be

appended

to

creds.

The

credential

handle

should

be

a

handle

for

an

existing,

non-empty

credential

which

contains

valid

data.

Output

combined_creds

Pointer

to

a

handle

to

the

returned

new

credentials

chain,

which

consists

of

the

credentials

chain

referenced

by

creds

followed

by

the

credentials

chain

referenced

by

creds_to_add.

The

credential

handle

pointer

passed

as

the

combined_creds

parameter

can

point

to

one

of

the

following:

v

A

credential

handle

for

a

new,

valid,

empty

credential.

v

A

credential

handle

initialized

to

AZN_C_INVALID_HANDLE.

Description

This

function

takes

a

credential

handle

creds_to_add,

which

refers

to

a

credentials

chain,

and

adds

it

to

the

end

of

a

chain

of

one

or

more

credentials,

which

are

referenced

by

the

credential

handle

creds.

The

credentials

chain

referenced

by

creds

must

contain

as

its

first

indexed

credential

the

credentials

of

the

initiator.

The

credentials

chain

referenced

by

creds

might

also

contain

the

(previously

combined)

credentials

of

one

or

more

of

the

initiator’s

proxies.

A

handle

to

the

combined

credentials

is

returned

through

combined_creds.

The

input

credential

handles

and

the

credentials

chains

to

which

they

refer

are

not

modified

in

any

way

by

this

call.

Later

changes

to

these

structures,

including

the

releasing

of

their

storage,

will

have

no

effect

on

combined_creds.

Note:

This

call

uses

the

new

credential

handle

combined_creds.

When

you

declare

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

172

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

Handle

passed

as

creds

is

invalid.

v

AZN_S_INVALID_ADDED_CREDS_HDL

Credentials

handle

passed

as

creds_to_add

is

invalid.

v

AZN_S_INVALID_COMB_CREDS_HDL

Credentials

handle

passed

as

combined_creds

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

173

azn_creds_copy()

Creates

a

reference

copy

of

the

target

credential.

Syntax

azn_creds_h_t

azn_creds_copy(

const

azn_creds_h_t

creds

);

Parameters

Input

creds

Handle

to

a

credential.

The

handle

can

be

one

of

the

following:

v

A

credential

handle

for

a

new,

empty

credential,

which

has

been

initialized

by

a

call

to

azn_creds_create().

v

A

handle

for

an

existing,

non-empty

credential

which

contains

valid

data.

Description

This

function

creates

a

reference

copy

of

the

target

credential.

This

function

does

not

make

a

new

copy

of

the

original

credential.

It

creates

a

duplicate

credentials

handle

to

the

original

credential.

Use

azn_id_get_creds()

to

create

an

entirely

new

copy

of

a

credential.

Return

Values

If

unsuccessful,

the

function

will

return

AZN_S_INVALID_HANDLE.

Otherwise

it

will

return

another

handle

to

the

credential

creds.

174

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_create()

Creates

a

new,

empty

credentials

chain,

assigns

it

a

handle,

and

returns

a

pointer

to

the

handle.

Syntax

azn_status_t

azn_creds_create(

azn_creds_h_t

*creds

);

Parameters

Output

creds

A

pointer

to

an

azn_creds_h_t

variable

that

will

contain

the

handle

to

the

new

credential

chain

upon

successful

completion.

Description

This

function

creates

a

new,

empty

credentials

chain,

assigns

it

a

handle,

and

returns

a

pointer

to

the

handle.

Note:

Alternatively,

when

you

are

declaring

an

attribute

list

handle

to

for

use

as

an

authorization

API

output

parameter

you

can

declare

the

handle

and

assign

it

the

value

AZN_C_INVALID_HANDLE,

which

indicates

that

it

is

uninitialized.

In

this

case

when

the

authorization

API

function

returns

data

in

the

parameter,

it

will

automatically

create

an

attribute

list

and

return

the

handle

in

the

output

parameter.

When

creds

is

no

longer

required,

call

azn_creds_delete()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

175

azn_creds_delete()

Deletes

the

credentials

chain

associated

with

the

credential

handle.

Syntax

azn_status_t

azn_creds_delete(

azn_creds_h_t

*creds

);

Parameters

Input

creds

Pointer

to

the

credential

handle

for

the

credential

chain

to

be

deleted.

The

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

Output

creds

NULL

pointer

to

a

credentials

handle

that

is

invalid

upon

return.

Description

This

function

deletes

the

credentials

chain

associated

with

the

handle

creds.

This

function

sets

the

input

credentials

handle

to

an

invalid

value

to

ensure

that

it

cannot

be

used

in

future

functions.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

176

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_equal()

Compares

the

contents

of

two

credentials.

Syntax

azn_status_t

azn_creds_equal(

const

azn_creds_h_t

cred1,

const

azn_creds_h_t

cred2,

azn_boolean_t

*is_equal

);

Parameters

Input

cred1

Handle

to

a

credential.

The

credential

handle

should

be

a

handle

for

an

existing,

non-empty

credential

which

contains

valid

data.

cred2

Handle

to

a

credential.

The

credential

handle

should

be

a

handle

for

an

existing,

non-empty

credential

which

contains

valid

data.

Output

is_equal

A

pointer

to

an

azn_boolean_t

variable

that

will

receive

the

boolean

result

of

this

call.

azn_creds_equal()

returns

a

boolean

value

of

true

or

false,

indicating

if

the

two

compared

credentials

are

equal.

This

value

is

true

when

the

credentials

are

equal,

and

false

when

the

credentials

are

not

equal.

Description

This

function

compares

the

contents

of

two

credentials.

The

function

returns

true

when

the

credentials

are

identical

and

false

when

the

credentials

differ.

The

value

is

returned

in

the

output

parameter

is_equal.

Return

Values

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

Handle

passed

as

cred1

or

cred

2

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

Appendix

A.

Authorization

API

reference

177

azn_creds_for_subject()

Returns

a

pointer

to

a

handle

to

a

credentials

chain.

The

handle

is

used

to

extract

an

individual

credentials

chain

from

a

longer

chain

containing

the

combined

credentials

chains

of

several

subjects.

Syntax

azn_status_t

azn_creds_for_subject(

const

azn_creds_h_t

creds,

const

unsigned

int

subject_index,

azn_creds_h_t

*new_creds);

Parameters

Input

creds

Handle

to

a

credentials

structure

representing

the

combined

credentials

chain

of

several

subjects.

The

combined

credentials

chain

contains

a

list

of

1

or

more

individual

credentials

chains.

When

this

function

returns,

the

structure

referred

to

by

creds

is

unchanged.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

subject_index

Index

of

the

requested

individual

credentials

chain

within

the

combined

credentials

chain.

The

index

of

the

first

credentials

chain

in

the

combined

credentials

chain,

which

should

be

that

of

the

initiator,

is

zero

(0).

Output

new_creds

Pointer

to

the

handle

to

the

new

credentials

structure

that

is

returned.

Description

This

function

returns

a

handle,

new_creds,

to

a

credentials

chain

for

the

individual

credential

at

index

subject_index

within

the

credentials

chain

creds.The

chain

creds

contains

the

combined

credentials

of

several

subjects.

This

function

does

not

modify

the

input

handle

creds

and

the

credentials

chain

to

which

it

refers.

Later

changes

to

this

structure,

including

the

release

of

its

storage,

have

no

effect

on

new_creds.

Combined

credentials

chains

are

created

by

azn_creds_combine().

The

first

credential

chain

in

a

combined

credentials

chain

is

that

of

the

initiator,

and

its

index

is

zero

(0).

Callers

can

retrieve

the

credentials

of

the

initiator

by

passing

the

constant

AZN_C_INITIATOR_INDEX

as

the

value

of

subject_index.

Note:

This

call

uses

the

new

credential

handle

new_creds.

When

you

declare

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

When

new_creds

is

no

longer

required,

use

azn_creds_delete()

to

release

its

storage.

178

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Use

azn_creds_num_of_subjects()

to

determine

the

total

number

of

credentials

chains

in

a

combined

credentials

chain.

Return

Values

If

successful,

the

function

will

returns

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

as

creds

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

The

pointer

to

the

new

credentials

handle

supplied

as

new_creds

is

invalid.

v

AZN_S_INVALID_SUBJECT_INDEX

The

supplied

index

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

179

azn_creds_get_attr_value_string()

Obtains

the

string

value

of

the

specified

attribute

in

the

specified

credential

Syntax

azn_status_t

azn_creds_get_attr_value_string(

const

azn_creds_h_t

creds,

const

unsigned

int

subject_index,

const

azn_string_t

attr_name,

azn_string_t

*attr_value

);

Parameters

Input

creds

Handle

to

a

credential

list.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

subject_index

The

index

of

the

specified

credential

with

the

credential

chain

for

which

the

attribute

value

is

to

be

retrieved.

attr_name

The

attribute

name.

Output

attr_value

Pointer

to

an

azn_string_t

variable

that

will

contain

the

address

of

the

attribute

string

value

upon

successful

completion

of

the

routine.

Description

This

function

retrieves

attribute

values

from

a

user

credential.

This

function

accesses

the

attribute

list

of

the

specified

credential

directly

and

gets

the

string

value

of

the

specified

attribute

from

it.

When

attr_value

is

no

longer

needed,

call

azn_release_string()

to

release

its

storage.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_INVALID_STRING_REF

The

specified

attribute

name

is

invalid.

v

AZN_S_INVALID_CREDS_HDL

The

specified

credentials

handle

is

invalid.

v

AZN_S_INVALID_SUBJECT_INDEX

The

index

into

the

credentials

chain

is

invalid.

180

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_get_attrlist_for_subject()

Returns

information

from

a

specified

subject’s

credentials

chain

within

a

specified

(and

possibly

combined)

credentials

chain.

Syntax

azn_status_t

azn_creds_get_attrlist_for_subject

(

const

azn_creds_h_t

creds,

const

unsigned

int

subject_index,

azn_attrlist_h_t

*creds_attrlist

);

Parameters

Input

creds

Handle

to

a

credentials

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

subject_index

Index

of

the

requested

individual

subject

within

the

credentials

chain.

The

index

of

the

first

credential

in

the

combined

credentials

chain,

which

should

be

that

of

the

initiator,

is

zero

(0).

Output

creds_attrlist

Pointer

to

the

handle

of

an

attribute

list

that

holds

the

specified

subject’s

attribute

information

on

return.

The

attribute

list

handle

pointer

passed

as

the

creds_attrlist

parameter

can

point

to

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

Description

This

function

returns

an

attribute

list

containing

privilege

attribute

information

from

the

credentials

chain

for

the

individual

subject

at

index

subject_index

within

a

credentials

chain

creds.

Combined

credentials

chains

are

created

by

azn_creds_combine().

The

first

credential

chain

in

a

combined

credentials

chain

is

that

of

the

initiator,

and

its

index

will

be

zero

(0).

Callers

can

retrieve

the

attributes

of

the

credentials

chain

of

the

initiator

by

passing

the

constant

AZN_C_INITIATOR_INDEX

as

the

value

of

subject_index.

This

function

does

not

modify

the

input

handle

creds

and

the

credentials

chain

to

which

it

refers.

Later

changes

to

creds,

including

releasing

its

storage,

will

have

no

effect

on

creds_attrlist.

Appendix

A.

Authorization

API

reference

181

Use

the

azn_attrlist*

functions

to

retrieve

individual

attribute

values

from

creds_attrlist.

See

ogauthzn.h

for

a

list

of

attribute

names.

The

audit

identifier

associated

with

the

specified

credentials

structure

is

present

in

the

returned

attribute

list.

It

is

the

value

attribute

of

an

entry

whose

name

attribute

is

AZN_C_AUDIT_ID.

Note:

This

function

uses

a

new

credentials

handle,

creds.

When

declaring

a

new

credential

handle

or

attribute

list

handle

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

When

creds_attrlist

is

no

longer

required,

call

azn_attrlist_delete()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_SUBJECT_INDEX

The

supplied

index

is

invalid.

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

handle

supplied

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

182

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_get_pac()

Creates

and

returns

a

privilege

attribute

certificate

(PAC)

by

invoking

a

specified

PAC

service

on

the

supplied

credentials

chain.

Syntax

azn_status_t

azn_creds_get_pac(

const

azn_creds_h_t

creds,

const

azn_string_t

pac_svc_id,

azn_buffer_t

*pac

);

Parameters

Input

creds

Handle

to

the

credentials

chain

whose

information

is

used

to

build

the

PAC.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

pac_svc_id

Identification

(id)

of

the

PAC

service

that

produces

the

PAC.

Output

pac

Pointer

to

an

azn_buffer_t

variable

that

will

contain

the

address

of

the

buffer

data

upon

successful

completion

of

the

routine.

Description

This

function

uses

the

PAC

service

whose

identification

is

supplied

as

pac_svc_id

to

build

a

new

PAC.

The

PAC

service

uses

the

information

in

the

supplied

credentials

chain

to

build

the

PAC.

Different

PAC

services

might

produce

PACs

with

different

formats.

Some

PAC

services

can

cryptographically

protect

or

sign

the

PACs

they

produce.

When

pac_svc_id

is

NULL,

the

default

PAC

service

returns

an

architecture-independent

and

network-independent

encoding

of

the

specified

credentials

chain.

This

PAC

can

be

safely

transmitted.

The

receiver

of

the

PAC

can

use

azn_pac_get_creds()

to

decode

the

PAC

and

obtain

a

valid

copy

of

the

original

credentials

chain.

This

function

takes

as

an

input

parameter

a

handle

to

an

existing

credentials

structure,

and

returns

a

pointer

to

the

output

PAC

in

an

authorization

API

buffer.

This

function

does

not

modify

the

input

handle

creds

and

the

credentials

chain

to

which

it

refers.

Later

changes

to

creds,

including

releasing

its

storage,

will

have

no

effect

on

pac.

When

pac

is

no

longer

required,

call

azn_release_buffer()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

Appendix

A.

Authorization

API

reference

183

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_PAC_SVC

The

privilege

attribute

certificate

service

identifier

is

invalid.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

184

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_creds_modify()

Modifies

an

existing

credentials

chain

and

returns

a

pointer

to

the

handle

to

a

new

credentials

chain

containing

the

modifications.

Syntax

azn_status_t

azn_creds_modify(

const

azn_creds_h_t

creds,

const

azn_string_t

mod_svc_id,

const

azn_attrlist_h_t

mod_info,

azn_creds_h_t

*new_creds

);

Parameters

Input

creds

Handle

to

the

authorization

credentials

chain

to

be

modified.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

mod_svc_id

Identification

(id)

of

the

credential

modification

service.

mod_info

Attribute

list

containing

modification

service-specific

or

application-specific

data

that

describes

the

desired

credential

modifications.

Attribute

lists

that

are

empty

are

inserted

into

the

credentials.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

Output

new_creds

Pointer

to

a

handle

to

a

credentials

chain

that

contains

the

modified

credentials

chain

upon

return.

The

credentials

handle

pointer

passed

as

the

new_creds

parameter

can

point

to

one

of

the

following:

v

A

credentials

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

Note

that

this

will

result

in

an

empty

output

credential.

v

A

credentials

handle

for

a

new,

empty

credential,

which

has

been

initialized

by

a

call

to

azn_creds_create().

Note

that

this

will

result

in

an

empty

output

credential.

Description

This

function

uses

the

specified

modification

service

mod_svc_id,

and

optionally

an

attribute

list

mod_info

which

contains

modification

information

provided

by

the

caller,

to

modify

a

copy

of

the

supplied

credentials

chain

creds.

The

function

Appendix

A.

Authorization

API

reference

185

returns

a

pointer

to

a

handle

to

a

new

credentials

chain

new_creds

containing

the

requested

modifications.

The

supplied

credentials

chain

is

unchanged.

When

mod_svc_id

is

NULL,

this

function

modifies

an

existing

credential

chain

creds

by

adding

the

attribute

list

mod_info

to

the

credentials

chain,

and

returning

the

modified

credential

in

new_creds.

The

following

credential

attributes

are

considered

readonly

and

can

not

be

modified

by

azn_creds_modify().

If

any

of

these

attributes

are

specified

in

the

mod_info

input

attribute

list,

they

are

ignored:

v

azn_cred_principal_uuid

v

azn_cred_principal_name

v

azn_cred_principal_domain

v

azn_cred_version

v

azn_cred_mech_id

v

azn_cred_group_uuids

v

azn_cred_group_names

v

azn_cred_authzn_id

v

azn_cred_ldap_dn

If

the

input

creds

handle

references

a

combined

credentials

chain

with

more

than

one

element,

only

the

first

element

will

be

modified.

This

is

the

default

behavior

when

mod_svc_id

is

NULL.

In

this

case,

the

output

chain

consists

of

the

modified

first

element

followed

by

unmodified

copies

of

the

remaining

elements

in

the

input

combined

credentials

chains.

The

elements

in

the

output

credentials

chain

are

kept

in

the

same

order

as

their

counterparts

in

the

input

credentials

chain.

Note:

This

function

uses

a

new

credential

handle,

new_creds.

When

declaring

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

When

new_creds

is

no

longer

required,

call

azn_creds_delete()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_MOD_FUNCTION

The

supplied

modification

service

identifier

is

invalid.

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

handle

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

186

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

pointer

to

the

new

credentials

handle

that

references

the

new

output

credentials

chain

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

187

azn_creds_num_of_subjects()

Returns

the

number

of

individual

subjects’

credentials

chains

in

a

combined

credentials

chain.

Syntax

azn_status_t

azn_creds_num_of_subjects(

const

azn_creds_h_t

creds,

unsigned

int

*num_of_subjects

);

Parameters

Input

creds

Handle

to

a

credentials

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

Output

num_of_subjects

Pointer

to

an

unsigned

int

variable

that

will

contain

the

number

of

individual

credentials

within

the

credential

chain

upon

successful

completion

of

the

routine.

Note

that

if

the

credentials

handle

passed

in

as

an

input

parameter

is

invalid

(AZN_C_INVALID_HANDLE)

or

points

to

an

empty

credentials

list,

an

error

will

be

generated

and

num_of_subjects

will

be

set

to

0.

Description

This

function

returns

the

number

of

individual

subjects,

num_of_subjects,

whose

credentials

appear

in

a

credentials

chain

creds.

Combined

credentials

chains

are

created

by

the

azn_creds_combine()

function.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_ATTR_INVALID_INTEGER_REF

The

integer

reference

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

188

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

189

azn_creds_set_attr_value_string()

Sets

the

value

of

the

specified

attribute

in

the

specified

user

credential.

Syntax

azn_status_t

azn_creds_set_attr_value_string

const

azn_creds_h_t

creds,

const

unsigned

int

subject_index,

const

azn_string_t

attr_name,

const

azn_string_t

attr_value

);

Parameters

Input

creds

Handle

to

the

credentials

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

subject_index

The

index

of

the

specified

credential

within

the

credential

chain.

attr_name

The

name

of

the

attribute

to

be

modified.

attr_value

The

string

value

to

be

assigned

to

the

attribute.

Description

Use

this

function

to

modify

the

attribute

values

in

a

user

credential.

This

function

edits

the

attribute

list

of

the

specified

credential

and

sets

the

specified

attribute

to

the

specified

string

value.

The

following

credential

attributes

are

considered

readonly

and

must

not

be

modified

using

this

API.

v

azn_cred_principal_uuid

v

azn_cred_principal_name

v

azn_cred_principal_domain

v

azn_cred_version

v

azn_cred_mech_id

v

azn_cred_group_uuids

v

azn_cred_group_names

v

azn_cred_authzn_id

v

azn_cred_ldap_dn

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_INVALID_STRING_VALUE

The

specified

string

value

is

invalid.

190

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_INVALID_CREDS_HDL

The

specified

credentials

handle

is

invalid.

v

AZN_S_INVALID_SUBJECT_INDEX

The

index

into

the

credentials

chain

is

invalid.

v

AZN_S_ATTR_READONLY

Modification

of

the

attribute

is

prohibited.

Appendix

A.

Authorization

API

reference

191

azn_decision_access_allowed()

Makes

an

access

control

decision.

Syntax

azn_status_t

azn_decision_access_allowed(

const

azn_creds_h_t

creds,

const

azn_string_t

protected_resource,

const

azn_string_t

operation,

const

int

*permission

);

Parameters

Input

creds

Handle

to

the

initiator’s

credential

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

protected_resource

Name

of

the

request’s

target.

operation

Name

of

the

requested

operation.

Output

permission

Pointer

to

an

integer

variable

that

will

contain

the

appropriate

permission

code

upon

successful

completion

of

the

routine.

When

the

returned

status

value

is

AZN_S_COMPLETE,

the

returned

permission

is

either

AZN_C_PERMITTED

or

AZN_C_NOT_PERMITTED.

When

the

returned

status

code

is

not

AZN_S_COMPLETE,

the

returned

permission

is

set

to

AZN_C_NOT_PERMITTED.

If

additional

information

beyond

a

boolean

result

is

needed,

use

azn_decision_access_allowed_ext().

Description

This

function

decides

whether

the

initiator

specified

by

credentials

creds

is

authorized

to

perform

the

operation

operation

on

the

target

protected_resource.

The

decision

is

returned

through

permission.

azn_decision_access_allowed()

is

semantically

equivalent

to

azn_decision_access_allowed_ext()

when

app_context=NULL

and

permission_info=NULL.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

192

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_PROTECTED_RESOURCE

The

target

name

is

invalid.

v

AZN_S_INVALID_OPERATION

The

operation

has

no

meaning

for

the

specified

target.

v

AZN_S_INVALID_PERMISSION_REF

The

integer

reference

to

return

the

permission

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

193

azn_decision_access_allowed_ext()

Makes

an

access

control

decision

using

application-specific

context

information;

returns

information

about

why

the

decision

was

made.

Syntax

azn_status_t

azn_decision_access_allowed_ext(

const

azn_creds_h_t

creds,

const

azn_string_t

protected_resource,

const

azn_string_t

operation,

const

azn_attrlist_h_t

app_context,

int

*permission,

azn_attrlist_h_t

*permission_info

);

Parameters

Input

creds

Handle

to

the

initiator’s

credentials

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

protected_resource

Name

of

the

target

of

the

request.

operation

Name

of

the

requested

operation.

app_context

Attribute

list

containing

application-specific

context

access

control

information.

A

NULL

value

indicates

there

is

no

context

access

control

information.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

permission_info

Pointer

to

an

attribute

list

through

which

the

implementation

might

return

implementation-specific

information

about

the

decision.

If

a

NULL

value

is

passed

as

input,

then

no

information

will

be

returned.

Output

permission

Pointer

to

an

integer

variable

that

will

contain

the

appropriate

permission

code

upon

successful

completion

of

the

routine.

When

the

returned

status

value

is

AZN_S_COMPLETE,

the

returned

permission

is

either

AZN_C_PERMITTED

or

AZN_C_NOT_PERMITTED.

When

the

returned

status

code

is

not

AZN_S_COMPLETE,

the

returned

permission

is

set

to

AZN_C_NOT_PERMITTED.

194

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

permission_info

Pointer

to

an

attribute

list

through

which

the

implementation

can

return

implementation-specific

information

about

the

decision.

When

a

NULL

pointer

is

passed

as

input,

no

information

is

returned.

The

information

contained

in

the

attribute

list

is

added

to

the

list

when

the

attribute

list

handle

is

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

The

output

parameter

permission_info

can

be

used

to

return

implementation-specific

qualifiers

to

AZN_C_NOT_PERMITTED.

The

qualifiers

can

be

used

to

assist

the

calling

application

or

the

initiator

in

formulating

a

request

which

will

be

authorized.

Examples

of

such

qualifiers

might

include:

“not

permitted

yet,”

“requires

additional

privilege

attributes,”

or

“permissible

with

restrictions.”

For

more

information,

see

“Enabling

the

return

of

permission

information”

on

page

47.

Description

This

function

decides

whether

the

initiator

specified

by

the

credentials

chain

creds

is

authorized

to

perform

the

operation

operation

on

the

target

protected_resource.

Optionally,

callers

can

supply

application-specific

context

access

control

information

using

the

app_context

argument.

The

decision

is

returned

through

permission.

Optionally,

the

implementation

can

return

implementation-specific

information

about

the

decision

through

permission_info.

For

example,

the

information

can

indicate

which

rule

was

responsible

for

granting

or

denying

access.

Note:

This

function

uses

a

new

attribute

list

handle,

permission_info.

When

declaring

a

new

attribute

list

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_PROTECTED_RESOURCE

The

target

name

is

invalid.

v

AZN_S_INVALID_OPERATION

The

operation

has

no

meaning

for

the

specified

target.

Appendix

A.

Authorization

API

reference

195

v

AZN_S_INVALID_PERMISSION_REF

The

integer

reference

to

return

the

permission

is

invalid.

v

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

context

access

control

information

(ACI)

is

invalid.

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

handle

for

the

returned

permission

information

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

196

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_entitlement_get_entitlements()

Returns

entitlements

of

an

initiator.

Syntax

azn_status_t

azn_entitlement_get_entitlements(

const

azn_creds_h_t

creds,

const

azn_string_t

entitlements_svc_id,

const

azn_attrlist_h_t

app_context,

azn_attrlist_h_t

*entitlements

);

Parameters

Input

creds

Handle

to

the

credentials

of

the

subject

whose

entitlements

are

to

be

returned.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

entitlements_svc_id

The

id

of

the

entitlement

service

to

be

used

app_context

Handle

to

an

attribute

list

containing

application-specific

or

entitlements-service-specific

context

information.

A

NULL

value

should

be

used

if

no

application

state

is

passed.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

Output

entitlements

Pointer

to

a

attribute

list

handle

variable

which

will

hold

the

entitlement

information

on

return.

The

attribute

list

handle

pointer

passed

as

the

entitlements

parameter

can

point

to

one

of

the

following:

v

A

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Description

This

uses

an

entitlement

service

identified

by

entitlements_svc_id

to

return

the

entitlements

of

an

initiator

identified

by

credentials

creds.

The

calling

application

Appendix

A.

Authorization

API

reference

197

may

pass

application-specific

or

entitlements-service-specific

context

data

using

an

attribute

list

app_context.

The

entitlements

are

returned

using

the

attribute

list

entitlements.

Note:

This

function

declares

a

new

attribute

list

handle,

entitlements.

When

declaring

a

new

attribute

list

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

The

constants

AZN_C_REQUEST_TIME,

AZN_C_AUTHN_QUALITY,

AZN_C_REQUESTER_LOC,

and

AZN_C_REQUEST_ROUTE_QOP,

may

be

used

as

name

attribute

of

entries

in

the

app_context

attribute

list

to

communicate

common

types

of

context

information.

Return

Values

If

successful,

the

function

returns

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

can

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_CREDS_HDL

The

creds

handle

supplied

is

invalid.

v

AZN_S_INVALID_ENTITLEMENT_SVC

The

entitlement

service

identifier

is

invalid.

v

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

application

context

is

invalid.

v

AZN_S_INVALID_ENTITLEMENTS_HDL

The

attribute

list

handle

for

the

entitlements

is

invalid.

v

AZN_S_AUTHORIZATION_FAILURE

The

caller

does

not

possess

the

authority

required

to

invoke

this

function.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

Implementation

specific

minor

error

codes

can

be

derived

from

the

returned

status

code

with

azn_error_minor().

198

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_error_get_string()

Returns

the

Policy

Director

Serviceability

message

string

for

the

specified

data

structure

of

type

azn_status_t.

Syntax

azn_status_t

azn_error_get_string(

const

azn_status_t

aznstatus,

azn_string_t

*error_string,

);

Parameters

Input

aznstatus

Authorization

API

status

Output

error_string

Pointer

to

an

azn_string_t

variable

that

will

contain

the

error

string

upon

successful

completion

of

the

routine.

Description

This

interface

returns

the

Policy

Director

Serviceability

(PDSVC)

message

string

for

the

authorization

API

status

that

is

passed

in.

It

returns

the

message

string

for

the

minor

error

code

if

one

exists.

When

a

minor

error

code

does

not

exist,

it

returns

the

message

string

for

the

major

error

code.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

unsuccessful,

the

function

returns

one

of

the

following

major

error

codes:

v

AZN_S_INVALID_MAJOR_CODE

The

major

error

code

is

invalid.

v

AZN_S_MAJOR_CODE_MESSAGE_NOT_FOUND

There

is

no

message

in

the

message

table

for

the

major

error

code.

v

AZN_S_MINOR_CODE_MESSAGE_NOT_FOUND

The

minor

error

code

is

invalid.

Alternately,

this

error

message

can

mean

that

there

is

no

message

in

the

message

table

for

the

minor

error

code.

v

AZN_S_INVALID_STRING_REF

The

pointer

of

type

error_string

is

NULL.

Appendix

A.

Authorization

API

reference

199

azn_error_major()

Returns

the

major

error

code

that

is

associated

with

a

returned

status

code.

Syntax

unsigned

int

azn_error_major(

const

azn_status_t

status_code

);

Parameters

Input

status_code

Previously

returned

status

code

by

any

of

the

azn_*

routines.

Description

This

function

returns

the

major

error

code

associated

with

a

previously

returned

status

code.

Return

Values

Any

of

the

defined

major

error

codes,

AZN_S_*.

For

a

list

of

error

codes,

see

ogauthzn.h

and

aznutils.h.

200

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_error_minor()

Returns

the

implementation-specific

minor

error

code

that

is

associated

with

a

returned

status

code.

Syntax

unsigned

int

azn_error_minor(

const

azn_status_t

status_code

);

Parameters

Input

status_code

Previously

returned

status

code

by

any

of

the

azn_*

routines.

Description

The

function

returns

the

minor

error

code

associated

with

a

previously

returned

status

code.

Return

Values

An

implementation

specific

minor

error

code

is

returned.

For

a

complete

list

of

minor

error

codes,

see

the

file

pdbaclmsg.h.

Appendix

A.

Authorization

API

reference

201

azn_error_minor_get_string()

Returns

a

string

describing

the

implementation-specific

minor

error

code.

Syntax

azn_status_t

azn_error_minor_get_string(

const

unsigned

int

minor_error

azn_string_t

*minor_error_string

);

Parameters

Input

minor_error

Minor

error

code

previously

returned

by

azn_error_minor().

Output

minor_error_string

Pointer

to

an

azn_string_t

variable

that

will

contain

the

minor

error

string

upon

successful

completion

of

the

routine.

Description

This

function

returns

a

string

that

describes

the

error

corresponding

to

a

previously

returned

minor

error

status

code.

When

minor_error_string

is

no

longer

needed,

use

azn_release_string()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_MINOR_CODE_MESSAGE_NOT_FOUND

The

specified

minor

code

has

not

corresponding

error

message

in

the

catalog.

This

message

also

appears

when

a

minor

code

of

0

(success)

is

passed.

v

AZN_S_INVALID_STRING_REF

The

minor

error

string

is

NULL.

202

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_id_get_creds()

Returns

a

handle

to

the

credentials

chain

associated

by

a

specified

authorization

authority

with

a

specified

identity.

Syntax

azn_status_t

azn_id_get_creds(

const

azn_string_t

authzn_authority,

const

azn_string_t

mechanism_id,

const

azn_buffer_t

mechanism_info,

azn_creds_h_t

*new_creds

);

Parameters

Input

authzn_authority

The

name

of

the

Tivoli

Access

Manager

secure

domain.

Use

this

value

to

specify

the

domain

when

operating

in

a

multiple-domain

environment.

The

domain

name

must

match

the

name

of

the

domain

that

was

configured

for

the

client

by

svrsslcfg.

You

can

leave

this

value

NULL.

In

this

case,

the

name

of

the

secure

domain

is

automatically

determined

from

the

value

specified

in

the

configuration

file.

mechanism_id

Authentication

mechanism

that

is

used

to

generate

the

identity

passed

through

mechanism_info.

A

NULL

input

value

selects

a

default

authentication

mechanism.

mechanism_info

Buffer

containing

initiator

access

control

information,

which

consists

of

identity

information

obtained

from

an

authentication

service.

The

authentication

service

used

to

produce

this

information

should

be

identified

using

the

mechanism_id

argument.

A

NULL

input

value

denotes

the

default

identity

for

the

selected

authentication

mechanism

from

the

environment.

Output

new_creds

Pointer

to

the

handle

of

a

new,

empty

credentials

chain

that

will

hold

the

returned

credentials.

The

credentials

handle

pointer

passed

as

the

new_creds

parameter

can

be

one

of

the

following:

v

A

credentials

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

credentials

handle

for

a

new,

empty

credentials

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

In

this

case,

the

handle

is

updated.

v

A

credentials

handle

for

an

existing,

non-empty

credentials

list

which

contains

valid

data.

In

this

case,

the

handle

is

updated.

Appendix

A.

Authorization

API

reference

203

Description

This

function

builds

an

authorization

credentials

chain,

referenced

by

the

returned

handle

new_creds,

for

the

identity

corresponding

to

the

initiator

access

control

information

mechanism_info

produced

by

an

authentication

mechanism

mechanism_id.

Specifying

a

NULL

value

for

authzn_authority

causes

the

default

domain

to

be

used.

When

a

non-NULL

value

is

used,

it

must

match

the

name

of

the

domain

that

was

configured

for

the

client

by

svrsslcfg.

If

it

does

not

match,

the

call

will

fail

with

AZN_S_DOMAIN_CONFLICT.

Specifying

NULL

values

for

mechanism_id

and

causes

the

default

authentication

mechanism

to

be

the

installed

user

registry

in

the

Policy

Director

secure

domain.

For

more

information,

see

“Default

user

registry

information

structure”

on

page

16.

The

azn_id_get_creds()

interface

also

calls

out

to

the

list

of

configured

entitlement

services.

The

credential

is

built

from

registry

attributes

first

and

then

each

configured

entitlement

service

is

called

in

turn

to

get

a

list

of

attributes.

The

attributes

are

then

added

to

the

credential.

When

the

attribute

list

returned

from

the

entitlement

service

includes

the

reserved

credential

attribute

azn_cred_groups,

azn_id_get_creds()

calls

the

credential

groups

modification

service,

azn_mod_rad.

If

this

credentials

modification

service

has

been

configured

by

the

administrator,

then

the

groups

are

automatically

added

to

the

user

credential

by

this

service.

Note:

This

function

declares

a

new

credential

handle,

new_creds.

When

declaring

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_AUTHORITY

The

authorization

authority

identification

(id)

is

invalid.

v

AZN_S_INVALID_MECHANISM

The

security

mechanism

identification

(id)

is

not

supported

by

the

selected

authorization

authority.

v

AZN_S_INVALID_MECHANISM_INFO

The

security

mechanism

information

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

The

credentials

handle

supplied

for

the

new

credentials

chain

is

invalid.

v

AZN_S_DOMAIN_CONFLICT

The

domain

name

specified

in

the

authzn_authority

parameter

does

not

match

the

domain

name

that

was

used

when

the

authorization

API

client

was

configured.

204

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

205

azn_init_set_code_set()

Informs

the

authorization

API

of

the

codeset

of

the

calling

application.

Codeset

to

be

UTF-8

or

the

local

codeset.

Syntax

azn_status_t

azn_init_set_code_set(

const

azn_string_t

codeset

);

Parameters

Input

codeset

Specifies

whether

the

codeset

is

UTF-8

or

a

local

codeset.

This

value

is

one

of

the

predefined

azn_string_t

constants:

AZN_EXTPSEC_CONST

azn_string_t

azn_code_set_utf8

AZN_EXTPSEC_CONST

azn_string_t

azn_code_set_local

Description

Informs

the

authorization

API

(and

the

attribute

list

implementation

in

particular)

of

the

codeset

of

the

calling

application.

When

this

function

is

not

called,

the

default

is

that

the

caller

is

running

in

the

local

codeset.

When

you

are

running

in

UTF-8

codeset,

and

intend

to

call

the

authorization

API

with

strings

in

UTF-8,

use

this

function

to

notify

the

authorization

API

client.

The

input

parameter

codeset

takes

a

predefined

azn_string_t

codeset

specifier

constant.

To

declare

use

of

UTF-8,

use

azn_codeset_utf8.

Note

that

azn_codeset_local

is

NULL,

which

is

the

default.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_invalid_codeset

is

returned

when

the

value

supplied

for

codeset

is

not

one

of

the

predefined

constants.

206

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_initialize()

Initializes

the

authorization

service.

Syntax

azn_status_t

azn_initialize(

const

azn_attrlist_h_t

init_data,

azn_attrlist_h_t

*init_info

);

Parameters

Input

init_data

Handle

to

an

attribute

list

containing

implementation-specific

initialization

data.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

Output

init_info

Pointer

to

a

handle

to

an

attribute

list

through

which

implementation-specific

information

is

returned

from

initialization.

The

attribute

list

handle

pointer

passed

as

the

init_info

parameter

can

be

one

of

the

following:

v

A

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

A

credentials

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Description

This

function

must

be

called

before

calling

most

other

authorization

API

functions.

The

exceptions

to

this

rule

are

the

attribute

list

functions

(azn_attrlist_*)

and

the

error

handling

functions

(azn_error_*).

Upon

return

from

this

call,

the

attribute

list

referenced

by

init_info

contains

the

authorization

API

version

number,

which

is

returned

as

the

value

for

the

attribute

AZN_C_VERSION.

When

init_info

is

no

longer

required,

use

azn_attrlist_delete()

to

release

its

storage.

Note:

This

function

declares

a

new

attribute

list

handle,

init_info.

When

declaring

a

new

attribute

list

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

When

using

this

function

on

Windows

NT,

do

not

call

it

from

dllMain().

The

function

dllMain()

is

run

as

one

thread,

which

prevents

azn_initialize()

from

spawning

other

threads.

When

programming

in

C++

on

Windows

NT,

do

not

call

Appendix

A.

Authorization

API

reference

207

azn_initialize()

from

a

global

or

statically

defined

class

constructor

because

these

constructors

are

run

from

dllMain().

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_ALREADY_INITIALIZED

azn_initialize()

has

been

called

twice

without

an

intervening

call

to

azn_shutdown().

v

AZN_S_CONFIG_INVALID_LISTENING_PORT

An

Administration

Service

plug-in

was

registered

but

no

ssl-listening-port

was

specified.

v

AZN_S_INVALID_INIT_DATA_HDL

The

attribute

list

handle

for

the

initialization

information

is

invalid.

v

AZN_S_INVALID_INIT_INFO_HDL

The

attribute

list

handle

for

the

output

initialization

information

is

invalid.

v

AZN_S_SVC_DEFINITION_ERROR

A

service

has

been

defined

incorrectly.

The

error

condition

is

caused

either

by

invalid

entries

in

the

service

definition

attributes

that

are

passed

as

input

to

azn_initialize(),

or

by

invalid

entries

in

the

configuration

file.

v

AZN_S_SVC_INIT_FAILED

A

service

failed

to

initialize

correctly.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DLL_LOAD_FAILED

The

DLL

for

a

service

failed

to

load

correctly

v

AZN_S_SVC_INITIALIZE_NOT_FOUND

The

azn_svc_initialize()

interface

was

not

found

in

the

DLL

module

for

a

service.

v

AZN_S_SVC_SHUTDOWN_NOT_FOUND

The

azn_svc_shutdown()

interface

was

not

found

in

the

DLL

module

for

a

service.

v

AZN_S_SVC_ENT_FUNC_NOT_FOUND

The

azn_entitlement_get_entitlements()

interface

was

not

found

in

the

DLL

module

for

an

entitlement

service.

v

AZN_S_SVC_PAC_FUNC_NOT_FOUND

The

azn_pac_get_creds()

or

azn_creds_get_pac()

interface

was

not

found

in

the

DLL

module

for

a

PAC

service.

v

AZN_S_SVC_CRED_MOD_FUNC_NOT_FOUND

The

azn_creds_modify()

interface

was

not

found

in

the

DLL

module

for

a

credentials

modification

service.

v

AZN_S_SVC_SERVICE_IS_REGISTERED

The

service

ID

cannot

be

registered

because

it

is

already

listed

as

registered

by

the

Service

Dispatcher.

208

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_SVC_ADMIN_UNKNOWN_PARAMETER

The

service

definition

for

the

Administration

Service

plug-in

contained

an

invalid

parameter.

v

AZN_S_SVC_ADMIN_POBJ_NOT_SPECIFIED

The

Administration

Service

plug-in

definition

specified

the

-pboj

parameter

but

failed

to

specify

the

name

of

the

protected

object

hierarchy.

v

AZN_S_SVC_ADMIN_POBJ_ALREADY_REGISTERED

The

protected

object

hierarchy

name

has

already

been

registered

by

another

Administration

service

definition

within

this

authorization

API

application.

v

AZN_S_SVC_ADMIN_TASK_FUNC_NOT_FOUND

The

Administration

Service

plug-in

implemented

either

azn_admin_get_tasklist()

or

azn_admin_perform_task()

but

did

not

implement

both

interfaces.

Administration

Service

plug-ins

must

implement

either

both

or

none.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

209

azn_pac_get_creds()

Returns

a

handle

to

new

credentials

chain

that

is

derived

from

a

privilege

attribute

certificate

(PAC)

by

a

specified

PAC

service.

Syntax

azn_status_t

azn_pac_get_creds(

const

azn_buffer_t

pac,

const

azn_string_t

pac_svc_id,

azn_creds_h_t

*new_creds

);

Parameters

Input

pac

Buffer

structure

that

holds

the

supplied

PAC.

pac_svc_id

Identification

(id)

of

the

PAC

service

that

produces

the

credentials

chain.

Output

new_creds

Pointer

to

a

handle

to

the

returned

credentials

chain.

The

credentials

handle

pointer

passed

as

the

new_creds

parameter

can

be

one

of

the

following:

v

A

credentials

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

credentials

handle

for

a

new,

empty

credential,

which

has

been

initialized

by

a

call

to

azn_creds_create().

In

this

case,

the

handle

is

updated

(overwritten)

with

new

credentials.

v

A

credentials

handle

for

an

existing,

non-empty

credential

chain

which

contains

valid

data.

In

this

case,

the

handle

is

updated

(overwritten)

with

new

credentials.

Description

This

function

uses

the

identified

PAC

service

(pac_svc_id)

to

build

a

new

credentials

chain

using

the

information

in

the

supplied

PAC

(pac).

Some

PAC

services

will

cryptographically

verify

the

protection

or

signature

on

the

received

PAC,

and

will

return

an

error

if

the

PAC

cannot

be

verified.

Note:

This

function

declares

a

new

credentials

handle,

new_creds.

When

declaring

a

new

credentials

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

This

function

decodes

PACs

that

are

built

by

azn_creds_get_pac().

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

210

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_PAC

The

PAC

is

invalid

or

could

not

be

verified

by

the

PAC

service.

v

AZN_S_INVALID_PAC_SVC

The

id

of

the

PAC

service

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

The

credentials

handle

supplied

for

new_creds

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

A.

Authorization

API

reference

211

azn_release_buffer()

Frees

storage

associated

with

a

buffer.

Syntax

azn_status_t

azn_release_buffer(

azn_buffer_t

*buffer

);

Parameters

Input

buffer

Pointer

to

the

buffer

whose

memory

is

to

be

released.

Output

buffer

Pointer

to

the

buffer

whose

memory

is

released.

The

pointer

is

set

to

an

invalid

value

upon

successful

completion.

Description

This

function

releases

the

specified

azn_buffer_t

structure.

The

input

buffer

pointer

is

set

to

an

invalid

value

to

ensure

that

it

cannot

be

used

in

future

function

calls.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_BUFFER_REF

The

pointer

to

the

buffer

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

212

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_release_pobj()

Releases

storage

associated

with

a

protected

object

data

structure.

Syntax

azn_status_t

azn_release_pobj(

azn_pobj_t

*

pobj

);

Parameters

Input

pobj

Pointer

to

a

protected

object

structure

whose

storage

is

to

be

released.

Output

pobj

Pointer

to

a

protected

object

structure

whose

storage

is

released.

The

pointer

is

set

to

an

invalid

value

upon

successful

completion.

Description

Releases

storage

associated

with

a

protected

object

structure.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_INVALID_POBJ_REF

The

pointer

to

the

protected

object

is

NULL.

Appendix

A.

Authorization

API

reference

213

azn_release_string()

Frees

storage

that

is

associated

with

a

string.

Syntax

azn_status_t

azn_release_string(

azn_string_t

*string

);

Parameters

Input

string

Pointer

to

the

string

to

be

released.

Output

string

Pointer

to

the

string

whose

memory

is

released.

The

pointer

is

set

to

an

invalid

value

upon

successful

completion.

Description

This

function

releases

the

specified

azn_string_t

structure.

The

input

string

pointer

is

set

to

an

invalid

value

to

ensure

that

it

cannot

be

used

in

future

function

calls.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_STRING_REF

The

pointer

to

the

string

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

214

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_release_strings()

Frees

storage

that

is

associated

with

an

array

of

strings.

Syntax

azn_status_t

azn_release_strings(

azn_string_t

*strings[]

);

Parameters

Input

strings

Pointer

to

the

array

of

azn_string_t

structures

to

be

released

upon

successful

completion.

Description

This

function

releases

a

NULL-terminated

array

of

azn_string_t

structures.

The

input

string

pointer

is

set

to

an

invalid

value

to

ensure

that

it

cannot

be

used

in

future

function

calls.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_STRING_REF

Pointer

to

the

array

of

strings

is

invalid.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

Appendix

A.

Authorization

API

reference

215

azn_shutdown()

Cleans

up

internal

authorization

service

state

in

preparation

for

shutdown.

Syntax

azn_status_t

azn_shutdown();

Description

Useazn_shutdown()

to

clean

up

the

authorization

API’s

memory

and

other

internal

implementation

state

before

the

application

exits.

This

function

shuts

down

the

implementation

state

created

by

azn_initialize().

The

only

authorization

API

functions

that

can

be

used

after

calling

azn_shutdown(),

prior

to

calling

azn_initialize()

again,

are

the

attribute

list

functions

(azn_attrlist_*),

the

error

handling

functions

(azn_error_*),

and

the

memory

release

functions

(azn_*_delete

and

azn_release_*).

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_SVC_SHUTDOWN_FAILED

A

service

failed

to

shutdown

correctly.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

216

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_util_errcode()

Builds

an

azn_status_t

error

code

from

a

major

and

minor

status.

Syntax

azn_status_t

azn_util_errcode(

const

unsigned

int

major,

const

unsigned

int

minor

);

Description

Builds

an

azn_status_t

error

code

from

a

major

and

minor

status.

Parameters

Input

major

The

major

component

of

the

error

status.

minor

The

minor

component

of

the

error

status.

Return

Values

Returns

complete

azn_status_t

error

code.

Appendix

A.

Authorization

API

reference

217

azn_util_handle_is_valid()

Determine

if

the

handle

references

a

valid

data

structure.

Syntax

azn_boolean_t

azn_util_handle_is_valid(

long

handle

);

Parameters

Input

handle

A

handle

to

an

attribute

list.

Description

This

function

determines

if

the

specified

handle

references

a

valid

data

structure.

Note:

When

declaring

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

Return

Values

Returns

true

if

the

handle

is

valid

or

false

if

the

handle

is

invalid.

218

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_util_password_authenticate()

Performs

a

login

for

a

user

name

and

password

pair,

and

returns

authentication

information

if

the

login

was

successful.

Syntax

azn_status_t

azn_util_password_authenticate(

const

azn_string_t

principal_name,

const

azn_string_t

password,

azn_string_t

*mechanism_id,

azn_buffer_t

*authinfo

);

Parameters

Input

principal_name

Name

of

the

user

(principal)

used

to

log

in.

If

LDAP

authentication

is

used,

this

will

be

a

DN

string.

password

Password

for

the

user.

Output

mechanism_id

Pointer

to

a

string

identifying

the

authentication

mechanism

with

which

the

user

is

authenticated.

authinfo

Pointer

to

a

buffer

that

is

loaded

with

the

authentication

information

that

is

returned

by

a

successful

login

attempt.

Description

This

function

performs

a

login

for

a

user

name

and

password

pair,

and

returns

authentication

information

when

the

login

is

successful.

The

authentication

mechanism

used

depends

upon

the

underlying

authentication

mechanism

that

was

configured

when

the

authorization

API

was

installed.

This

function

does

not

establish

a

security

context

for

the

application.

The

mechanism_id

and

authinfo

returned

can

be

appended

with

data

specific

to

the

principal

and

passed

into

the

azn_id_get_creds()

function.

The

mechanism_id

string

is

allocated

by

the

utility

function

and

must

be

freed

using

azn_release_string()

when

no

longer

needed.

The

authinfo

buffer

must

be

freed

using

azn_release_buffer().

Return

Values

Returns

AZN_S_COMPLETE

on

success,

or

an

error

code

on

failure.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

Appendix

A.

Authorization

API

reference

219

Note:

When

used

with

Domino

or

Active

Directory,

additional

error

codes

can

be

returned,

in

cases

where

there

is

more

than

one

error

in

the

input

parameters.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

When

unsuccessful,

the

following

major

error

codes

are

returned:

v

AZN_S_FAILURE

An

error

has

been

encountered.

v

AZN_S_U_INVALID_PASSWORD

The

password

is

not

valid.

v

AZN_S_U_INVALID_PRINC_NAME

The

principal

name

is

unknown.

v

AZN_S_U_LDAP_AUTHEN_FAILED

Authentication

to

the

LDAP

user

registry

failed.

v

AZN_S_U_URAF_AUTHEN_FAILED

URAF

authentication

failed

v

AZN_S_U_PASSWORD_EXPIRED

The

user

authenticated

correctly

but

the

password

has

expired

and

must

be

changed.

Mechanism_id

and

authinfo

are

not

returned.

v

AZN_S_U_PASSWORD_ACCT_DISABLED

The

account

has

been

disabled

due

to

too

many

failed

login

attempts.

v

AZN_S_U_ACCOUNT_DISABLED

The

account

has

been

disabled

by

the

administrator.

v

AZN_S_U_TOD_ACCESS_DENIED

The

login

failed

due

to

policy

restrictions

based

on

Time

of

Day.

v

AZN_S_U_ACCOUNT_LOCKEDOUT

The

account

has

been

locked

because

too

many

invalid

login

attempts

have

been

made.

The

number

of

invalid

attempts

and

the

logout

period

can

be

configured

through

policy.

v

AZN_S_U_INSUFFICIENT_ACCESS

The

caller

of

this

function

has

insufficient

privileges

to

perform

the

requested

operation.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

220

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_util_password_change()

Changes

the

password

for

the

specified

Tivoli

Access

Manager

principal

in

the

registry.

Syntax

azn_status_t

azn_util_password_change(

const

azn_string_t

principal_name,

const

azn_string_t

password

);

Parameters

Input

principal_name

Name

of

the

principal

who’s

password

is

to

change.

When

using

an

LDAP

registry

for

authentication,

this

may

also

be

a

Distinguished

Name

(DN)

string.

password

New

password

for

the

principal.

Description

Changes

the

password

for

a

username

pair.

The

method

of

changing

the

password

is

selected

automatically

according

to

the

underlying

authentication

mechanism

with

which

the

authorization

API

was

installed.

Examples

of

authentication

mechanisms

are

LDAP,

Lotus

Domino

Server,

and

Microsoft

Active

Directory.

Limitations:

This

call

can

succeed

even

though

the

calling

application

server

lacks

sufficient

access,

when

used

with

either

Lotus

Domino

Server

or

Microsoft

Active

Directory

authentication.

On

Lotus

Domino

Server,

this

is

because

the

server

uses

the

local

Lotus

Notes

ID

file,

and

hence

always

has

the

authority

to

change

the

password.

On

Active

Directory,

the

authorization

to

make

this

call

is

taken

from

the

Active

Directory

system

group

membership,

not

from

a

Tivoli

Access

Manager

group.

Use

the

following

command,

entered

all

on

one

line,

to

add

the

application

to

the

appropriate

system

group

membership:

uraftool.exe

-p

Admin_Password

-c

"rgyid_addmem

group

\"cn=Domain

Admin,cn=users\"

application_server_ID

On

LDAP-based

user

registries,

use

the

pdadmin

command

to

add

the

application

server

to

the

appropriate

Tivoli

Access

Manager

group:

pdadmin

group

modify

SecurityGroup

add

application_server_ID

Return

Values

Returns

AZN_S_COMPLETE

on

success,

or

an

error

code

on

failure.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

Appendix

A.

Authorization

API

reference

221

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Note:

When

used

with

Lotus

Domino

Server

or

Microsoft

Active

Directory,

additional

error

codes

can

be

returned,

in

cases

where

there

is

more

than

one

error

in

the

input

parameters.

When

unsuccessful,

the

following

major

error

codes

are

returned:

v

AZN_S_FAILURE

v

AZN_S_U_ACCOUNT_DISABLED

The

user

account

is

disabled

by

the

administrator.

v

AZN_S_U_ACCOUNT_LOCKEDOUT

The

account

has

been

locked

because

too

many

invalid

login

attempts

have

been

made.

The

number

of

invalid

attempts

and

the

logout

period

can

be

configured

through

policy.

v

AZN_S_U_INSUFFICIENT_ACCESS

The

caller

of

this

function

has

insufficient

privileges

to

perform

the

requested

operation.

v

AZN_S_U_INVALID_PASSWORD

The

password

is

not

valid.

v

AZN_S_U_INVALID_PRINC_NAME

The

principal

name

is

unknown.

v

AZN_S_U_LDAP_AUTHEN_FAILED

Authentication

to

the

LDAP

user

registry

failed.

v

AZN_S_U_PASSWORD_EXPIRED

The

user

password

has

expired.

v

AZN_S_U_PASSWORD_HAS_SPACES

The

user

password

contains

spaces.

v

AZN_S_U_PASSWORD_TOO_FEW_ALPHA

The

user

password

must

have

more

alphanumeric

characters.

v

AZN_S_U_PASSWORD_TOO_FEW_NONALPHA

The

user

password

must

have

more

non-alphanumeric

characters.

v

AZN_S_U_PASSWORD_TOO_MANY_REPEATED

The

user

password

has

one

or

more

characters

that

are

repeated

too

many

times.

v

AZN_S_U_PASSWORD_TOO_SHORT

The

user

password

must

contain

more

characters.

v

AZN_S_U_URAF_AUTHEN_FAILED

URAF

authentication

failed

v

AZN_S_U_TOD_ACCESS_DENIED

Access

denied

because

time

or

day

restrictions

prevent

access

at

the

current

time.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

222

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

B.

Authorization

service

plug-in

API

reference

This

chapter

contains

the

following

reference

pages:

v

“azn_admin_get_object()”

on

page

224

v

“azn_admin_get_objectlist()”

on

page

226

v

“azn_admin_get_tasklist()”

on

page

228

v

“azn_admin_perform_task()”

on

page

231

v

“azn_svc_creds_get_pac()”

on

page

234

v

“azn_svc_creds_modify()”

on

page

236

v

“azn_svc_decision_access_allowed_ext()”

on

page

239

v

“azn_svc_entitlement_get_entitlements()”

on

page

242

v

“azn_svc_initialize()”

on

page

244

v

“azn_svc_pac_get_creds()”

on

page

247

v

“azn_svc_shutdown()”

on

page

249

©

Copyright

IBM

Corp.

2000,2003

223

azn_admin_get_object()

Retrieves

a

potential

protected

object.

Tests

for

the

existence

of

a

protected

object.

Syntax

azn_status_t

azn_admin_get_object(

azn_creds_h_t

creds,

azn_string_t

locale,

azn_string_t

path,

azn_attrlist_h_t

indata,

azn_attrlist_h_t

outdata

);

Parameters

Input

creds

Credentials

of

the

identity

requesting

the

object.

The

administration

service

must

verify

that

the

credentials

have

sufficient

authorization

to

perform

the

requested

operation.

The

Tivoli

Access

Manager

policy

server

forwards

the

credentials

of

the

administrator

when

performing

this

function.

locale

Locale

of

the

caller

at

the

client

machine.

The

locale

is

the

string

equal

to

LC_MESSAGES

returned

from

the

client

machine.

Note:

This

parameter

is

not

used

in

Tivoli

Access

Manager

Version

5.1,

but

is

maintained

for

compatibility

with

Tivoli

SecureWay

Policy

Director

Version

3.8.

path

The

complete

path

name

of

the

protected

object.

indata

An

undefined

(free

form)

attribute

list

that

can

be

used

for

agreed

upon

communication

between

the

administration

service

implementation

and

a

custom

user

interface.

Output

outdata

An

undefined

(free

form)

attribute

list.

This

attribute

list

is

allocated

by

the

administration

service

implementation.

See

the

Description

section

immediately

below

for

a

discussion

of

how

to

use

this

output

parameter.

Description

This

function

returns

information

about

an

object

in

the

Tivoli

Access

Manager

protected

object

namespace.

The

credentials

of

the

identity

requesting

the

object

are

forwarded

by

the

Tivoli

Access

Manager

policy

server

when

this

function

is

called.

When

the

caller

has

sufficient

permissions,

the

protected

object

information

is

placed

into

a

authorization

API

attribute

list.

This

list

is

returned

as

the

output

parameter

outdata.

The

administration

service

must

pass

the

protected

object

information

in

the

azn_admin_svc_pobj

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

224

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

administration

service

must

pass

the

result

strings

information

in

the

azn_admin_svc_results

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

Typically,

these

strings

include

error,

warning,

and

information

messages.

The

administration

service

and

the

custom

user

interface

can

exchange

information

of

their

choice

by

setting

other

attributes.

Use

the

azn_attrlist_add_entry_*

APIs

to

set

attributes.

The

Tivoli

Access

Manager

policy

server

passes

these

other

attributes

in

the

outdata

parameter

of

the

corresponding

administration

API

function

call.

Multiple

authorization

API

applications

can

register

to

service

the

protected

object

hierarchy

name

for

the

protected

object.

You

can

use

this

feature

to

provide

failover

support

in

the

event

that

a

particular

application

server

fails.

If

the

authorization

API

implementation

fails

to

connect

to

a

registered

service

implementation,

it

attempts

to

contact

other

service

implementations

until

a

connection

is

successful

or

until

the

list

of

appropriate

service

implementations

is

exhausted.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

are

derived

from

the

returned

status

code

with

azn_error_major().

When

this

function

calls

another

authorization

API

function,

and

the

called

function

returns

an

error,

this

function

should

return

the

error

to

the

calling

application.

v

AZN_S_SVC_ADMIN_OUT_OF_MEMORY

A

memory

allocation

error

has

occurred.

v

AZN_S_SVC_ADMIN_INVALID_SVCINFO_HDL

The

svc_info

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_COUNT

The

argument

count

argc

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_ARRAY

The

argument

array

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARGUMENT

One

or

more

of

the

arguments

passed

in

to

initialize

the

administration

service

plug-in

is

invalid.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

Appendix

B.

Authorization

service

plug-in

API

reference

225

azn_admin_get_objectlist()

Accesses

the

administration

service

to

provide

a

list

of

all

potential

protected

objects

that

are

children

of

the

specified

parent

object.

Syntax

azn_status_t

azn_admin_get_object(

azn_creds_h_t

creds,

azn_string_t

locale,

azn_string_t

path,

azn_attrlist_h_t

indata,

azn_attrlist_h_t

outdata

);

Parameters

Input

creds

Credentials

of

the

identity

requesting

the

object.

The

administration

service

must

verify

that

the

credentials

have

sufficient

authorization

to

perform

the

requested

operation.

The

Tivoli

Access

Manager

policy

server

forwards

the

credentials

of

the

administrator

when

performing

this

function.

locale

Locale

of

the

caller

at

the

client

machine.

The

locale

is

the

string

equal

to

LC_MESSAGES

returned

from

the

client

machine.

Note:

This

parameter

is

not

used

in

Tivoli

Access

Manager

Version

5.1..

path

The

complete

path

name

of

the

protected

object.

indata

An

undefined

(free

form)

attribute

list

that

can

be

used

for

agreed

upon

communication

between

the

administration

service

implementation

and

a

custom

user

interface.

Output

outdata

An

undefined

(free

form)

attribute

list.

This

attribute

list

is

allocated

by

the

administration

service

implementation.

See

the

Description

section

immediately

below

for

a

discussion

of

how

to

use

this

output

parameter.

Description

This

function

returns

information

about

objects

in

the

Tivoli

Access

Manager

protected

object

namespace.

The

credentials

of

the

identity

requesting

the

objects

are

forwarded

by

the

Tivoli

Access

Manager

policy

server

when

this

function

is

called.

When

the

caller

has

sufficient

permissions,

the

protected

object

information

is

placed

into

a

authorization

API

attribute

list.

This

list

is

returned

as

the

output

parameter

outdata.

226

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

administration

service

plug-in

must

pass

the

protected

object

information

in

the

azn_admin_svc_pobj

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

The

administration

service

plug-in

must

pass

the

result

strings

information

in

the

azn_admin_svc_results

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

Typically,

these

strings

include

error,

warning,

and

information

messages.

The

administration

service

and

the

custom

user

interface

can

exchange

information

of

their

choice

by

setting

other

attributes.

Use

the

azn_attrlist_add_entry_*

APIs

to

set

attributes.

The

Tivoli

Access

Manager

policy

server

passes

these

other

attributes

in

the

outdata

parameter

of

the

corresponding

administration

API

function

call.

Multiple

authorization

API

applications

can

register

to

service

the

protected

object

hierarchy

name

for

the

protected

object.

You

can

use

this

feature

to

provide

failover

support

in

the

event

that

a

particular

application

server

fails.

If

the

authorization

API

implementation

fails

to

connect

to

a

registered

service

implementation,

it

attempts

to

contact

other

service

implementations

until

a

connection

is

successful

or

until

the

list

of

appropriate

service

implementations

is

exhausted.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

are

derived

from

the

returned

status

code

with

azn_error_major().

When

this

function

calls

another

authorization

API

function,

and

the

called

function

returns

an

error,

this

function

should

return

the

error

to

the

calling

application.

v

AZN_S_SVC_ADMIN_OUT_OF_MEMORY

A

memory

allocation

error

has

occurred.

v

AZN_S_SVC_ADMIN_INVALID_SVCINFO_HDL

The

svc_info

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_COUNT

The

argument

count

argc

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_ARRAY

The

argument

array

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARGUMENT

One

or

more

of

the

arguments

passed

in

to

initialize

the

administration

service

plug-in

is

invalid.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

Appendix

B.

Authorization

service

plug-in

API

reference

227

azn_admin_get_tasklist()

Returns

a

list

of

all

the

supported

administration

tasks.

Syntax

azn_status_t

azn_admin_get_tasklist(

azn_creds_h_t

creds,

azn_string_t

locale,

azn_attrlist_h_t

indata,

azn_attrlist_h_t

outdata

);

Parameters

Input

creds

Credentials

of

the

identity

requesting

the

object.

The

administration

service

must

verify

that

the

credentials

have

sufficient

authorization

to

perform

the

requested

operation.

The

Tivoli

Access

Manager

policy

server

forwards

the

credentials

of

the

administrator

when

performing

this

function.

locale

Locale

of

the

caller

at

the

client

machine.

The

locale

is

the

string

equal

to

LC_MESSAGES

returned

from

the

client

machine.

Note:

This

parameter

is

not

used

in

Tivoli

Access

Manager

Version

5.1.

indata

An

undefined

(free

form)

attribute

list

that

can

be

used

for

agreed

upon

communication

between

the

administration

service

implementation

and

a

custom

user

interface.

commands[]

A

NULL

terminated

list

of

administration

commands

supported

by

this

service

implementation.

Commands

should

conform

to

pdadmin

command

line

interface

syntax

rules.

The

command

list

may

be

state

sensitive.

Only

commands

that

can

be

successful

in

the

current

state

can

be

returned.

Thus

the

returned

list

does

not

include

all

possible

commands.

Output

outdata

An

undefined

(free

form)

attribute

list.

This

attribute

list

is

allocated

by

the

administration

service

implementation.

Description

Returns

a

list

of

all

the

supported

administration

tasks.

The

list

is

obtained

from

the

administration

service.

The

administration

service

plug-in

must

pass

the

task

information

in

the

azn_admin_svc_task

attribute.

Use

the

azn_attrlist_add_entry()

API

to

build

the

list.

Information

about

each

specific

task

is

a

value

of

this

attribute.

228

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

administration

service

plug-in

must

pass

the

result

strings

information

in

the

azn_admin_svc_results

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

Typically,

these

strings

include

error,

warning,

and

information

messages.

Each

value

for

the

azn_admin_svc_results

attribute

indicates

any

result

information

for

the

azn_admin_get_tasklist()

call.

These

results

are

displayed

by

pdadmin

in

response

to

typing

the

command

server

listtasks

server

name

at

the

pdadmin

command

line

interface.

For

example,

if

this

call

was

successful,

the

implementer

may

choose

not

to

return

anything

in

the

azn_admin_svc_results

attribute.

If

this

call

was

unsuccessful,

the

implementer

can

return

implementation-specific

error

messages

in

the

adm_admin_svc_results

attribute.

The

administration

service

and

the

custom

user

interface

can

exchange

information

of

their

choice

by

setting

other

attributes.

Use

the

azn_attrlist_add_entry_*

APIs

to

set

attributes.

The

Tivoli

Access

Manager

policy

server

passes

these

other

attributes

in

the

outdata

parameter

of

the

corresponding

administration

API

function

call.

The

authorization

API

invokes

this

function

on

all

registered

administration

service

plug-ins

and

returns

the

output

back

from

all

of

them.

If

two

plug-ins

return

the

same

task

names,

both

are

returned.

If

any

of

the

plug-ins

return

an

error,

the

remaining

plug-ins

do

not

get

invoked.

The

results

obtained

thus

far

are

returned

along

with

the

error

that

occurred.

If

a

plug-in

does

not

support

any

tasks,

it

should

return

an

AZN_S_COMPLETE

major

code

so

that

this

function

can

be

invoked

on

the

remaining

plug-ins

(if

any).

Each

value

for

the

azn_admin_svc_task

attribute

needs

to

be

the

complete

specification

of

how

to

invoke

the

task.

These

values

are

displayed

in

response

to

typing

the

command

server

listtasks

server

name

at

the

pdadmin

command

line

interface.

These

value

could

also

potentially

be

used

by

a

graphical

user

interface,

so

they

must

to

be

complete.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

are

derived

from

the

returned

status

code

with

azn_error_major().

When

this

function

calls

another

authorization

API

function,

and

the

called

function

returns

an

error,

this

function

should

return

the

error

to

the

calling

application.

v

AZN_S_SVC_ADMIN_OUT_OF_MEMORY

A

memory

allocation

error

has

occurred.

v

AZN_S_SVC_ADMIN_INVALID_SVCINFO_HDL

The

svc_info

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_COUNT

The

argument

count

argc

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_ARRAY

The

argument

array

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

Appendix

B.

Authorization

service

plug-in

API

reference

229

v

AZN_S_SVC_ADMIN_INVALID_ARGUMENT

One

or

more

of

the

arguments

passed

in

to

initialize

the

administration

service

plug-in

is

invalid.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

230

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_admin_perform_task()

Instructs

the

service

to

perform

an

administration

task.

The

service

returns

the

results

of

the

task.

Syntax

azn_status_t

azn_admin_perform_task(

azn_creds_h_t

creds,

azn_string_t

locale,

azn_string_t

command,

azn_attrlist_h_t

indata,

azn_attrlist_h_t

outdata

);

Parameters

Input

creds

Credentials

of

the

identity

requesting

the

object.

The

administration

service

must

verify

that

the

credentials

have

sufficient

authorization

to

perform

the

requested

operation.

The

Tivoli

Access

Manager

policy

server

forwards

the

credentials

of

the

administrator

when

performing

this

function.

locale

Locale

of

the

caller

at

the

client

machine.

The

locale

is

the

string

equal

to

LC_MESSAGES

returned

from

the

client

machine.

Note:

This

parameter

is

not

used

in

Tivoli

Access

Manager

Version

5.1.

command

Command

string

that

identifies

the

task

to

be

performed.

The

string

must

conforms

to

the

pdadmin

command

line

interface

syntax

rules.

indata

An

undefined

(free

form)

attribute

list

that

can

be

used

for

agreed

upon

communication

between

the

administration

service

implementation

and

a

custom

user

interface.

Output

outdata

An

undefined

(free

form)

attribute

list.

This

attribute

list

is

allocated

by

the

administration

service

implementation.

Description

Instructs

the

service

to

perform

an

administration

task.

The

caller

must

have

credentials

with

sufficient

permission

to

perform

the

task.

The

service

returns

the

results

of

the

task

in

the

outdata

attribute

list.

The

administration

service

must

pass

the

result

strings

information

in

the

azn_admin_svc_results

attribute.

Use

azn_attrlist_add_entry_pobj()

to

add

this

attribute

to

the

attribute

list.

Typically,

these

strings

include

error,

warning,

and

information

messages.

The

administration

service

and

the

custom

user

interface

can

exchange

information

of

their

choice

by

setting

other

attributes.

Use

the

azn_attrlist_add_entry_*

APIs

Appendix

B.

Authorization

service

plug-in

API

reference

231

to

set

attributes.

The

Tivoli

Access

Manager

policy

server

passes

these

other

attributes

in

the

outdata

parameter

of

the

corresponding

administration

API

function

call.

The

authorization

API

implementation

invokes

this

function

on

all

registered

administration

service

plug-ins

until

it

finds

one

that

implements

this

interface.

If

more

than

one

service

plug-in

supports

this

task,

the

first

plug-in

is

selected

to

execute

the

task.

The

service

plug-in

should

return

an

AZN_S_SVC_ADMIN_INVALID_TASK

major

code

if

it

is

passed

on

a

task

that

it

cannot

perform.

The

ssl-v3-timeout

parameter

specified

in

the

[ssl]

stanza

of

the

authorization

configuration

file

determines

the

timeout

for

the

communication

between

the

authorization

AP

application

and

Tivoli

Access

Manager

policy

server,

and

for

the

communication

between

the

Tivoli

Access

Manager

policy

server

and

the

pdadmin

utility

command

line

interface.

A

value

of

zero

specifies

an

infinite

timeout.

Other

values

represent

the

actual

amount

of

time

within

which

a

response

is

expected

for

a

request.

If

the

task

being

performed

by

azn_admin_perform_task()

takes

a

long

time,

this

communication

could

time

out

and

cause

an

SSL

error.

Therefore,

this

timeout

value

needs

to

be

set

properly

in

the

[ssl]

stanza

in

the

various

configuration

files.

The

relevant

configuration

files

include

ivmgrd.conf,

the

authorization

API

configuration

file,

ivacld.conf,

and

pd.conf.

Return

Values

When

successful,

the

function

returns

AZN_S_COMPLETE.

When

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

are

derived

from

the

returned

status

code

with

azn_error_major().

When

this

function

calls

another

authorization

API

function,

and

the

called

function

returns

an

error,

this

function

should

return

the

error

to

the

calling

application.

v

AZN_S_SVC_ADMIN_OUT_OF_MEMORY

A

memory

allocation

error

has

occurred.

v

AZN_S_SVC_ADMIN_INVALID_TASK

The

passed-in

task

is

not

implemented

by

this

administration

service

plug-in.

Use

the

pdadmin

server

listtasks

authorization_API_application_name

command

to

determine

the

list

of

tasks

supported

by

this

authorization

API

application.

If

the

task

in

question

is

not

shown

on

the

list,

make

sure

that

the

authorization

administration

service

plug-in

that

implements

this

task

is

registered

by

the

authorization

API

application.

v

AZN_S_SVC_ADMIN_INVALID_SVCINFO_HDL

The

svc_info

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_COUNT

The

argument

count

argc

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_ARRAY

The

argument

array

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

232

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_SVC_ADMIN_INVALID_ARGUMENT

One

or

more

of

the

arguments

passed

in

to

initialize

the

administration

service

plug-in

is

invalid.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

Appendix

B.

Authorization

service

plug-in

API

reference

233

azn_svc_creds_get_pac()

Authorization

API

privilege

attribute

certificate

(PAC)

service

interface

prototype

to

build

an

authorization

credential

from

a

proprietary

formatted

PAC.

Syntax

azn_status_t

azn_svc_creds_get_pac(

const

azn_creds_h_t

creds,

const

azn_string_t

pac_svc_id,

azn_buffer_t

*pac

);

Parameters

Input

creds

Handle

to

the

credentials

chain

whose

information

is

used

to

build

the

PAC.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

pac_svc_id

Identification

(id)

of

the

PAC

service

that

produces

the

PAC.

Output

pac

Pointer

to

an

azn_buffer_t

variable

that

will

contain

the

address

of

the

buffer

data

upon

successful

completion

of

the

routine.

Description

Authorization

API

privilege

attribute

certificate

(PAC)

service

interface

prototype

to

build

an

authorization

credential

from

a

proprietary

formatted

PAC.

This

function

uses

the

PAC

service

whose

identification

is

supplied

as

pac_svc_id

to

build

a

new

PAC.

The

PAC

service

uses

the

information

in

the

supplied

credentials

chain

to

build

the

PAC.

Different

PAC

services

might

produce

PACs

with

different

formats.

Some

PAC

services

can

cryptographically

protect

or

sign

the

PACs

they

produce.

When

pac_svc_id

is

NULL,

the

default

PAC

service

returns

an

architecture-independent

and

network-independent

encoding

of

the

specified

credentials

chain.

This

PAC

can

be

safely

transmitted.

The

receiver

of

the

PAC

can

use

azn_svc_pac_get_creds()

to

decode

the

PAC

and

obtain

a

valid

copy

of

the

original

credentials

chain.

This

function

takes

as

an

input

parameter

a

handle

to

an

existing

credentials

structure,

and

returns

a

pointer

to

the

output

PAC

in

an

authorization

API

buffer.

This

function

does

not

modify

the

input

handle

creds

and

the

credentials

chain

to

which

it

refers.

Later

changes

to

creds,

including

releasing

its

storage,

will

have

no

effect

on

pac.

When

pac

is

no

longer

required,

call

azn_release_buffer()

to

release

its

storage.

234

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_PAC_SVC

The

privilege

attribute

certificate

service

identifier

is

invalid.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

B.

Authorization

service

plug-in

API

reference

235

azn_svc_creds_modify()

Manipulates

the

attributes

in

a

credential

based

upon

an

original

credential

and

attributes

passed

into

the

service

interface.

Modifies

an

existing

credentials

chain

and

returns

a

pointer

to

the

handle

to

a

new

credentials

chain

containing

the

modifications.

Syntax

azn_status_t

azn_svc_creds_modify(

const

azn_creds_h_t

creds,

const

azn_string_t

mod_svc_id,

const

azn_attrlist_h_t

mod_info,

azn_creds_h_t

*new_creds

);

Parameters

Input

creds

Handle

to

the

authorization

credentials

chain

to

be

modified.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

mod_svc_id

Identification

(id)

of

the

credential

modification

service.

mod_info

Attribute

list

containing

modification

service-specific

or

application-specific

data

that

describes

the

desired

credential

modifications.

Attribute

lists

that

are

empty

are

inserted

into

the

credentials.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

Output

new_creds

Pointer

to

a

handle

to

a

credentials

chain

that

contains

the

modified

credentials

chain

upon

return.

The

credentials

handle

pointer

passed

as

the

new_creds

parameter

can

point

to

one

of

the

following:

v

A

credentials

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

Note

that

this

will

result

in

an

empty

output

credential.

v

A

credentials

handle

for

a

new,

empty

credential,

which

has

been

initialized

by

a

call

to

azn_creds_create().

Note

that

this

will

result

in

an

empty

output

credential.

236

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Description

Manipulates

the

attributes

in

a

credential

based

upon

an

original

credential

and

attributes

passed

into

the

service

interface.

This

function

uses

the

specified

modification

service

mod_svc_id,

and

optionally

an

attribute

list

mod_info

which

contains

modification

information

provided

by

the

caller,

to

modify

a

copy

of

the

supplied

credentials

chain

creds.

The

function

returns

a

pointer

to

a

handle

to

a

new

credentials

chain

new_creds

containing

the

requested

modifications.

The

supplied

credentials

chain

is

unchanged.

When

mod_svc_id

is

NULL,

this

function

modifies

an

existing

credential

chain

creds

by

adding

the

attribute

list

mod_info

to

the

credentials

chain,

and

returning

the

modified

credential

in

new_creds.

The

following

credential

attributes

are

considered

readonly

and

can

not

be

modified

by

azn_svc_creds_modify().

If

any

of

these

attributes

are

specified

in

the

mod_info

input

attribute

list,

they

are

ignored:

v

azn_cred_principal_uuid

v

azn_cred_principal_name

v

azn_cred_principal_domain

v

azn_cred_version

v

azn_cred_mech_id

v

azn_cred_group_uuids

v

azn_cred_group_names

v

azn_cred_authzn_id

v

azn_cred_ldap_dn

If

the

input

creds

handle

references

a

combined

credentials

chain

with

more

than

one

element,

only

the

first

element

will

be

modified.

This

is

the

default

behavior

when

mod_svc_id

is

NULL.

In

this

case,

the

output

chain

consists

of

the

modified

first

element

followed

by

unmodified

copies

of

the

remaining

elements

in

the

input

combined

credentials

chains.

The

elements

in

the

output

credentials

chain

are

kept

in

the

same

order

as

their

counterparts

in

the

input

credentials

chain.

Note:

This

function

uses

a

new

credential

handle,

new_creds.

When

declaring

a

new

credential

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

When

new_creds

is

no

longer

required,

call

azn_creds_delete()

to

release

its

storage.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

Appendix

B.

Authorization

service

plug-in

API

reference

237

v

AZN_S_

INVALID_MOD_FUNCTION

The

supplied

modification

service

identifier

is

invalid.

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

handle

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

The

pointer

to

the

new

credentials

handle

that

references

the

new

output

credentials

chain

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

238

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_svc_decision_access_allowed_ext()

External

authorization

service

(EAS)

interface

prototype.

Makes

an

access

control

decision

using

application-specific

context

information;

returns

information

about

why

the

decision

was

made.

Syntax

azn_status_t

azn_svc_decision_access_allowed_ext(

const

azn_creds_h_t

creds,

const

azn_string_t

protected_resource,

const

azn_string_t

operation,

const

azn_attrlist_h_t

app_context,

int

*permission,

azn_attrlist_h_t

*permission_info

);

Parameters

Input

creds

Handle

to

the

initiator’s

credentials

chain.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

protected_resource

Name

of

the

target

of

the

request.

operation

Name

of

the

requested

operation.

app_context

Attribute

list

containing

application-specific

context

access

control

information.

A

NULL

value

indicates

there

is

no

context

access

control

information.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

permission_info

Pointer

to

an

attribute

list

through

which

the

implementation

might

return

implementation-specific

information

about

the

decision.

If

a

NULL

value

is

passed

as

input,

then

no

information

will

be

returned.

Output

permission

Pointer

to

an

integer

variable

that

will

contain

the

appropriate

permission

code

upon

successful

completion

of

the

routine.

When

the

returned

status

value

is

AZN_S_COMPLETE,

the

returned

permission

is

either

AZN_C_PERMITTED

or

AZN_C_NOT_PERMITTED.

Appendix

B.

Authorization

service

plug-in

API

reference

239

When

the

returned

status

code

is

not

AZN_S_COMPLETE,

the

returned

permission

is

set

to

AZN_C_NOT_PERMITTED.

permission_info

Pointer

to

an

attribute

list

through

which

the

implementation

can

return

implementation-specific

information

about

the

decision.

When

a

NULL

pointer

is

passed

as

input,

no

information

is

returned.

The

information

contained

in

the

attribute

list

is

added

to

the

list

when

the

attribute

list

handle

is

one

of

the

following:

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

The

output

parameter

permission_info

can

be

used

to

return

implementation-specific

qualifiers

to

AZN_C_NOT_PERMITTED.

The

qualifiers

can

be

used

to

assist

the

calling

application

or

the

initiator

in

formulating

a

request

which

will

be

authorized.

Examples

of

such

qualifiers

might

include:

“not

permitted

yet,”

“requires

additional

privilege

attributes,”

or

“permissible

with

restrictions.”

For

more

information,

see

“Enabling

the

return

of

permission

information”

on

page

47.

Description

This

function

decides

whether

the

initiator

specified

by

the

credentials

chain

creds

is

authorized

to

perform

the

operation

operation

on

the

target

protected_resource.

Optionally,

callers

can

supply

application-specific

context

access

control

information

using

the

app_context

argument.

The

decision

is

returned

through

permission.

Optionally,

the

implementation

can

return

implementation-specific

information

about

the

decision

through

permission_info.

For

example,

the

information

can

indicate

which

rule

was

responsible

for

granting

or

denying

access.

Note:

This

function

uses

a

new

attribute

list

handle,

permission_info.

When

declaring

a

new

attribute

list

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_CREDS_HDL

The

credentials

handle

supplied

is

invalid.

v

AZN_S_INVALID_PROTECTED_RESOURCE

The

target

name

is

invalid.

240

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

AZN_S_INVALID_OPERATION

The

operation

has

no

meaning

for

the

specified

target.

v

AZN_S_INVALID_PERMISSION_REF

The

integer

reference

to

return

the

permission

is

invalid.

v

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

context

access

control

information

(ACI)

is

invalid.

v

AZN_S_INVALID_ATTRLIST_HDL

The

attribute

list

handle

for

the

returned

permission

information

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

Appendix

B.

Authorization

service

plug-in

API

reference

241

azn_svc_entitlement_get_entitlements()

Returns

entitlements

in

the

form

of

authorization

API

attributes.

Syntax

azn_status_t

azn_svc_entitlement_get_entitlements(

const

azn_creds_h_t

creds,

const

azn_string_t

entitlements_svc_id,

const

azn_attrlist_h_t

app_context,

azn_attrlist_h_t

*entitlements

);

Parameters

Input

creds

Handle

to

the

credentials

of

the

subject

whose

entitlements

are

to

be

returned.

The

credentials

handle

should

be

a

handle

for

an

existing,

non-empty

credentials

chain

which

contains

valid

data.

entitlements_svc_id

The

id

of

the

entitlement

service

to

be

used

app_context

Handle

to

an

attribute

list

containing

application-specific

or

entitlements-service-specific

context

information.

A

NULL

value

should

be

used

if

no

application

state

is

passed.

The

attribute

list

handle

can

be

one

of

the

following:

v

An

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

An

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

In

this

case,

attribute

list

data

is

appended

to

the

existing

attribute

list.

Output

entitlements

Pointer

to

a

attribute

list

handle

variable

which

will

hold

the

entitlement

information

on

return.

The

attribute

list

handle

pointer

passed

as

the

entitlements

parameter

can

point

to

one

of

the

following:

v

A

attribute

list

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

attribute

list

handle

for

a

new,

empty

attribute

list,

which

has

been

initialized

by

a

call

to

azn_attrlist_create().

v

An

attribute

list

handle

for

an

existing,

non-empty

attribute

list

which

contains

valid

data.

Description

Returns

entitlements

in

the

form

of

authorization

attributes

to

the

caller

from

an

external

entitlements

source.

242

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

This

uses

an

entitlement

service

identified

by

entitlements_svc_id

to

return

the

entitlements

of

an

initiator

identified

by

credentials

creds.

The

calling

application

may

pass

application-specific

or

entitlements-service-specific

context

data

using

an

attribute

list

app_context.

The

entitlements

are

returned

using

the

attribute

list

entitlements.

Note:

This

function

declares

a

new

attribute

list

handle,

entitlements.

When

declaring

a

new

attribute

list

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

The

constants

AZN_C_REQUEST_TIME,

AZN_C_AUTHN_QUALITY,

AZN_C_REQUESTER_LOC,

and

AZN_C_REQUEST_ROUTE_QOP,

may

be

used

as

name

attribute

of

entries

in

the

app_context

attribute

list

to

communicate

common

types

of

context

information.

Return

Values

If

successful,

the

function

returns

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

can

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_INVALID_CREDS_HDL

The

creds

handle

supplied

is

invalid.

v

AZN_S_INVALID_ENTITLEMENT_SVC

The

entitlement

service

identifier

is

invalid.

v

AZN_S_INVALID_APP_CONTEXT_HDL

The

attribute

list

handle

for

the

application

context

is

invalid.

v

AZN_S_INVALID_ENTITLEMENTS_HDL

The

attribute

list

handle

for

the

entitlements

is

invalid.

v

AZN_S_AUTHORIZATION_FAILURE

The

caller

does

not

possess

the

authority

required

to

invoke

this

function.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

Implementation

specific

minor

error

codes

can

be

derived

from

the

returned

status

code

with

azn_error_minor().

Appendix

B.

Authorization

service

plug-in

API

reference

243

azn_svc_initialize()

Initialize

the

specified

authorization

service

plug-in.

Syntax

azn_status_t

azn_service_initialize(

const

int

argc,

const

char

**argv,

const

azn_attrlist_h_t

svcInit,

azn_attrlist_h_t

*svcInfo);

Description

Use

this

initialization

function

to

initialize

a

service

plug-in.

The

service

dispatcher

calls

this

function

prior

to

calling

the

functions

that

are

specific

to

each

plug-in.

For

example,

this

function

is

called

before

calling

azn_entitlement_get_entitlements()

to

obtain

entitlements

information

from

the

service

plug-in.

The

input

parameters

argc

and

argv

are

built

from

the

parameters

that

are

specified

in

the

service

definition

for

the

service

instance.

A

sample

service

definition

for

an

entitlement

service

named

entsvc

is:

entsvc

=

/lib/libentsvc.so

&

-server

barney

For

the

service

definition

above

azn_service_initialize()

is

called

with

an

argc

value

of

2.

The

argv

array

contains

the

following

values:

argv[0]

=

“-server”

argv[1]

=

“barney”

In

this

example,

the

argv

values

are

used

to

specify

the

server

system

where

the

entitlement

service

plug-in

is

to

be

loaded.

The

service

information

returned

by

the

service

plug-in

in

svc_info

can

contain

the

version

number

of

the

service.

This

value

is

defined

in

ogauthzn.h:

extern

azn_string_t

azn_svc_version;

The

service

plug-in

can

assume

that

the

service

dispatcher

will

release

the

attribute

list

returned

in

svc_info

when

it

has

finished

with

it.

Plug-ins

are

only

required

to

return

service

information

when

the

dispatcher

specifically

requests

this

information.

Input

parameters

should

not

be

modified.

The

prototype

for

this

function

is

included

in

the

file

azn_svc_protos.h,

in

the

Tivoli

Access

Manager

include

directory.

Parameters

Input

argc

The

number

of

arguments

contained

in

the

argv

array.

argv

The

string

arguments

passed

in

the

service

definition

for

this

service

instance.

244

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

svcInit

The

svcInit

parameter

is

an

attribute

list

containing

attributes

that

are

specified

by

the

service

dispatcher

to

either

configure

or

request

initialization

information

from

the

service

plug-in.

Output

svcInfo

The

svcInfo

parameter

is

a

list

of

attributes

returned

by

the

service

plug-in

to

request

specific

treatment

by

the

service

dispatcher

or

to

inform

the

service

dispatcher

of

the

operational

parameters

of

service.

An

example

of

the

information

listed

in

the

attributes

is

the

version

of

the

service.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

Each

of

the

following

error

messages

also

returns

an

implementation-specific

minor

error

code.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

v

AZN_S_SVC_DEFINITION_ERROR

Returned

by

the

service

dispatcher

when

an

error

has

been

found

in

the

service

definition

in

the

authorization

API

configuration

file

aznapi.conf.

v

AZN_S_SVC_NOT_FOUND

Returned

by

the

service

dispatcher

when

an

error

occurs

either

while

locating

or

loading

an

authorization

API

service

plug-in.

v

AZN_S_SVC_INTERFACE_NOT_FOUND

Returned

by

the

service

dispatcher

when

an

error

occurs

either

locating

or

loading

a

service

interface

within

a

particular

plug-in.

For

example,

the

dispatcher

returns

this

error

if

the

azn_service_initialize()

interface

was

not

found

in

the

loaded

plug-in.

v

AZN_S_

SVC_INIT_FAILED

Returned

by

the

entitlement

service

plug-in

if

an

error

occurs

when

the

entitlement

service

is

initializing.

v

AZN_S_SVC_AUTHORIZATION_FAILURE

Returned

when

the

calling

application

does

not

have

sufficient

authority

to

invoke

the

services

of

this

service

plug-in.

v

AZN_S_SVC_ADMIN_INVALID_SVCINFO_HDL

The

svcInfo

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_COUNT

The

argument

count

argc

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARG_ARRAY

The

argument

array

passed

to

the

administration

service

plug-in

shared

library

is

invalid.

v

AZN_S_SVC_ADMIN_INVALID_ARGUMENT

One

or

more

of

the

arguments

passed

in

to

initialize

the

administration

service

plug-in

is

invalid.

v

AZN_S_FAILURE

Appendix

B.

Authorization

service

plug-in

API

reference

245

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

246

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_svc_pac_get_creds()

Returns

a

handle

to

new

credentials

chain

that

is

derived

from

a

privilege

attribute

certificate

(PAC)

by

a

specified

PAC

service.

Syntax

azn_status_t

azn_svc_pac_get_creds(

const

azn_buffer_t

pac,

const

azn_string_t

pac_svc_id,

azn_creds_h_t

*new_creds

);

Parameters

Input

pac

Buffer

structure

that

holds

the

supplied

PAC.

pac_svc_id

Identification

(id)

of

the

PAC

service

that

produces

the

credentials

chain.

Output

new_creds

Pointer

to

a

handle

to

the

returned

credentials

chain.

The

credentials

handle

pointer

passed

as

the

new_creds

parameter

can

be

one

of

the

following:

v

A

credentials

handle

that

has

been

initialized

to

AZN_C_INVALID_HANDLE.

v

A

credentials

handle

for

a

new,

empty

credential,

which

has

been

initialized

by

a

call

to

azn_creds_create().

In

this

case,

the

handle

is

updated

(overwritten)

with

new

credentials.

v

A

credentials

handle

for

an

existing,

non-empty

credential

chain

which

contains

valid

data.

In

this

case,

the

handle

is

updated

(overwritten)

with

new

credentials.

Description

This

function

uses

the

identified

PAC

service

(pac_svc_id)

to

build

a

new

credentials

chain

using

the

information

in

the

supplied

PAC

(pac).

Some

PAC

services

will

cryptographically

verify

the

protection

or

signature

on

the

received

PAC,

and

will

return

an

error

if

the

PAC

cannot

be

verified.

Note:

This

function

declares

a

new

credentials

handle,

new_creds.

When

declaring

a

new

credentials

handle,

always

initialize

it

to

AZN_C_INVALID_HANDLE

before

using

it.

This

function

decodes

PACs

that

are

built

by

azn_creds_get_pac().

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

Appendix

B.

Authorization

service

plug-in

API

reference

247

v

AZN_S_COMPLETE

Successful

completion.

v

AZN_S_API_UNINITIALIZED

This

function

has

been

called

before

azn_initialize().

v

AZN_S_INVALID_PAC

The

PAC

is

invalid

or

could

not

be

verified

by

the

PAC

service.

v

AZN_S_INVALID_PAC_SVC

The

id

of

the

PAC

service

is

invalid.

v

AZN_S_INVALID_NEW_CREDS_HDL

The

credentials

handle

supplied

for

new_creds

is

invalid.

v

AZN_S_UNIMPLEMENTED_FUNCTION

This

function

is

not

supported

by

the

implementation.

v

AZN_S_SVC_SERVICE_NOT_FOUND

The

service

with

the

specified

identification

number

was

not

found

in

the

list

of

configured

services.

v

AZN_S_SVC_AUTHORIZATION_FAILED

The

caller

is

not

authorized

to

make

calls

to

the

service.

The

minor

error

code

contains

additional

information

about

the

reason

for

the

failure.

v

AZN_S_SVC_DISPATCHER_FAILURE

The

service

dispatcher

failed.

This

can

be

caused

by

incorrect

initialization

of

the

authorization

API.

v

AZN_S_FAILURE

An

error

or

failure

has

occurred.

Use

azn_error_minor()

to

derive

specific

minor

error

codes

from

the

returned

status

code.

The

minor

error

code

ivacl_s_unauthorized

is

returned

when

the

caller

is

not

authorized

to

use

this

function.

Authorization

might

fail

because

the

caller

does

not

belong

to

the

correct

group

for

the

authorization

API

mode

(remote

or

local),

or

because

of

issues

specific

to

the

authentication

mechanism.

See

pdbaclmsg.h

for

a

complete

list

of

minor

error

codes

that

describe

access

control

problems.

248

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_svc_shutdown()

Shut

down

the

specified

service

plug-in.

Syntax

azn_status_t

azn_svc_shutdown(

const

int

argc,

const

char

**argv,

const

azn_attrlist_h_t

svcInit,

azn_attrlist_h_t

*svcInfo

);

Description

The

authorization

API

service

dispatcher

calls

this

interface

to

shut

down

the

specified

authorization

service

plug-in

as

part

of

shutting

down

the

authorization

API.

The

input

parameters

argc

and

argv

are

built

from

the

parameters

that

were

specified

in

the

service

definition

for

this

service

instance.

A

sample

configuration

file

entry

for

an

entitlement

service

named

entsvc

is:

entsvc

=

/lib/libentsvc.so

&

-server

barney

For

the

service

definition

above

azn_svc_shutdown()

is

called

with

an

argc

value

of

2.

The

argv

array

contains

the

following

values:

argv[0]

=

“-server”

argv[1]

=

“barney”

The

service

plug-in

can

assume

that

the

service

dispatcher

will

release

the

attribute

list

returned

in

svvInfo

when

it

has

finished

with

it.

Information

that

may

be

requested

of

the

service

during

shutdown

is

not

currently

defined

but

may

be

defined

by

the

interface

in

future.

The

prototype

for

this

function

is

included

in

the

file

azn_svc_protos.h,

in

the

Tivoli

Access

Manager

include

directory.

Parameters

Input

argc

The

number

of

arguments

in

the

argv

array.

argv

The

string

arguments

contained

in

the

service

definition

for

this

service

instance.

svcInit

The

svcInit

parameter

is

an

attribute

list

containing

attributes

that

are

specified

by

the

dispatcher

to

either

unconfigure

or

request

information

from

the

service

plug-in

after

shutdown

is

complete.

Output

svcInfo

The

svcInfo

parameter

is

a

list

of

attributes

returned

by

the

entitlement

service

Appendix

B.

Authorization

service

plug-in

API

reference

249

to

request

specific

treatment

by

the

service

dispatcher

or

to

inform

the

service

dispatcher

of

the

results

of

service

shutdown.

Return

Values

If

successful,

the

function

will

return

AZN_S_COMPLETE.

If

the

returned

status

code

is

not

equal

to

AZN_S_COMPLETE,

the

major

error

codes

will

be

derived

from

the

returned

status

code

with

azn_error_major().

v

AZN_S_

SVC_SHUTDOWN_FAILED

Returned

by

the

authorization

service

plug-in

when

an

error

occurs

while

it

is

shutting

down.

v

AZN_S_FAILURE

An

implementation

specific

error

or

failure

has

occurred.

An

implementation

specific

minor

error

code

should

be

returned

in

the

status

code

for

the

caller

to

extract

with

azn_error_minor().

250

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

C.

Attribute

names

reference

This

reference

lists

the

names

of

attributes

that

are

provided

with

the

Tivoli

Access

Manager

authorization

API.

The

attributes

are

grouped

according

to

the

area

of

the

API

to

which

they

apply.

Attribute

groupings:

v

“Initialization

attributes”

on

page

252

v

“Permission

information

attributes”

on

page

263

v

“Credential

attributes”

on

page

261

v

“Authorization

API

service

plug-in

attributes”

on

page

268

v

“Authorization

engine

attributes”

on

page

271

©

Copyright

IBM

Corp.

2000,2003

251

Initialization

attributes

Initialization

attributes

are

used

to

configure

the

Tivoli

Access

Manager

authorization

API

client

runtime.

They

are

passed

in

the

init_data

parameter

to

the

azn_initialize()

function.

The

attributes

described

in

the

following

table

are

reserved

by

the

authorization

API

client

runtime

for

use

with

its

own

internal

configuration.

Customers

can

specify

their

own

initialization

parameters

to

pass

to

custom

authorization

API

services

such

as

credential

modification

and

entitlement

services.

All

attributes,

unless

specified

otherwise,

are

of

type

azn_string_t.

Attribute

Description

azn_app_host

Authorization

API

application

host

azn_code_set_local

String

that

specifies

local

code

set.

For

use

with

the

azn_init_set_code_set()

function

and

with

the

azn_svc_init_code_set

service

initialization

attribute.

azn_code_set_utf8

String

that

specifies

UTF-8

codeset.

For

use

with

the

azn_init_set_code_set()

function

and

with

the

azn_svc_init_code_set

service

initialization

attribute.

azn_init_admin_svc

Administration

service

definition

attribute

Multi-valued

string

attributes

for

use

with

azn_initialize().

Each

string

value

is

of

the

format:

service_id

=

path_to_dll[&parameters

...

]

The

service_id

is

the

string

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

path_to_dll

is

the

fully

qualified

path

to

the

DLL

which

contains

the

service

executable

code.

Optionally

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

The

parameters

are

considered

to

be

all

data

following

the

&

symbol

in

the

string.

azn_init_audit_attribute

Audit

additional

credential

or

application-specific

attribute.

azn_init_auditcfg

Audit

logging

configuration.

A

multi-valued

attribute

containing

entries

of

the

format:

module_id[:trace_level]

azn_init_audit_file

Audit

log

path

and

file

name

to

collect

Tivoli

Access

Manager

audit

events.

azn_init_cache_refresh_interval

Interval

in

seconds

for

local

policy

cache

polled

updates.

Values

can

be:

v

disable

v

default

v

a

string

time

in

seconds.

azn_init_cfg_file

Path

and

filename

to

be

used

to

contain

remaining

initialization

parameters.

252

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_init_cred_attribute_entitlement_services

A

list

of

configured

authorization

API

entitlement

service

IDs

that

are

queried

by

azn_id_get_creds()

after

the

credential

is

built,

in

order

to

gather

attributes

to

be

placed

in

the

credential

for

attribute-based

authorization.

Each

service

ID

is

called

according

to

the

order

of

the

values

in

this

initialization

attribute

azn_init_cred_mod_svc

Credential

modification

service

definition

attribute.

Multi-valued

string

attributes

for

use

with

azn_initialize().

Each

string

value

is

of

the

format:

service_id

=

path_to_dll[&parameters

...

]

The

service_id

is

the

string

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

path_to_dll

is

the

fully

qualified

path

to

the

DLL

which

contains

the

service

executable

code.

Optionally

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

The

parameters

are

considered

to

be

all

data

following

the

&

symbol

in

the

string.

azn_init_db_file

Path

and

filename

to

be

used

to

contain

cached

authorization

policy.

azn_init_dynamic_adi_entitlement_services

A

list

of

configured

authorization

API

entitlement

service

IDs

that

will

be

queried

by

the

rules

engine

when

missing

ADI

is

detected

during

an

authorization

rule

evaluation.

Entitlement

services

listed

as

values

for

this

attribute

must

adhere

to

the

input

and

output

specifications

for

a

dynamic

ADI

retrieval

service.

When

ADI

is

found

to

be

missing

during

a

rule

evaluation,

each

service

in

this

list

is

queried

in

the

order

defined

in

this

entry.

These

entries

must

refer

to

existing

entitlement

services

that

were

loaded

by

service

entries

in

the

entitlement

service

configuration

stanza

or

initialization

attribute.

azn_init_ent_svc

Entitlement

service

definition

attribute.

Multi-valued

string

attributes

for

use

with

azn_initialize().

Each

string

value

is

of

the

format:

service_id

=

path_to_dll[&parameters

...

]

The

service_id

is

the

string

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

path_to_dll

is

the

fully

qualified

path

to

the

DLL

which

contains

the

service

executable

code.

Optionally

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

The

parameters

are

considered

to

be

all

data

following

the

&

symbol

in

the

string.

azn_init_extern_authzn_svc

Appendix

C.

Attribute

names

reference

253

External

authorization

service

definition

attribute.

Multi-valued

string

attributes

for

use

with

azn_initialize().

Each

string

value

is

of

the

format:

service_id

=

path_to_dll[&parameters

...

]

The

service_id

is

the

string

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

path_to_dll

is

the

fully

qualified

path

to

the

DLL

which

contains

the

service

executable

code.

Optionally

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

The

parameters

are

considered

to

be

all

data

following

the

&

symbol

in

the

string.The

external

authorization

service

can

take

an

additional

optional

-weight

parameter

as

follows:

service_id

=

path_to_dll[

-weight

N

]

[

&

params

...

]

The

value

N

can

be

any

unsigned

long

value

whose

absolute

value

is

used

to

appropriately

weight

the

decision

of

an

external

authorization

service

for

or

against

access

to

the

object.

The

default

value

for

an

external

authorization

service

if

this

is

not

specified

is

set

to

the

value

AZN_C_DEFAULT_EAS_WEIGHTING.

The

assigned

weighting

of

the

core

authorization

engine

is

AZN_C_AUTHZN_ENGINE_WEIGHTING.

azn_init_input_adi_xml_prolog

XML

prolog

text

for

XMLADI

input

document.

This

text

is

appended

to

the

XML

input

document

that

is

created

from

the

rule

ADI

passed

in

the

application

context

and

credential

attributes.

The

default

text

is:

<?xml

version="1.0"

encoding="UTF-8"?>

azn_init_listen_flags

Flags

to

enable

the

reception

of

policy

cache

update

notifications.

Values

can

be

a

combination

of

the

following:

v

disable

This

value

overrides

all

others

and

disables

the

notification

listener.

v

enable

v

use_tcp_port

v

use_udp_port

v

dynamic_port_selection

Multiple

values

are

accepted

for

this

attribute

name

and

are

logically

OR’d

together

azn_init_ldap_authn_timeout

Client

side

timeout

setting

for

communications

to

LDAP

servers.

The

azn_init_ldap_timeout

parameter

is

an

overall

setting.

This

may

be

overridden

for

authentication

(bind

and

compare)

and

search

by

specifying

the

azn_init_ldap_authn_timeout

and/or

the

azn_init_ldap_search_timeout

parameters

respectively.

Specified

in

seconds

as

a

string

value.

By

default,

or

with

a

value

of

zero

(0),

LDAP

requests

will

not

timeout.

azn_init_ldap_bind_dn

The

distinguished

name

with

which

to

bind

to

the

LDAP

server.

azn_init_ldap_bind_pwd

The

password

for

the

distinguished

name

that

binds

to

the

LDAP

server.

254

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

azn_init_ldap_cache

Enables

caching

of

the

user,

group,

and

LDAP

policy

data

in

the

client

to

reduce

the

turnaround

of

similar

LDAP

transactions.

The

string

value

can

be

true

or

false.

The

default

value

is

false.

azn_init_ldap_host

The

LDAP

server

host

name.

azn_init_ldap_max_search_size

Set

the

maximum

number

of

entries

returned

from

an

LDAP

search.

Note

that

this

value

can

be

further

constrained

by

the

limits

set

by

the

LDAP

server.

azn_init_ldap_port

The

LDAP

server

host

port

(a

numerical

string).

This

is

the

SSL

port

when

SSL

communication

with

the

LDAP

host

is

to

be

enabled.

azn_init_ldap_prefer_rw_svr

Makes

the

writable

LDAP

server

the

preferred

one

for

the

client.

Calls

will

still

failover

to

a

read-only

server

when

the

write

server

is

offline.

The

string

value

can

be

true

or

false

The

default

value

is

false.

azn_init_ldap_replica

A

list

of

LDAP

server

replicas.

Each

string

value

is

of

the

format:

ldap_server,port,type,pref

The

values

are:

v

ldap_server

The

network

name

of

the

server.

v

port

The

port

on

the

LDAP

server.

v

type

Must

be

one

of

the

following

values

readonly

readwrite

v

pref

A

level

from

1

to

10.

10

is

the

highest

preference.

azn_init_ldap_search_timeout

Client

side

timeout

setting

for

communications

to

LDAP

servers.

The

azn_init_ldap_timeout

parameter

is

an

overall

setting.

This

may

be

overridden

for

authentication

(bind

and

compare)

and

search

by

specifying

the

azn_init_ldap_authn_timeout

and/or

the

azn_init_ldap_search_timeout

parameters

respectively.

Specified

in

seconds

as

a

string

value.

By

default,

or

with

a

value

of

zero

(0),

LDAP

requests

will

not

timeout.

azn_init_ldap_ssl_keyfile

The

LDAP

server’s

SSL

keyfile.

This

must

be

non-NULL

to

use

SSL

communication

with

the

LDAP

host.

azn_init_ldap_ssl_keyfile_dn

Appendix

C.

Attribute

names

reference

255

The

LDAP

server’s

SSL

keyfile

distinguished

name.

azn_init_ldap_ssl_keyfile_pwd

The

LDAP

server’s

SSL

keyfile

password.

azn_init_ldap_timeout

Client

side

timeout

setting

for

communications

to

LDAP

servers.

The

azn_init_ldap_timeout

parameter

is

an

overall

setting.

This

may

be

overridden

for

authentication

(bind

and

compare)

and

search

by

specifying

the

azn_init_ldap_authn_timeout

and/or

the

azn_init_ldap_search_timeout

parameters

respectively.

Specified

in

seconds

as

a

string

value.

By

default,

or

with

a

value

of

zero

(0),

LDAP

requests

will

not

timeout.

azn_init_ldap_use_compare

Chooses

whether

the

client

uses

the

ldap_compare

or

the

ldap_bind

call

to

authenticate

the

users

password.

This

applies

to

calls

to

azn_util_client_authenticate()

and

azn_util_password_authenticate()

with

an

LDAP

registry.

The

string

value

can

be

true

or

false

The

default

value

is

false,

which

means

to

use

the

ldap_bind

call.

azn_init_logging_client_id

String

ID

or

tag

to

identify

the

client

authorization

API

client.

Default

string:

aznAPI

azn_init_log_size

The

maximum

size

(in

bytes)

for

the

audit

and

debug

files.

When

the

log

size

reaches

this

value,

the

log

is

backed

up

and

a

new

log

file

is

started.

A

value

of

0

will

disable

log

rollover.

A

negative

value

will

perform

rollover

daily

regardless

of

size.

azn_init_log_flush_interval

The

audit/debug

logging

service

flush

interval

in

seconds.

A

value

of

0

sets

the

default

of

20

seconds.

Maximum

value:

3600

seconds

(6

hours).

azn_init_master_host

The

azn_init_master_host

attribute

refers

to

the

location

of

the

policy

server

(ivmgrd).

See

the

description

for

azn_init_replica

azn_init_master_port

The

azn_init_master_port

attribute

refers

to

the

location

of

the

policy

server

(ivmgrd).

See

the

description

for

azn_init_replica.

azn_init_mode

Authorization

API

authorization

engine

mode.

Valid

values

are:

v

local

This

means

you

are

using

a

policy

cache

replica

v

remote

Making

requests

to

the

authorization

server.

No

local

policy

cache.

azn_init_pac_svc

256

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Privilege

attribute

certificate

service

definition

attribute.

Multi-valued

string

attributes

for

use

with

azn_initialize().

Each

string

value

is

of

the

format:

service_id

=

path_to_dll[&parameters

...

]

The

service_id

is

the

string

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

path_to_dll

is

the

fully

qualified

path

to

the

DLL

which

contains

the

service

executable

code.

Optionally

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

The

parameters

are

considered

to

be

all

data

following

the

&

symbol

in

the

string.

azn_init_replica

The

azn_init_replica

attribute

is

the

location

of

an

authorization

(ivacld)

server.

There

can

be

more

than

one

azn_init_replica.

Used

in

conjunction

with

azn_init_master_host

and

azn_init_master_port.

The

authorization

server

replicas

are

of

the

format:

replica_hostname:port:preference

The

values

are:

v

replica_hostname

The

network

name

of

the

server.

v

port

The

port

on

the

server.

v

preference

A

ranking

for

attempting

contact.

Level

from

1

to

10.

10

is

the

highest

preference.

azn_init_resource_mgr_provided_adi

Resource

manager

ADI

prefix

list.

A

list

of

string

prefixes

that

identify

Access

Decision

Information

(ADI)

to

be

supplied

by

the

resource

manager.

The

resource

manager

is

the

authorization

API

client.

This

list

tells

the

authorization

engine

that

whenever

it

needs

ADI

that

has

one

of

the

prefixes

listed,

and

the

ADI

is

not

available

in

the

credential

or

application

context

passed

in

with

the

azn_decision_access_allowed_ext()

call,

that

the

engine

should

fail

the

access

decision

and

request

that

the

resource

manager

retry

the

request

and

provide

the

required

data

in

the

application

context

of

the

next

request.

For

example,

WebSEAL

as

an

Authorization

API

clients

uses

this

configuration

entry

to

notify

the

authorization

engine

that

it

is

a

source

for

HTTP

transaction

data

needed

for

rule

evaluations.

azn_init_set_perminfo_attrs

This

initialization

parameter

contains

the

set

of

attributes

that

the

caller

is

interested

in

receiving

from

the

azn_decision_access_allowed_ext()

call

in

the

permission

info

attribute

list.

By

default

there

is

no

information

returned

by

this

call.

Adding

a

value

to

this

attribute

at

initialization

time

enables

the

attribute

to

be

returned

as

permission

info

if

it

is

applicable

to

the

current

decision

call.

This

list

may

also

include

attributes

that

are

user

defined,

such

as

by

setting

an

attribute

on

an

ACL

or

POP

using

modify

set

attribute

command

of

pdadmin.

The

values

for

this

parameter

are

described

in

“Permission

information

attributes”

on

page

263.

Appendix

C.

Attribute

names

reference

257

azn_init_ssl_authn_type

The

type

of

authentication.

Possible

values

are:

v

certificate

v

password

v

none

The

default

value

is

none.

This

is

the

method

that

the

Tivoli

Access

Manager

policy

server

will

use

to

authenticate

the

authorization

API

client.

The

svrsslcfg

utility

automatically

sets

this

to

certificate.

If

the

value

is

certificate

the

Tivoli

Access

Manager

policy

server

will

map

the

certificate

provided

by

the

authorization

API

client

into

an

identity

and

authenticate

against

it.

Note

that

even

if

password

or

none

are

specified,

the

client

will

still

use

SSL

to

communicate

with

the

server.

azn_init_ssl_authn_user

The

user

name

that

is

used

if

the

authentication

type

is

password.

It

may

be

unwise

to

store

this

in

the

configuration

file,

however

it

can

be

useful

for

testing

communications.

Can

be

any

string.

azn_init_ssl_authn_pwd

The

password

that

is

used

if

the

authentication

type

is

password.

It

may

be

unwise

to

store

this

in

the

configuration

file,

however

it

can

be

useful

for

testing

communications.

azn_init_ssl_auto_refresh

Enables

or

disables

automatic

refresh

of

the

SSL

certificate

and

key

database

file

password.

When

enabled,

the

certificate

is

renewed

when

it

is

close

to

expiration.

This

means

that

the

same

public

key

gets

a

renewed

signature

from

the

certificate

authority,

which

results

in

an

extended

lifetime

for

the

certificate.

A

value

of

yes

enables

automatic

refresh.

A

value

of

no

disables

automatic

refresh.

azn_init_ssl_cert_life

SSL

certificate

life

span

for

the

principal.

Expressed

as

number

of

days.

Default

value

365.

azn_init_ssl_io_inactivity_timeout;

Inactivity

timeout

for

the

input/output

connection,

expressed

in

seconds.

The

value

is

an

integer.

The

minimum

value

is

0.

When

the

value

is

0,

no

timeout

is

enforced.

The

default

value

is

0

seconds.

The

recommended

value

is

90

seconds.

azn_init_ssl_keyfile

This

is

the

keyfile

used

to

communicate

with

the

Tivoli

Access

Manager

policy

server

and

the

Tivoli

Access

Manager

authorization

server.

It

is

created

by

the

svrsslcfg

utility.

This

can

be

any

relative

or

fully

qualified

filename.

azn_init_ssl_keyfile_label

258

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

The

label

of

the

certificate

to

use

within

the

keyfile.

In

normal

operation

this

is

not

used.

However

it

is

useful

if

the

keyfiles

are

constructed

outside

of

the

svrsslcfg

utility

and

contain

multiple

certificates.

This

can

be

any

string.

azn_init_ssl_keyfile_pwd

Password

used

to

protect

keys

in

the

keyfile.

The

value

is

a

string.

azn_init_ssl_listening_port

Use

this

value

to

specify

the

TCP

port

on

which

the

application

will

listen

for

notifications

from

the

master

database

that

is

has

changed.

All

communications

on

this

port

are

SSL

encrypted.

The

value

should

be

non-zero

and

not

used

by

any

other

service

on

the

computer.

azn_init_ssl_local_domain

The

domain

in

which

the

authorization

server

runs.

If

this

value

is

not

specified

in

the

configuration

file

or

as

an

initialization

parameter,

operations

that

rely

on

it

will

fail.

This

value

must

match

the

name

of

the

Tivoli

Access

Manager

secure

domain

that

was

specified

when

the

authorization

server

was

configured.

The

value

is

a

string.

azn_init_ssl_max_worker_threads

Maximum

number

of

worker

threads

that

are

created

by

the

server

to

handle

incoming

requests.

The

value

is

an

integer.

The

minimum

number

is

1.

The

maximum

number

is

determined

by

the

amount

of

system

resources

available.

The

default

number

is

50.

azn_init_ssl_mgr_config

The

relative

or

fully

qualified

path

name

to

the

pd.conf

file.

This

entry

is

used

to

point

to

the

configuration

file

that

was

created

as

part

of

configuring

the

Tivoli

Access

Manager

runtime

environment

(pd.conf).

When

it

is

specified,

the

values

for

master-host,

master-port,

and

master-dn

will

come

from

the

manager

stanza

of

pd.conf

and

override

any

values

specified

in

the

authorization

API

client’s

configuration

file.

azn_init_ssl_pwd_life

This

is

the

amount

of

time

before

the

password

or

stash

file

to

the

keyfile

will

expire.

The

Tivoli

Access

Manager

authorization

API

client

automatically

refreshes

the

password

or

stash

file

before

this

expiry

time,

if

automatic

refresh

is

enabled.

Can

be

any

non-negative

integer.

Default

value

is

183

days.

azn_init_ssl_stashfile

This

the

stash

file

for

the

keyfile.

It

is

created

by

the

svrsslcfg

utility.

It

is

used

as

an

obfuscated

password

to

the

keyfile.

This

file

should

be

appropriately

secured.

This

can

be

any

relative

or

fully

qualified

filename.

azn_init_ssl_timeout

Appendix

C.

Attribute

names

reference

259

This

is

the

amount

of

time

before

an

SSL

session

will

expire.

The

Tivoli

Access

Manager

authorization

API

client

automatically

create

a

new

SSL

session

with

new

keys

when

a

session

expires.

Can

be

any

non-negative

integer.

Default

value

is

7200

seconds.

azn_init_uraf_bind_id

URAF

registry

bind

ID

azn_init_uraf_bind_pwd

Password

for

URAF

registry

bind

ID

azn_init_uraf_cache_lifetime

URAF

cache

lifetime,

default

value

is

86400

sec.

(one

day)

azn_init_uraf_cache_mode

Enable

or

disable

URAF

cache.

The

default

value

is

disable.

azn_init_uraf_cache_size

URAF

cache

size.

The

default

value

is

251.

azn_init_uraf_cfg_file

URAF

registry

configuration

file

name.

azn_init_xmladi_attribute_definitions

XMLADI

attribute

definitions.

These

attribute

definitions

are

inserted

into

the

XMLADI

element

start

tag

to

enable

attributes

to

be

defined

for

the

entire

XMLADI

document

and

all

ADI

defined

therein.

The

programmatic

initialization

attribute

can

contain

multiple

attribute

values,

one

for

each

attribute

definition

to

be

added

to

the

XMLADI

element

start

tag.

The

attribute

definitions

are

in

the

format:

attribute_name

=

″attribute_value″

For

example:

xmlns:myNS

=

"http://myURI.mycompany.com"

appID

=

’"Jupiter"

-

Account

Management

Web

\

Portal

Server

#1.’

The

XMLADI

element

start

tag

built

from

these

definitions

is:

<XMLADI

xmlns:myNS="http://myURI.mycompany.com"

\

appID=’"Jupiter"

-

Account

Management

Web

Portal

\

Server

#1.’>

azn_init_xsl_stylesheet_prolog

XSL

prolog

text

for

the

XSL

rule

document.

This

text

is

appended

to

the

XSL

rule

document

that

is

created

from

the

rule

text

in

the

rule

policy

object.

This

allows

you

to

control

aspects

of

the

XSL

evaluation

process.

Modifying

this

value

is

not

recommended

as

it

can

affect

the

results

returned

by

the

processor

and

make

them

unrecognizable

by

the

rules

policy

evaluator.

To

review

the

default

text,

see

ogauthzn.h.

This

file

is

distributed

with

the

Tivoli

Access

Manager

ADK.

azn_server_name

Authorization

API

authorization

server

name

260

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Credential

attributes

Authorization

credential

attribute

names.

Credential

attributes

are

stored

within

the

authorization

credential

of

a

user.

These

attributes

contain

information

on

the

identity

and

authorization

capability

of

the

subject

of

the

credential.

The

authorization

API

runtime

reserves

a

number

of

attributes

for

its

own

use

and

for

implementing

the

Tivoli

Access

Manager

authorization

model.

The

reserved

attributes

are

listed

in

this

section.

Some

of

the

reserved

credential

attributes

are

treated

as

read-only

by

the

authorization

API

client

runtime

because

the

information

that

they

convey

about

the

user

is

immutable

and,

if

changed,

would

alter

the

identity

of

the

user.

Other

attributes

can

be

modified

if

the

appropriate

credential

modification

service

is

used

to

do

so.

These

attributes

are

returned

by

the

azn_creds_get_attrlist_for_subject()

call.

Some

of

these

may

not

be

present

according

to

the

type

of

the

authenticated

user

and

the

information

that

was

originally

passed

to

the

call

used

to

build

a

given

credential.

Attribute

Description

″AUTHENTICATION_LEVEL″

This

AUTHENTICATION_LEVEL

credential

attribute

can

be

used

to

indicate

the

strength

of

the

authentication

mechanism

used

to

authenticate

the

user.

This

attribute

is

added

to

the

credential

by

Tivoli

Access

Manager

for

e-Business

as

part

of

the

authentication

process

if

authentication

levels

have

been

appropriately

configured

in

the

Tivoli

Access

Manager

configuration

file.

The

attribute

is

used

by

the

Tivoli

Access

Manager

authorization

engine

to

implement

step-up

authorization

and

IP

authorization

which

require

that

the

user

have

a

particular

level

authentication

for

access

to

protected

resources.

Customer’s

authorization

API

applications

may

also

add

the

AUTHENTICATION_LEVEL

attribute

to

user

credentials

so

as

to

make

use

of

step-up

authorization

and

IP

authorization

policy

that

has

been

deployed

in

the

secure

domain.

The

Tivoli

Access

Manager

authorization

engine

requires

that

the

AUTHENTICATION_LEVEL

attribute

have

a

single

numeric

value

with

0

indicating

an

unauthenticated

user

and

other

numbers,

1,

2,

3,

etc,

each

indicating

a

successively

higher

(stronger)

method

of

authentication.

azn_cred_auth_method

Any

authentication

method

information

that

was

passed

in

the

mechinfo

structure.

This

is

specified

by

caller

of

the

API.

For

example:

X509

certificate

azn_cred_authnmech_info

Any

authentication

mechanism

information

that

was

passed

in

the

mechinfo

structure.

This

is

specified

by

caller

of

the

API.

For

example:

IBM

Tivoli

Demo

Client

v5.1.0

azn_cred_authzn_id

The

user

name

or

identifier

used

to

build

the

authorization

credentials.

azn_cred_browser_info

The

browser

information

passed

in

the

mechinfo

structure.

This

is

specified

by

caller

of

the

API.

For

example:

Mozilla

azn_cred_group_registry_ids

Appendix

C.

Attribute

names

reference

261

The

string

group

name

memberships

(group

DN)

of

this

entity.

azn_cred_group_uuids

The

string

group

UUID

memberships

of

this

entity.

Each

value

is

a

UUID,

similar

to

the

value

shown

in

the

azn_cred_principal

uuid

example.

azn_cred_groups

The

string

group

name

memberships

of

this

entity.

Values

are

strings.

For

example,

engineering

azn_cred_ip_address

The

IP

address

information

passed

in

the

mechinfo

structure.

Specified

by

caller.

This

is

the

string

representation

of

the

IP

address

in

network

order.

For

example:

0x12657834

azn_cred_mech_id

The

mechanism

ID

for

this

credential.

The

ID

depends

on

the

registry

from

which

the

credential

was

built.

For

example,

when

build

from

LDAP

it

is

IV_LDAP_V3.0.

When

built

from

Domino

or

AD,

it

is

IV_URAF_V3.0.

When

the

user

credentials

are

unauthenticated,

it

is

IV_UNAUTH_V3.0.

azn_cred_principal_domain

The

local

domain

into

which

the

user

is

authenticated

(and

therefore

the

domain

in

which

the

credential

is

created).

azn_cred_principal_name

The

string

name

of

the

entity.

For

example:

fred_smith

azn_cred_principal_uuid

The

universal

unique

identifier

(UUID)

of

the

entity.

For

example:

eb529fec-6498-11d7-b236-000629ba5445

azn_cred_qop_info

The

quality

of

protection

information

passed

in

the

mechanism_info

structure.

Valid

values

are:

v

none

v

integrity

v

privacy

azn_cred_registry_id

The

registry

ID

used

to

build

these

authorization

credentials.

azn_cred_user_info

Any

user

information

that

was

passed

in

the

mechinfo

structure

that

was

defined

by

the

caller.

For

example:

Dr

Fred

Oscar

Smith

III

azn_cred_version

The

credential

version.

For

Tivoli

Access

Manager

5.1.0,

the

version

is

0x510.

262

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Permission

information

attributes

Permission

information

attributes

are

returned

to

the

caller

of

azn_decision_access_allowed_ext()

by

the

Tivoli

Access

Manager

authorization

engine.

These

attributes

convey

information

about

the

result

of

the

access

decision

or

conditions

placed

upon

the

result

by

the

authorization

engine.

Permission

information

may

also

consist

of

the

extended

attributes

that

are

attached

to

the

target

protected

resource,

or

to

the

authorization

policy

attached

to

that

resource.

Tivoli

Access

Manager

reserves

the

permission

information

attributes

described

in

this

section

in

order

to

return

permission

information

to

the

Tivoli

Access

Manager

authorization

API

authorization

client.

These

attributes

are

returned

by

the

azn_decision_access_allowed_ext()

call.

Some

of

these

may

not

be

present

in

all

permission_info

attribute

lists

returned

according

to

the

type

of

the

access

decision

and

the

information

that

was

originally

passed

in

with

the

call.

These

attribute

names

may

also

be

passed

in

to

the

azn_initialize()

call

as

values

for

the

azn_init_set_perminfo_attrs

attribute

to

control

which

of

them

are

returned

as

permission

info

for

any

decision

call.

The

default

is

that

no

permission

information

is

returned.

All

values

are

azn_string_t

unless

otherwise

specified.

Attribute

Description

azn_acl_ext_attr_loc

When

ACL

extended

attributes

are

returned

by

the

access

decision

call,

this

attribute

holds

the

place

in

the

object

space

to

which

the

ACL

is

attached.

Use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

azn_dynadi_target_url

This

attribute

is

specific

to

WebSEAL

and

the

attribute

retrieval

service

(AMWebARS).

The

value

is

the

full

target

URL

that

the

caller

is

requesting.

This

is

required

by

AMWebARS

in

order

to

enable

it

to

return

the

browser

to

the

original

requested

URL

once

its

interaction

with

the

user

is

complete.

This

attribute

is

passed

into

the

access

decision

by

WebSEAL.

azn_perminfo_all_attrs

This

value

is

passed

in

the

azn_init_set_perminfo_attrs

attribute

to

azn_initialize()

to

specify

that

the

caller

wished

to

receive

all

attributes

that

can

potentially

be

returned

by

the

authorization

engine

on

an

extended

authorization

decision

call.

This

overrides

any

other

attributes

passed

in

the

azn_init_set_perminfo_attrs

attribute.

azn_perminfo_auditlevel_ulong

Appendix

C.

Attribute

names

reference

263

Audit

level.

Audit

events

that

are

performed

for

this

authorization

check.

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

The

caller

needs

to

use

the

azn_attrlist_get_entry_ulong()

API

to

retrieve

this

attribute

from

the

permission_info

output

parameter

of

the

azn_decision_access_allowed_ext()

API.

The

audit

level

values

are

returned

in

the

azn_perminfo_auditlevel_ulong

permission

info

attribute

when

querying

the

audit

level

set

on

the

POP

attached

to

a

protected

object.

These

values

correspond

to

the

audit

values

that

are

set

using

the

administration

interfaces.

The

values

are

of

data

type

unsigned

long.

The

value

of

the

azn_perminfo_auditlevel_ulong

permission

info

attribute

is

a

bit

mask

consisting

of

an

bitwise

logical

OR

of

the

audit

level

values.

The

azn_perminfo_auditlevel_ulong

values

are:

azn_perminfo_auditlevel_all

Audit

all

events.

azn_perminfo_auditlevel_none

Do

not

audit

any

events.

azn_perminfo_auditlevel_permit

Audit

permit

events.

azn_perminfo_auditlevel_deny

Audit

deny

events.

azn_perminfo_auditlevel_error

Audit

error

messages.

azn_perminfo_auditlevel_admin

Audit

administration

events.

For

example,

when

a

POP

has

auditing

of

denials

and

errors

activated,

azn_perminfo_auditlevel_ulong

contains

the

unsigned

long

value:

(azn_perminfo_auditlevel_deny

|

azn_perminfo_auditlevel_error)

azn_perminfo_dynadi_redirect_url

This

value

is

specific

to

WebSEAL

attribute

retrieval

service

(AMWebARS).

This

is

the

URL

that

WebSEAL

should

redirect

the

user

browser

to

in

the

event

that

the

dynamic

ADI

retrieval

module

needs

to

interact

with

the

user

before

ADI

can

be

retrieved.

azn_perminfo_fail_reason

264

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Specifies

the

reason

why

the

request

for

access

failed,

as

returned

by

the

azn_decision_access_allowed_ext()

call.

The

attribute

is

a

string

whose

value

is

constructed

from

codes

are

of

data

type

unsigned

long

The

azn_perminfo_fail_reason

may

contain

one

of

the

following

reason

codes.

azn_perminfo_fail_reason_acl

Authorization

denied

by

an

ACL

policy

azn_perminfo_fail_reason_traverse

User

does

not

have

traverse

(T)

permission

to

access

the

protected

resource.

azn_perminfo_fail_reason_tod

Authorization

denied

to

a

time

of

day

check

azn_perminfo_fail_reason_eas

An

external

authorization

service

denied

access

azn_perminfo_fail_reason_eas_override

An

external

authorization

service

denied

access,

overriding

the

prevailing

authorization

decision

which

was

to

permit

access.

azn_perminfo_fail_reason_stepup_forbidden

Step-up

authorization

policy

explicitly

denied

access

to

the

protected

resource.

azn_perminfo_fail_reason_delegate

The

user

was

denied

access

due

to

insufficient

privilege

to

delegate

the

requested

operation.

azn_perminfo_qop

The

quality

of

protection

required

between

caller

and

the

domain

before

access

to

the

protected

object

can

be

granted.

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

Data

type:

const

azn_string_t

Valid

values:

v

none

v

integrity

v

privacy

azn_perminfo_qop_ulong

Appendix

C.

Attribute

names

reference

265

The

quality

of

protection

required

between

caller

and

the

domain

before

access

to

the

protected

object

can

be

granted.

This

is

the

same

as

the

azn_perminfo_qop

attribute

except

it

is

returned

as

an

unsigned

long.

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

The

supported

quality

of

protection

values

are:

azn_perminfo_qop_value_integrity

Quality

of

protection

level

of

integrity.

azn_perminfo_qop_value_none

Quality

of

protection

level

of

none.

azn_perminfo_qop_value_privacy

Quality

of

protection

level

of

privacy.

The

above

values

are

of

data

type

unsigned

long.

azn_perminfo_reason_rule_failed

An

authorization

API

boolean

rules

evaluator

permission

information

attribute.

A

string

indicating

the

reason

that

a

rule

failed.

This

is

returned

in

the

permission

info

from

an

access

decision

call

when

the

rule

failed

and

a

reason

string

was

set

on

the

rule

by

the

policy

administrator.

The

string

is

user-specific

and

not

mandatory.

azn_perminfo_rules_adi_request

An

authorization

API

boolean

rules

evaluator

permission

information

attribute.

A

list

of

string

ADI

container

names

that

the

rules

evaluator

needs

in

order

to

evaluate

the

current

rule.

Upon

receiving

this

attribute

in

the

permission

info

from

an

access

decision

call,

the

resource

manager

should

collate

the

request

containers

of

data,

add

them

to

the

app_context

parameter

and

call

the

access

decision

interface

again.

azn_perminfo_stepup_level

The

authentication

level

required

to

access

the

object,

returned

as

an

unsigned

long.

For

more

information

on

the

concept

of

authentication

step-up,

see

IBM

Tivoli

Access

Manager

for

e-business

WebSEAL

Administration

Guide.

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

The

caller

needs

to

use

azn_attrlist_get_entry_ulong()

to

retrieve

this

attribute

from

the

permission_info

output

parameter

of

the

azn_decision_access_allowed_ext()

call.

azn_perminfo_warningmode_ulong

266

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Warning

mode.

When

warning

mode

is

enabled

access

is

always

granted.

If

access

should

not

have

been

granted

then

the

access

is

logged.

Data

type:

boolean

values

returned

in

unsigned

long

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

The

caller

needs

to

use

azn_attrlist_get_entry_ulong()

to

retrieve

this

attribute

from

the

permission_info

output

parameter

of

azn_decision_access_allowed_ext().

azn_perminfo_warmingmodepermitted_ulong

Access

permitted

because

of

warning

mode.

The

boolean

indicator

is

used

to

tell

the

caller

that

access

was

granted

because

warning

mode

is

enabled.

Data

type:

boolean

values

returned

in

unsigned

long

The

caller

needs

to

use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

The

caller

needs

to

use

azn_attrlist_get_entry_ulong()

to

retrieve

this

attribute

from

the

permission_info

output

parameter

of

azn_decision_access_allowed_ext().

azn_pop_ext_attr_loc

When

POP

extended

attributes

are

returned

by

the

access

decision

call,

this

attribute

holds

the

place

in

the

object

space

to

which

the

POP

is

attached.

Use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

azn_rule_ext_attr_loc

When

rules

extended

attributes

are

returned

by

the

access

decision

call,

this

attribute

holds

the

place

in

the

object

space

to

which

the

rules

is

attached.

Use

azn_attrlist_add_entry()

to

set

this

value

in

the

azn_init_set_perminfo_attrs

attribute

in

the

init_data

parameter

to

the

azn_initialize()

call.

Appendix

C.

Attribute

names

reference

267

Authorization

API

service

plug-in

attributes

Authorization

API

service

plug-in

attributes

are

used

to

pass

information

into,

or

out

from,

the

authorization

API

service

dispatcher;

or

for

passing

information

to

or

from

an

authorization

API

service.

The

following

authorization

API

service

plug-in

attributes

are

reserved

for

use

with

the

authorization

API

service

dispatcher

and

with

authorization

API

services

that

are

supplied

with

the

Tivoli

Access

Manager

authorization

runtime

package.

An

example

of

an

authorization

API

service

that

is

provided

with

the

Tivoli

Access

Manager

authorization

runtime

package

is

the

credential

attributes

entitlement

service

(azn_ent_cred_attr)

which

provides

a

tag-value

capability

data

retrieval

capability

from

the

user

registry

which

can

be

called

as

a

standard

authorization

API

entitlement

service

or

as

one

of

the

entitlement

service

sub-classes

of

credential

attribute

entitlement

service

or

dynamic

ADI

retrieval

entitlement

service.

All

values

are

azn_string_t

unless

otherwise

specified.

Attribute

Description

azn_admin_svc_err_prefix

Prefix

used

by

the

administration

service

to

define

minor

error

codes.

Data

type:

unsigned

integer.

azn_admin_svc_pluginstatus

Administration

service

plug-in

status

attribute.

This

attribute

is

RESERVED

for

internal

use

by

the

authorization

API

administration

service.

azn_admin_svc_pobj

Administration

service

protected

object

attribute.

azn_admin_svc_results

Administration

service

results

attribute.

azn_admin_svc_task

Administration

service

task

attribute.

azn_eas_svc_err_prefix

Prefix

used

by

the

extended

authorization

service

to

define

minor

error

codes.

Data

type:

unsigned

integer.

azn_ent_cred_attrs_attribute

268

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Credential

attributes

entitlement

service

attributes

A

list

of

attributes

requested

by

the

application

through

app_context

of

the

credential

attributes

entitlement

service.

The

format

of

this

string

value

is:

registry_identifier:registry_attribute_name

where

the

registry_identifier

is

the

value

used

to

do

the

registry

search.

This

can

also

be

a

credential

attribute

name

as

long

as

the

value

resolves

to

a

registry

identifier.

The

registry_attribute_name

is

the

attribute

to

be

retrieved

from

the

registry.

Examples:

cn=myname,o=myorg:address

where

cn=myname,o=myorg

is

the

registry

identifier

and

address

is

the

attribute

wanted

from

the

registry.

azn_cred_authzn_id:EmpolyeeType

where

azn_cred_authzn_id

is

an

attribute

in

the

credential

that

is

a

DN

and

EmployeeType

is

the

attribute

in

the

registry.

azn_ent_svc_err_prefix

Prefix

used

by

the

entitlement

service

to

define

minor

error

codes.

Data

type:

unsigned

integer.

azn_ent_svc_pd_pobj_matches

Output

attribute

for

the

entitlement

service.

This

is

the

list

of

objects

which

match

the

input

criteria.

See

description

of

azn_ent_svc_pd_pobj

in

this

table.

azn_ent_svc_pd_pobj

Entitlement

service

ID

for

Tivoli

Access

Manager

protected

object

entitlement

service

This

is

a

default

service.

When

a

NULL

entitlement

service

ID

is

specified

to

azn_entitlements_get_entitlements(),

this

service

is

called.

This

service

takes

a

credential,

a

directory

within

the

protected

object

tree

and

a

set

of

operations

and

returns

the

list

of

protected

objects

in

the

given

directory

and

its

subdirectories

for

which

the

given

authorization

API

credential

has

permission

to

perform

the

requested

set

of

operations.

The

output

is

returned

as

a

multi-string

valued

attribute

azn_ent_svc_pd_pobj_path

Input

attribute

for

the

entitlement

service,

specifying

the

protected

object

directory

path

to

be

searched.

See

description

of

azn_ent_svc_pd_pobj

in

this

table.

azn_ent_svc_pd_pobj_reqd_ops

Input

attribute

for

the

entitlement

service,

specifying

the

requested

set

of

operations

for

the

credential.

See

description

of

azn_ent_svc_pd_pobj

in

this

table.

azn_mod_rad_group_names

Appendix

C.

Attribute

names

reference

269

This

credential

modification

service

attribute

identifies

the

list

of

groups

to

add

Effectively

adds

the

credential

to

the

list

of

groups

specified

in

the

input

attributes

list.

Note

that

the

service

returns

a

new

credential

with

this

capability

and

the

original

credential

(and

the

registry)

are

unchanged.

azn_mod_svc_err_prefix

Prefix

used

by

the

credential

modification

service

to

define

minor

error

codes.

Data

type:

unsigned

integer.

azn_pac_svc_err_prefix;

Prefix

used

by

the

privilege

attribute

certificate

service

to

define

minor

error

codes.

Data

type:

unsigned

integer.

azn_svc_init_code_set

Valid

azn_string_t

constants

for

use

with

the

azn_init_set_code_set()

function

and

with

the

azn_svc_init_code_set

service

init

attribute.

Valid

values:

azn_code_set_utf8

azn_code_set_local

azn_svc_init_my_service_id

Used

by

the

service

dispatcher

to

pass

the

service

ID

for

a

service

module

to

the

modules

initialization

routine.

azn_svc_load_error

Returns

any

plug-in

load

errors

returned

by

the

system

in

the

format:

dll_path:

error_string

The

dll_path

is

the

filename

of

the

DLL

that

was

passed

to

the

load

routine

and

error_string

is

the

result

returned.

azn_svc_version

The

version

string

of

a

service

module.

This

is

returned

to

the

authorization

API

runtime.

270

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Authorization

engine

attributes

Authorization

engine

attributes

are

values

supplied

by

the

authorization

engine

to

the

authorization

rules

evaluator.

When

an

authorization

rule

refers

to

one

of

the

following

reserved

authorization

engine

attributes

the

authorization

engine

will

automatically

provide

the

value

of

the

attribute

to

the

rules

evaluator.

These

values

are

passed

into

the

azn_decision_access_allowed(),

azn_decision_access_allowed_ext()

and

azn_entitlements_get_entitlements()

calls

respectively.

The

actual

string

values

of

these

operations

are

an

internal

implementation

detail

and

should

not

be

relied

upon.

The

operations

can

be

concatenated

together

to

form

complex

operation

strings.

For

example,

to

request

a

read/modify

operation.

For

example,

Attribute

Description

azn_engine_requested_actions

The

value

of

this

attribute

(passed

to

the

rules

evaluator)

is

the

value

of

the

operation

parameter

passed

into

the

azn_decision_access_allowed()

or

azn_decision_access_allowed_ext()

call.

This

operation

specifies

the

action

(type

of

access)

that

the

user

requested

for

the

protected

resource.

For

example,

if

the

operation

parameter

to

the

access

decision

is

Tr

then

the

value

of

azn_engine_requested_actions

will

be

Tr.

You

can

use

this

attribute

to

write

authorization

rules.

For

example,

to

test

the

value

of

this

attribute,

you

can

write:

<xsl:if

test="azn_engine_requested_actions

=

’Tr’>!TRUE!</xsl:if>

or,

to

check

if

the

set

of

operations

contains

the

’r’

action:

<xsl:if

test="contains(azn_requested_actions,

’r’)">!TRUE!</xsl:if>

azn_engine_target_resource

The

value

of

this

attribute

(passed

to

the

rules

evaluator)

is

the

value

of

the

protected_resource

parameter

passed

into

the

azn_decision_access_allowed()

call.

It

is

the

target

resource

for

the

authorization

request.

Appendix

C.

Attribute

names

reference

271

272

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

D.

Authorization

API

client

configuration

file

The

initialization

and

operation

of

an

authorization

API

client

application

can

be

controlled

through

the

use

of

a

client

configuration

file.

The

example

client

configuration

file

is

aznAPI.conf.

The

name

of

an

authorization

API

client

configuration

file

is

usually

changed

to

match

the

name

of

the

application.

The

file

contains

sections

called

stanzas.

Stanza

labels

appear

within

brackets,

such

as:

[stanza_name].

For

example,

the

[ssl]

stanza

defines

the

SSL

configuration

settings

for

use

by

the

authorization

API

application.

Each

stanza

in

a

Tivoli

Access

Manager

configuration

file

contains

one

or

more

stanza

entries.

A

stanza

entry

consists

of

a

key

value

pair,

which

contains

information

that

is

expressed

as

a

paired

set

of

parameters.

Each

stanza

entry

has

the

following

format:

key

=

value

The

initial

configuration

of

an

authorization

API

client

application

establishes

some

default

values.

Some

values

are

static

and

will

never

change;

other

values

can

be

modified

to

customize

server

functionality

and

performance.

Note:

Authorization

API

client

applications

have

the

option

of

using

initialization

parameters

instead

of

using

a

configuration

file.

The

initialization

parameters

will

override

the

configuration

file

settings.

For

more

information,

see

Chapter

3,

“Initializing

the

authorization

API,”

on

page

23.

This

appendix

contains

the

following

sections:

v

“Guidelines

for

configuring

stanzas”

on

page

274

v

“How

to

change

configuration

settings”

on

page

277

v

“[authentication-mechanisms]

stanza”

on

page

278

v

“[aznapi-configuration]

stanza”

on

page

280

v

“[aznapi-admin-services]

stanza”

on

page

286

v

“[aznapi-cred-modification-services]

stanza”

on

page

287

v

“[aznapi-entitlement-services]

stanza”

on

page

288

v

“[aznapi-external-authzn-services]

stanza”

on

page

289

v

“[aznapi-pac-services]

stanza”

on

page

290

v

“[ldap]

stanza”

on

page

291

v

“[manager]

stanza”

on

page

297

v

“[meta-info]

stanza”

on

page

299

v

“[ssl]

stanza”

on

page

300

v

“[uraf-registry]

stanza”

on

page

305

©

Copyright

IBM

Corp.

2000,2003

273

Guidelines

for

configuring

stanzas

These

guidelines

are

provided

to

help

you

make

changes

to

the

authorization

API

application

configuration

file.

The

guidelines

are

divided

into

these

types:

v

General

v

Default

settings

v

Strings

v

Defined

strings

v

File

names

v

Integers

v

Boolean

values

For

instructions,

see

“How

to

change

configuration

settings”

on

page

277.

General

guidelines

Use

the

following

general

guidelines

when

making

changes

to

the

configuration

settings:

v

There

is

no

order

dependency

or

location

dependency

for

stanzas

in

any

configuration

file.

v

Stanza

entries

are

marked

as

required

or

optional.

When

an

entry

is

required,

the

entry

must

contain

a

valid

key

and

value.

v

Do

not

change

the

names

of

the

keys

in

the

configuration

files.

Changing

the

name

of

the

key

might

cause

unpredictable

results

for

the

servers.

v

Capitalization

of

the

keys

is

not

important.

For

example,

you

can

use

UseSSL

or

usessl.

v

Spaces

are

not

allowed

for

names

of

keys.

v

For

the

key

value

pair

format

of

key

=

value,

the

spaces

surrounding

the

equal

sign

(=)

are

not

required,

but

they

are

recommended.

v

Nonprintable

characters

(such

as

tabs,

carriage

returns,

and

line

feeds)

that

occur

at

the

end

of

a

stanza

entry

are

ignored.

Nonprintable

characters

are

ASCII

characters

with

a

decimal

value

less

than

32.

Default

values

Use

the

following

guidelines

when

changing

default

configuration

settings:

v

Many

values

are

created

or

modified

only

by

using

configuration

programs.

Do

not

manually

edit

these

stanzas

or

values.

v

Some

values

are

filled

in

automatically

during

configuration.

These

values

are

needed

for

the

initialization

of

the

application

after

the

configuration.

v

The

default

values

for

a

stanza

entry

might

be

different,

depending

on

the

application

configuration.

Some

key

value

pairs

are

not

applicable

to

certain

applications.

Strings

Some

values

accept

a

string

value.

When

you

manually

edit

the

configuration

file,

use

the

following

guidelines

to

change

configuration

settings

that

require

a

string:

v

String

values

must

be

part

of

the

local

codeset.

v

String

values

can

be

specified

using

any

case.

274

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

v

Valid

string

characters

are

the

letters

a-Z,

the

numbers

0-9,

a

period

(

.

),

a

comma

(

,

),

an

equal

sign

(

=

),

a

forward

slash

(

/

),

an

underscore

(

_

),

a

plus

sign

(+),

a

hyphen

(

-

),

an

at

sign

(

@

),

an

ampersand

(

&

),

and

an

asterisk

(

*

).

Some

strings

impose

additional

or

different

restrictions

on

the

set

of

allowable

string

characters.

These

restrictions

are

listed

under

the

appropriate

stanza

entry

discussion

later

in

this

chapter.

v

Double

quotation

marks

are

sometimes,

but

not

always,

required

when

you

use

spaces

or

more

than

one

word

for

values.

Refer

to

the

descriptions

or

examples

for

each

stanza

entry

when

in

doubt.

v

The

minimum

and

maximum

lengths

of

user

registry-related

string

values,

if

there

are

limits,

are

imposed

by

the

underlying

registry.

For

example,

for

Active

Directory

the

maximum

length

is

256

alphanumeric

characters.

Defined

strings

Some

values

accept

a

string

value,

but

the

value

must

be

one

of

a

set

of

defined

strings.

When

you

manually

edit

the

configuration

file,

make

sure

that

the

string

value

you

type

matches

one

of

the

valid

defined

strings

values.

For

example,

the

[aznapi-configuration]

stanza

contains

the

following

entry:

auditcfg

=

{azn|authn|mgmt}

The

value

for

auditcfg

is

expected

to

be

either

azn

or

authn

or

mgmt.

Any

other

value

is

not

valid

and

results

in

an

error.

File

names

Some

values

are

file

names.

For

each

stanza

entry

that

expects

a

file

name

as

a

value,

the

description

of

the

stanza

entry

specifies

which

of

the

following

constructs

are

valid:

v

Filename

No

directory

path

included.

v

Relative

filename

A

directory

path

is

allowed

but

not

mandatory.

These

files

typically

are

expected

to

be

located

relative

to

the

location

of

a

standard

Tivoli

Access

Manager

directory.

The

stanza

entry

for

each

relative

path

name

lists

the

root

directory

to

which

the

file

name

is

relative.

v

Fully

qualified

(absolute)

path

An

absolute

directory

path

is

required.

Note:

Some

stanza

entries

allow

more

than

one

of

the

above

choices.

The

set

of

characters

permitted

in

a

file

name

can

be

determined

by

the

file

system

and

by

the

local

codeset.

For

Windows,

file

names

cannot

have

these

characters:

a

backward

slash

(\),

a

colon

(:),

a

question

mark

(?),

or

double

quotation

marks.

Integers

Many

stanza

entries

expect

the

value

for

the

entry

to

be

expressed

as

an

integer.

v

Stanza

entries

that

take

an

integer

value

expect

integer

values

within

a

valid

range.

The

range

is

described

in

terms

of

a

minimum

value

and

a

maximum

value.

Appendix

D.

Authorization

API

client

configuration

file

275

For

example,

in

the

[logging]

stanza,

the

logflush

stanza

entry

has

a

minimum

value

of

1

second

and

a

maximum

value

of

600

seconds.

v

For

some

entries,

the

integer

value

must

be

positive,

and

the

minimum

value

is

1.

For

other

entries,

a

minimum

integer

value

of

0

is

allowed.

Use

caution

when

setting

an

integer

value

to

0.

For

example,

an

integer

value

of

0

might

the

function

that

is

controlled

by

that

stanza

entry.

For

example,

in

the

[aznapi-configuration]

stanza,

the

entry

logsize

=

0

disables

the

creation

of

a

rollover

log

file.

port

number.

Or,

an

integer

value

of

0

might

indicate

that

the

number

is

unlimited.

For

example,

in

the

[ssl]

stanza,

the

entry

ssl-io-inactivity-timeout

=

0

means

there

is

no

inactivity

timeout.

v

For

some

entries

requiring

integer

values,

Tivoli

Access

Manager

does

not

impose

an

upper

limit.

for

the

maximum

number

allowed.

For

example,

there

is

typically

no

maximum

for

port

numbers

in

the

[ldap]

stanza.

For

this

type

of

entry,

the

maximum

number

is

limited

only

by

the

size

of

memory

allocated

for

an

integer

data

type.

This

number

can

vary,

based

on

the

type

of

operating

system.

For

systems

that

allocate

4

bytes

for

an

integer,

this

value

is

2147483647.

However,

an

administrator

should

use

a

number

that

represents

the

value

that

is

most

logical

for

the

value

you

are

trying

to

set.

Boolean

values

Many

stanza

entries

represent

a

boolean

value.

Tivoli

Access

Manager

recognizes

the

boolean

values

yes

and

no.

Some

of

the

entries

in

the

configuration

files

are

read

by

other

servers

and

utilities.

For

example,

many

entries

in

the

[ldap]

stanza

are

read

by

the

LDAP

client.

Some

of

these

other

programs

recognize

additional

Boolean

characters:

v

yes

or

true

v

no

or

false

Anything

other

than

yes|true

will

be

interpreted

as

no|false,

including

a

blank

value.

The

recognized

Boolean

entries

are

listed

for

each

stanza

entry.

Refer

to

the

individual

descriptions

to

determine

when

true

or

false

are

also

recognized.

276

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

How

to

change

configuration

settings

To

change

a

configuration

setting,

do

the

following:

1.

Make

a

backup

copy

of

the

configuration

file

that

you

plan

to

modify.

The

backup

allows

you

to

return

the

configuration

file

to

a

known

working

state,

in

case

you

encounter

an

error

later.

2.

Stop

the

authorization

API

application

that

is

affected.

3.

Make

the

changes

by

doing

one

of

the

following:

v

Use

an

ASCII

text

editor

to

edit

the

configuration

file

and

make

any

necessary

changes.

Save

your

changes.

v

For

some

settings

in

the

authorization

API

client

configuration

file,

use

the

svrsslcfg

utility.

See

the

stanza

entry

descriptions

to

determine

which

entries

are

modified

by

svrsslcfg.

Many

stanzas

or

values

are

created

or

modified

only

by

using

configuration

programs.

Some

values

are

filled

in

automatically

after

the

configuration

is

completed.

Do

not

manually

edit

these

values.

4.

Restart

the

authorization

API

application

affected.

Appendix

D.

Authorization

API

client

configuration

file

277

[authentication-mechanisms]

stanza

This

stanza

defines

the

library

that

is

to

be

used

for

password

and

certificate

authentication.

The

configuration

entries

in

this

stanza

are

required

by

the

server

to

communicate

with

a

user

registry.

You

can

use

either

a

User

Registry

Adapter

Framework

(URAF)

registry

(either

Active

Directory

or

Domino)

or

an

LDAP

registry

library,

depending

on

the

type

of

user

registry.

Because

you

can

specify

only

one

type

of

user

registry,

certain

key

value

pairs

in

the

[authentication-mechanisms]

stanza

are

mutually

exclusive.

For

example:

#

passwd-uraf

=

/opt/PolicyDirector/lib/liburafauthn.a

#

cert-uraf

=

/opt/PolicyDirector/lib/liburafcertauthn.a

passwd-ldap

=

C:\pd\bin\ldapauthn.dll

&

-cfgfile

[C:/pd/etc/ivacld.conf]

cert-ldap

=

C:\pd\bin\certauthn.dll

&

-cfgfile

[C:/pd/etc/ivacld.conf]

In

this

example,

the

URAF

registry

items

are

commented

out

by

using

the

pound

sign

(#);

the

LDAP-oriented

stanza

entries

are

not

commented

out.

You

can

manually

edit

these

values;

no

configuration

utility

is

required.

[authentication-mechanisms]

stanza

passwd-uraf

=

fully_qualified_path

Location

of

the

library

to

use

for

password

authentication.

This

stanza

entry

is

required

when

you

use

a

URAF

registry

as

your

user

registry.

Default

values:

v

AIX:

/opt/PolicyDirector/lib/liburafauthn.a

v

HP:

/opt/PolicyDirector/lib/liburafauthn.sl

v

Sun:

/opt/PolicyDirector/lib/liburafauthn.so

v

Linux:

/opt/PolicyDirector/lib/liburafauthn.so

v

Windows:

install_dir\bin\urafauthn.dll

Example

for

Linux:

passwd-uraf

=

../opt/PolicyDirector/lib/liburafauthn.so

cert-uraf

=

fully_qualified_path

Location

of

the

library

to

use

for

certificate

authentication.

This

stanza

entry

is

required

when

you

use

a

URAF

registry

as

the

user

registry.

Default

values:

v

AIX:

/opt/PolicyDirector/lib/liburafcertauthn.a

v

HP:

/opt/PolicyDirector/lib/liburafcertauthn.sl

v

Solaris:

/opt/PolicyDirector/lib/liburafauthn.so

v

Linux:

/opt/PolicyDirector/lib/liburafcertauthn.so

v

Windows:

install_dir\bin\urafcertauthn.dll

Example

for

Solaris:

cert-uraf

=

../opt/PolicyDirector/lib/liburafauthn.so

278

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

passwd-ldap=fully_qualified_path

Location

of

the

library

to

use

for

LDAP

password

authentication.

This

stanza

entry

is

required

when

you

use

LDAP

as

the

user

registry.

Default

values:

v

AIX:

/opt/PolicyDirector/lib/libldapauthn.a

v

HP:

/opt/PolicyDirector/lib/libldapauthn.sl

v

Solaris:

/opt/PolicyDirector/lib/libldapauthn.so

v

Linux:

/opt/PolicyDirector/lib/libldapauthn.so

v

Windows:

install_dir\bin\ldapauthn.dll

Example

for

AIX:

passwd-ldap

=

../opt/PolicyDirector/lib/libldapauthn.a

cert-ldap

=

fully_qualified_path

Location

of

the

library

to

use

for

LDAP

certificate

authentication.

This

stanza

entry

is

required

when

you

use

LDAP

as

the

user

registry.

Default

values:

v

AIX:

/opt/PolicyDirector/lib/libcertauthn.a

v

HP:

/opt/PolicyDirector/lib/libcertauthn.sl

v

Solaris:

/opt/PolicyDirector/lib/libcertauthn.so

v

Linux:

/opt/PolicyDirector/lib/libcertauthn.so

v

Windows:

install_dirbin\certauthn.dll

Example

for

Windows:

passwd-ldap

=

C:\pd\bin\certauthn.dll

&

-cfgfile

[C:/pd/etc/ivacld.conf]

Appendix

D.

Authorization

API

client

configuration

file

279

[aznapi-configuration]

stanza

[aznapi-configuration]

stanza

azn-app-host

=

other_hostname

Attribute

that

is

used

to

customize

the

host

on

which

the

authorization

API

application

is

listening.

For

other_hostname,

you

can

provide

any

valid

Internet

host

name.

If

this

attribute

is

not

specified,

the

default

host

name

will

be

used.

By

default,

this

attribute

is

disabled.

When

disabled,

the

stanza

entry

is

commented

out

by

using

a

pound

sign

(#)

at

the

beginning

of

the

stanza

entry

in

the

configuration

file.

For

example:

#azn-app-host

=

libra

To

enable

this

value,

uncomment

the

entry

in

the

configuration

file

by

removing

the

pound

sign

(#).

Be

sure

to

include

a

host

name

value

for

the

host

on

which

the

authorization

API

application

is

listening.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example:

azn-app-host

=

libra.dallas.ibm.com

cache-refresh-interval

=

{disable|default|number_seconds}

Poll

interval

between

checks

for

updates

to

the

master

authorization

policy

database.

Note:

The

local

cache

is

rebuilt

only

if

an

update

is

detected.

Valid

values:

disable

The

interval

value

in

seconds

is

not

set.

default

The

default

value

of

600

seconds

is

used.

number_seconds

The

exact

time

interval

that

you

set

by

specifying

the

number

of

seconds.

The

minimum

value

is

0

seconds.

Tivoli

Access

Manager

does

not

impose

a

maximum

other

than

the

maximum

value

allowed

by

the

memory

allocated

for

an

unsigned

integer.

This

number

is

platform-specific,

but

typically

is

136

years.

This

stanza

entry

is

optional.

Default

value:

default

Example:

cache-refresh-interval

=

500

cred-attribute-entitlement-services

=

name_of_entitlement_service

280

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

A

list

of

authorization

API

entitlement

service

IDs

that

are

queried

by

the

azn_id_get_creds()

interface

to

compile

a

list

of

attributes

to

be

added

to

the

user

credential

while

the

credential

is

being

built.

Each

service

ID

is

queried

in

the

order

of

declaration

here

and

the

attribute

returned

in

the

entitlements

parameter

are

inserted

into

the

credential

attribute

list

of

each

principal

built

with

the

azn_id_get_creds()

call.

This

stanza

entry

is

optional.

There

is

no

default

value.

For

example:

cred-attribute-entitlement-services

=

myEntSvcID

cred-attribute-entitlement-services

=

myOtherEntSvcID

For

more

information,

see

“Credential

attributes

entitlement

service”

on

page

112.

db-file

=

fully_qualified_path

Name

and

location

of

the

resource

manager

database

cache

file.

This

value

must

be

specified,

and

each

server

provides

its

own

value.

The

fully_qualified_path

value

represents

an

alphanumeric

string.

This

stanza

entry

is

required

if

logaudit

=

yes.

There

is

no

default

value.

Example

for

Windows:

db-file

=

C:\pd\db\ivacld.db

dynamic-adi-entitlement-services

=

entitlements_service_ID

A

list

of

configured

authorization

API

entitlement

service

IDs

that

will

be

queried

by

the

authorization

rules

engine

when

missing

ADI

is

detected

during

an

authorization

rule

evaluation.

Entitlement

services

listed

here

must

adhere

to

the

input

and

output

specifications

for

a

dynamic

ADI

retrieval

service.

For

more

information

on

dynamic

ADI,

see

“Dynamic

ADI

retrieval

services”

on

page

110.

When

ADI

is

found

to

be

missing

during

a

rule

evaluation,

each

service

in

this

list

is

queried

in

the

order

defined

in

this

entry.

These

entries

must

refer

to

existing

entitlement

services

that

were

loaded

by

using

service

entries

in

the

entitlement

service

configuration

stanza

or

in

an

initialization

attribute.

This

stanza

entry

is

optional.

There

is

no

default

value.

For

example:

dynamic-adi-entitlement-services

=

bank_A_ADI

dynamic-adi-entitlement-services

=

bank_B_ADI

input-adi-xml-prolog

=

string

Appendix

D.

Authorization

API

client

configuration

file

281

The

prolog

to

be

added

to

the

top

of

the

XML

document

that

is

created

using

the

Access

Decision

Information

(ADI)

needed

to

evaluate

a

boolean

authorization

rule.

When

this

entry

is

not

specified,

the

default

XML

prolog

is:

<?xml

version=’1.0’

encoding=’UTF-8’?>

Use

caution

when

changing

this

setting.

For

more

information,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

This

stanza

entry

is

optional.

There

is

no

default

value.

For

example:

input-adi-xml-prolog

=

<?xml

version=’1.0’

encoding=’UTF-8’?>

listen-flags

=

{enable|disable}

Indication

of

whether

to

turn

on

or

off

the

reception

of

policy

cache

update

notifications.

Valid

values:

enable

Activates

the

notification

listener.

disable

Deactivates

the

notification

listener.

This

stanza

entry

is

optional.

Default

value:

disable

Example:

listen-flags

=

enable

logcfg

=

category:{stdout|stderr|file|pipe|remote}[

[parameter=value

]

[,parameter=value]...]

282

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Specifies

event

logging

for

the

specified

category.

For

authorization

API

clients,

the

categories

are:

v

azn

Authorization

events

v

authn

Credentials

acquisition

authentication.

Note:

Additional

categories

are

used

by

resource

managers

such

as

Tivoli

Access

ManagerWebSEAL.

Event

logging

supports

a

number

of

output

destination

types:

{stdout|stderr|file|pipe|remote}

Auditing

typically

is

configured

to

use

the

file

type.

Each

event

logging

type

supports

a

number

of

optional

parameter

=

value

options.

For

more

information

about

output

destination

types

and

optional

parameter

=

value

settings,

see

the

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

This

stanza

entry

is

optional.

Multiple

entries

are

supported.

There

is

no

default

value.

Example

entries:

logcfg

=

audit.azn:file

path=audit.log,flush_interval=20,log_id=audit_log

logcfg

=

audit.authn:file

log_id=audit_log

mode

=

{local|remote}

Specifies

the

authorization

API

client

mode.

This

stanza

entry

is

set

by

svrsslcfg

during

configuration

and

should

not

be

changed

by

the

administrator.

The

value

local

means

that

the

resource

manager

(authorization

API

client)

uses

a

local

policy

cache.

The

value

remote

means

that

the

resource

manager

(authorization

API

client)

uses

a

remote

Tivoli

Access

Manager

policy

cache

maintained

by

the

authorization

server.

This

stanza

entry

is

required.

Default

value:

local

Example:

mode

=

local

permission-info-returned

=

{

attribute

attribute

....

)

Appendix

D.

Authorization

API

client

configuration

file

283

The

set

of

attributes

that

the

caller

wants

to

receive

from

the

azn_decision_access_allowed_ext()

function

in

the

permission_info

attribute

list.

When

an

attribute

name

is

added

to

this

list,

the

attribute

is

allowed

to

be

returned

as

permission

information

if

it

is

applicable

to

the

current

decision

call.

Attributes

can

be

defined

by

users,

for

example,

by

setting

an

attribute

on

an

ACL.

The

string

constants

in

the

following

list

are

recognized

by

the

authorization

engine

and

equate

to

their

corresponding

permission

information

constants

in

ogauthzn.h.

Note:

For

a

description

of

each

string

constant

listed

below,

see

“Permission

information

attributes”

on

page

263.

v

azn_acl_ext_attr_loc

v

azn_dynadi_target_url

v

azn_perminfo_all_attrs

v

azn_perminfo_auditlevel_ulong

v

azn_perminfo_dynadi_redirect_url

v

azn_perminfo_fail_reason

v

azn_perminfo_qop

v

azn_perminfo_qop_ulong

v

azn_perminfo_reason_rule_failed

v

azn_perminfo_rules_adi_request

v

azn_perminfo_stepup_level

v

azn_perminfo_warningmode_ulong

v

azn_perminfo_warmingmodepermitted_ulong

v

azn_pop_ext_attr_loc

v

azn_rule_ext_attr_loc

This

stanza

entry

is

optional.

There

are

no

default

values

(attributes).

Example:

permission-info-returned

=

azn_perminfo_qop

azn_perminfo_qop_ulong

Example

with

a

user

defined

attribute

my_attribute:

permission-info-returned

=

azn_perminfo_qop_ulong

my_attribute

policy-cache-size

=

number_of_entries

Size

of

the

in-memory

policy

cache.

The

cache

consists

of

policy

and

the

relationships

between

policy

and

resources.

The

knowledge

that

a

resource

has

no

directly

associated

policy

is

also

cached.

A

larger

cache

will

potentially

improve

the

application

performance

but

use

additional

memory

as

well.

The

maximum

cache

size

should

be

relative

to

the

number

of

policy

objects

defined

and

the

number

of

resources

protected

and

the

available

memory.

A

reasonable

algorithm

to

begin

with

is:

(number

of

policy

objects

*

3)

+

(number

of

protected

resources

*

3)

This

stanza

entry

is

optional.

There

is

no

default

value.

The

suggested

default

value

is

32768.

For

example:

policy-cache-size

=

32768

resource-manager-provided-adi

=

adi_prefix

284

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

A

list

of

string

prefixes

that

identify

Access

Decision

Information

(ADI)

to

be

supplied

by

the

resource

manager

(authorization

API

client).

When

a

prefix

is

declared

here,

the

authorization

engine

is

told

that

it

needs

to

get

ADI

with

that

prefix.

When

ADI

with

the

specified

prefix

is

not

available

in

the

credential

or

as

application

context

passed

in

with

the

access

decision

call,

the

engine

fails

the

authorization

request.

The

engine

then

requests

that

the

resource

manager

retry

the

request

and

provide

the

required

data

in

the

application

context

passed

in

with

the

next

access

decision

call.

This

stanza

entry

is

optional.

There

is

no

default

value.

For

example:

resource-manager-provided-adi

=

bank_A_

resource-manager-provided-adi

=

bank_B_

xsl-stylesheet-prolog

=

xml_declaration

The

prolog

to

be

added

to

the

top

of

the

XSL

stylesheet

that

is

created

using

the

XSL

text

that

defines

a

boolean

authorization

rule.

When

not

specified,

the

default

XSL

stylesheet

prolog

is:

!<--

Required

for

XSLT

language

-->

<?xml

version="1.0"

encoding=’UTF-8’?>

<xsl:stylesheet

xmlns:xsl=

"http://www.w3.org/1999/XSL/Transform"

version="1.0">

!<--

Required

to

constrain

output

of

rule

evaluation

-->

<xsl:output

method="text"

omit-xml-declaration="yes"

encoding=’UTF-8’

indent="no"

/>

!<--

Need

this

to

ensure

default

text

node

printing

is

off

-->

<xsl:template

match="text()"></xsl:template>

Use

caution

when

changing

this

setting.

For

more

information,

see

IBM

Tivoli

Access

Manager

Base

Administration

Guide.

This

stanza

entry

is

optional.

There

is

no

default

value.

For

example:

xsl-stylesheet-prolog

=

<?xml

version="1.0"

encoding=’UTF-8’?>

<xsl:stylesheet

xmlns:xsl=

"http://www.w3.org/1999/XSL/Transform"

version="1.0"><xsl:output

method="text"

omit-xml-declaration="yes"

encoding=’UTF-8’

indent="no"

/><xsl:template

match="text()">

</xsl:template>

Appendix

D.

Authorization

API

client

configuration

file

285

[aznapi-admin-services]

stanza

[aznapi-admin-services]

stanza

service-id

=

{short_name|path_to_dll}

[-pobj

protected_object_hierarchy_name

]

[&

params]

Defines

the

authorization

API

service

for

functions

that

enable

a

plug-in

to

obtain

the

contents

of

a

defined

portion

of

the

protected

object

hierarchy,

or

to

enable

a

plug-in

to

define

application-specific

administration

tasks

that

also

return

commands

that

perform

those

tasks.

Each

stanza

entry

defines

different

types

of

authorization

API

services,

and

each

entry

is

the

same

format

where:

service-id

Developer-specified

identification

(ID)

of

the

administration

service.

An

authorization

API

application

can

register

more

than

one

administration

service

plug-in,

but

each

must

have

a

unique

service

ID.

{short_name|path_to_dll}

The

path

to

the

dynamic

link

library

(DLL)

that

contains

the

service

executable

code.

If

the

DLL

is

located

in

a

directory

that

is

normally

searched

by

the

system

for

DLLs

(for

example,

/usr/lib

on

UNIX

platforms

and

%PATH%

on

Windows

NT),

you

do

not

need

to

specify

the

full

path

to

the

DLL,

only

the

DLL

name.

If

you

want

a

platform-independent

DLL

name,

so

it

can

be

loaded

on

any

supported

Tivoli

Access

Manager

platform,

provide

a

short

form

library

name.

The

short

name

is

prepended

and

appended

with

known

library

prefixes

and

suffixes

for

each

platform

and

each

possibility

is

searched

for

in

turn.

For

example,

using

a

short

form

library

name

of

azn_ent_user,

the

following

names

are

automatically

searched

for

on

each

platform:

Windows

azn_ent_user.dll

AIX:

libazn_ent_user.so,

libazn_ent_user.a

Solaris:

libazn_ent_user.so

HP/UX:

libazn_ent_user.sl

protected_object_hierarchy_name

The

protected

object

hierarchy

name

is

an

optional

parameter.

This

parameter

refers

to

either

the

name

of

a

protected

object

space

(hierarchy)

or

simply

to

a

protected

object.

Protected

object

hierarchy

names

must

be

unique

for

each

administration

service

plug-in

within

the

scope

of

an

authorization

API

application.

Multiple

authorization

API

application

instances,

however,

can

register

to

service

the

same

protected

object

hierarchy

names,

which

provides

failover

support

for

administration

of

an

object

space

in

the

event

that

a

particular

authorization

API

application

server

fails.

params

Optionally,

the

external

authorization

service

can

be

passed

additional

initialization

information

in

the

form

of

arguments.

The

arguments

must

be

preceded

by

the

ampersand

(for

example,

&

-server

fred).

The

authorization

service

does

not

process

the

characters

after

the

ampersand

&.

It

passes

these

characters

directly

to

the

administration

service

plug-in.

The

service

definition

is

discussed

in

more

detail

in

the

“Implementing

a

service

plug-in”

on

page

81.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example:

AZN_ADMIN_SVC_TRACE

=

pdtraceadmin

286

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[aznapi-cred-modification-services]

stanza

[aznapi-cred-modification-services]

stanza

service-id

=

short_name|path_to_dll

[

&

params

...

]

Defines

the

authorization

API

service

for

the

credentials

attribute

list

modification

service.

Each

stanza

entry

defines

different

types

of

authorization

API

service,

and

each

entry

is

the

same

format

where:

service-id

Developer-specified

identification

(ID)

of

the

credential

modification

service.

The

service

ID

string

must

be

unique.

{short_name|path_to_dll}

The

path

to

the

dynamic

link

library

(DLL)

that

contains

the

service

executable

code.

If

the

DLL

is

located

in

a

directory

that

is

normally

searched

by

the

system

for

DLLs

(for

example,

/usr/lib

on

UNIX

platforms

and

%PATH%

on

Windows

NT),

you

do

not

need

to

specify

the

full

path

to

the

DLL,

only

the

DLL

name.

If

you

want

a

platform-independent

DLL

name,

so

it

can

be

loaded

on

any

supported

Tivoli

Access

Manager

platform,

provide

a

short

form

library

name.

The

short

name

is

prepended

and

appended

with

known

library

prefixes

and

suffixes

for

each

platform

and

each

possibility

is

searched

for

in

turn.

For

example,

using

a

short

form

library

name

of

azn_ent_user,

the

following

names

are

automatically

searched

for

on

each

platform:

Windows:

azn_ent_user.dll

AIX:

libazn_ent_user.so,

libazn_ent_user.a

Solaris:

libazn_ent_user.so

HP/UX:

libazn_ent_user.sl

params

Optionally,

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

Parameters

are

considered

to

be

all

data

following

the

ampersand

(&)

symbol

in

the

string.

The

service

definition

is

discussed

in

more

detail

in

“Implementing

a

service

plug-in”

on

page

81.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example:

AZN_MOD_SVC_RAD_2AB

=

azn_mod_rad

Appendix

D.

Authorization

API

client

configuration

file

287

[aznapi-entitlement-services]

stanza

[aznapi-entitlement-services]

stanza

service-id

=

{short_name|path_to_dll}

[

&

params

...

]

Defines

the

authorization

API

service

for

the

protected

objects

entitlement

service.

Each

stanza

entry

defines

different

types

of

authorization

API

service,

and

each

entry

is

of

the

same

format

where:

service-id

Developer-specified

identification

(ID)

by

which

the

service

can

be

identified

by

the

authorization

API

client.

The

service

ID

string

must

be

unique.

{short_name|path_to_dll}

The

path

to

the

dynamic

link

library

(DLL)

that

contains

the

service

executable

code.

If

the

DLL

is

located

in

a

directory

that

is

normally

searched

by

the

system

for

DLLs

(for

example,

/usr/lib

on

UNIX

platforms

and

%PATH%

on

Windows

NT),

you

do

not

need

to

specify

the

full

path

to

the

DLL,

only

the

DLL

name.

If

you

want

a

platform-independent

DLL

name,

so

it

can

be

loaded

on

any

supported

Tivoli

Access

Manager

platform,

provide

a

short

form

library

name.

The

short

name

is

prepended

and

appended

with

known

library

prefixes

and

suffixes

for

each

platform

and

each

possibility

is

searched

for

in

turn.

For

example,

using

a

short

form

library

name

of

azn_ent_user,

the

following

names

are

automatically

searched

for

on

each

platform:

Windows:

azn_ent_user.dll

AIX:

libazn_ent_user.so,

libazn_ent_user.a

Solaris:

libazn_ent_user.so

HP/UX:

libazn_ent_user.sl

params

Optionally,

you

can

specify

one

or

more

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

Parameters

are

considered

to

be

all

the

data

following

the

ampersand

(&)

symbol

in

the

string.

The

service

definition

is

discussed

in

more

detail

in

“Implementing

a

service

plug-in”

on

page

81.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example:

AZN_ENT_EXT_ATTR

=

azn_ent_ext_attr

288

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[aznapi-external-authzn-services]

stanza

[aznapi-external-authzn-services]

stanza

policy-trigger

=

{short_name|path_to_dll}

[

&

params

...

]

Defines

the

authorization

API

service

for

external

authorization

service

definitions

that

force

authorization

decisions

to

be

made

based

on

application-specific

criteria.

Each

stanza

entry

defines

different

types

of

authorization

API

service,

and

each

entry

is

the

same

format

where:

policy-trigger

The

policy

trigger

is

the

means

by

which

the

external

authorization

service

is

invoked

by

the

authorization

engine.

It

is

one

of

either

a

service

ID

or

an

access

control

list

(ACL)

action

string.

For

example,

it

can

be

my_service_1

or

Trx.

If

the

service

is

defined

with

a

service

ID,

the

service

ID

will

be

used

as

an

extended

attribute

on

a

POP

policy

that

triggers

the

external

authorization

service

whenever

an

object

has

this

POP

attached

to

it.

If

the

service

is

defined

using

an

ACL

action

string,

the

service

will

be

invoked

whenever

this

ACL

action

mask

is

requested

as

part

of

an

authorization

decision.

The

policy-trigger

can

be

any

string

that

is

recognized

as

a

valid

key

name.

The

policy-trigger

string

is

case

sensitive

for

action

set

definitions

because

the

actions

themselves

are

case

sensitive.

However,

the

policy-trigger

is

not

case

sensitive

if

the

trigger

is

a

POP

attribute.

{short_name|path_to_dll}

The

path

to

the

dynamic

link

library

(DLL)

that

contains

the

service

executable

code.

If

the

DLL

is

located

in

a

directory

that

is

normally

searched

by

the

system

for

DLLs

(for

example,

/usr/lib

on

UNIX

platforms

and

%PATH%

on

Windows

NT),

you

do

not

need

to

specify

the

full

path

to

the

DLL,

only

the

DLL

name.

If

you

want

a

platform-independent

DLL

name,

so

it

can

be

loaded

on

any

supported

Tivoli

Access

Manager

platform,

provide

a

short

form

library

name.

The

short

name

is

prepended

and

appended

with

known

library

prefixes

and

suffixes

for

each

platform

and

each

possibility

is

searched

for

in

turn.

For

example,

using

a

short

form

library

name

of

azn_ent_user,

the

following

names

are

automatically

searched

for

on

each

platform:

Windows:

azn_ent_user.dll

AIX:

libazn_ent_user.so,

libazn_ent_user.a

Solaris:

libazn_ent_user.so

HP/UX:

libazn_ent_user.sl

[-weight

number]

A

weight

that

is

assigned

in

the

access

decision

process

to

the

particular

external

authorization

service.

The

weight

parameter

is

an

unsigned

size_t

value

and

is

optional.

The

value

signifies

the

weight

that

any

decision

returned

by

this

external

authorization

service

should

be

given

in

the

entire

decision

process.

The

default

value

is

101.

params

Optionally,

the

external

authorization

service

can

be

passed

additional

initialization

information

in

the

form

of

arguments.

The

arguments

must

be

preceded

by

the

ampersand

(for

example,

&

-server

fred).

The

service

definition

is

discussed

in

more

detail

in

“Implementing

a

service

plug-in”

on

page

81.

This

stanza

entry

is

optional.

There

is

no

default

value.

Appendix

D.

Authorization

API

client

configuration

file

289

[aznapi-pac-services]

stanza

[aznapi-pac-services]

stanza

service-id

=

{short_name|path_to_dll}

[

&

params

...

]

Defines

the

authorization

API

service

for

the

Tivoli

Access

Manager

privilege

attribute

certificate

(PAC)

encoding

service.

Each

stanza

entry

defines

different

types

of

authorization

API

service,

and

each

entry

is

the

same

format

where:

service-id

Developer-specified

identification

(ID)

of

the

PAC

service

that

produces

the

PAC.

The

service

ID

string

must

be

unique.

{short_name|path_to_dll}

The

path

to

the

dynamic

link

library

(DLL)

that

contains

the

service

executable

code.

If

the

DLL

is

located

in

a

directory

that

is

normally

searched

by

the

system

for

DLLs

(for

example,

/usr/lib

on

UNIX

platforms

and

%PATH%

on

Windows

NT),

you

do

not

need

to

specify

the

full

path

to

the

DLL,

only

the

DLL

name.

If

you

want

a

platform-independent

DLL

name,

so

it

can

be

loaded

on

any

supported

Tivoli

Access

Manager

platform,

provide

a

short

form

library

name.

The

short

name

is

prepended

and

appended

with

known

library

prefixes

and

suffixes

for

each

platform

and

each

possibility

is

searched

for

in

turn.

For

example,

using

a

short

form

library

name

of

azn_ent_user,

the

following

names

are

automatically

searched

for

on

each

platform:

Windows:

azn_ent_user.dll

AIX:

libazn_ent_user.so,

libazn_ent_user.a

Solaris:

libazn_ent_user.so

HP/UX:

libazn_ent_user.sl

params

Optionally,

you

can

specify

parameters

to

pass

to

the

service

when

it

is

initialized

by

the

authorization

API.

Parameters

are

considered

to

be

all

data

following

the

ampersand

(&)

symbol

in

the

string.

The

service

definition

is

discussed

in

more

detail

in

“Implementing

a

service

plug-in”

on

page

81.

This

stanza

entry

is

optional.

There

is

no

default

value.

290

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[ldap]

stanza

[ldap]

stanza

authn-timeout

=

number_of_seconds

Number

of

seconds

allowed

for

authentication

operations

before

the

LDAP

server

is

considered

to

be

down.

A

value

of

zero

(0)

means

there

is

no

timeout.

This

stanza

entry

is

optional.

There

is

no

default

value:

Example:

authn-timeout

=

0

auth-using-compare

=

{yes|true|no|false}

Choice

of

whether

ldap_compare(

)

will

be

used

instead

of

the

ldap_bind(

)

call

to

verify

the

password

and

authenticate

the

user.

For

those

LDAP

servers

that

allow

it,

a

compare

operation

might

perform

faster

than

a

bind

operation.

The

value

for

each

server

can

be

different,

depending

on

how

the

server

was

configured.

This

option

changes

the

method

used

by

these

authorization

API

calls:

v

azn_util_client_authenticate(

)

v

azn_util_password_authenticate(

)

Valid

values:

yes|true

A

compare

operation

will

be

used

to

authenticate

LDAP

users

instead

of

a

bind

operation.

no|false

A

bind

operation

will

be

used

to

authenticate

LDAP

users

instead

of

a

compare

operation.

Anything

other

than

yes|true

will

be

interpreted

as

no|false,

including

a

blank

value.

This

stanza

entry

is

optional.

Default

value:

yes|true

Example:

auth-using-compare

=

true

bind-dn

=

LDAP_dn

LDAP

user

distinguished

name

(DN)

that

is

used

when

binding

(signing

on)

to

the

LDAP

server.

The

LDAP_dn

value

is

created,

based

on

the

server

name

that

was

specified

with

the

-n

server_name

flag

and

the

local

host

of

the

machine.

Use

the

svrsslcfg

utility

to

set

the

LDAP_dn

value.

This

stanza

entry

is

required

when

the

configured

user

registry

is

LDAP.

There

is

no

default

value.

Example:

bind-dn

=

cn=ivacld/libra,cn=SecurityDaemons,secAuthority=Default

bind-pwd

=

LDAP_password

Appendix

D.

Authorization

API

client

configuration

file

291

Password

for

the

LDAP

user

distinguished

name

identified

in

bind-dn

=

dn

key

value

pair.

The

LDAP_password

value

is

created

based

on

the

password

specified

by

using

the

-S

password

flag.

Use

the

svrsslcfg

utility

to

set

the

LDAP_password

value.

This

stanza

entry

is

required

when

the

configured

user

registry

is

LDAP.

There

is

no

default

value.

Example:

bind-pwd

=

zs77WVoLSZn1rKrL

cache-enabled

=

{yes|true|no|false}

Indication

of

whether

LDAP

client-side

caching

is

used

to

improve

performance

for

similar

LDAP

queries.

Valid

values:

yes|true

Enables

LDAP

client-side

caching.

no|false

Disables

LDAP

client-side

caching.

This

value

is

the

default

value.

Anything

other

than

yes|true

will

be

interpreted

as

no|false,

including

a

blank

value.

This

stanza

entry

is

optional.

Default

value:

no

Example:

cache-enabled

=

no

enabled

=

{yes|true|no|false}

Indication

of

whether

LDAP

is

being

used

as

the

user

registry.

Only

one

user

registry

can

be

specified

at

a

time.

Valid

values:

yes|true

Enables

LDAP

user

registry

support.

no|false

Disables

LDAP

user

registry

support

and

indicates

that

LDAP

is

not

the

user

registry

being

used.

Anything

other

than

yes|true

is

interpreted

as

no|false,

including

a

blank

value.

This

stanza

entry

is

required

when

LDAP

is

the

user

registry.

The

default

value

can

be

different,

depending

on

how

the

server

is

configured.

Example:

enabled

=

yes

host

=

host_name

292

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Host

name

of

the

LDAP

server.

Valid

values

for

host_name

include

any

valid

Internet

Protocol

(IP)

host

name.

The

host_name

value

is

taken

from

the

pd.conf

file.

The

pd.conf

file

is

created

when

the

Tivoli

Access

Manager

runtime

component

is

configured

on

the

machine.

Use

the

svrsslcfg

utility

to

set

the

host_name

value

when

the

configured

Policy

Director

user

registry

is

LDAP.

This

stanza

entry

is

required.

There

is

no

default

value.

The

value

is

taken

from

the

pd.conf

file.

Examples

of

host

names:host

=

libra

host

=

libra.dallas.ibm.com

max-search-size

=

[0|number_entries]

Limit

for

the

maximum

search

size,

specified

as

the

number

of

entries,

that

can

be

returned

from

the

LDAP

server.

The

value

for

each

server

can

be

different,

depending

on

how

the

server

was

configured.

Note:

This

value

can

also

be

limited

by

the

LDAP

server

itself.

Valid

values:

0

The

number

is

unlimited;

there

is

no

limit

to

the

maximum

search

size.

number_entries

The

maximum

number

of

entries

for

search,

specified

as

an

integer

whole

number.

WebSEAL

does

not

impose

a

limit

on

the

value

of

this

integer.

See

the

discussion

on

maximum

integer

values

in

“Guidelines

for

configuring

stanzas”

on

page

274.

This

stanza

entry

is

optional.

Default

value:

2048

Example:

max-search-size

=

2048

port

=

port_number

Non-SSL

IP

port

number

that

is

used

for

communicating

with

the

LDAP

server.

For

port_number,

use

any

valid

port

number.

A

valid

port

number

is

any

positive

number

that

is

allowed

by

TCP/IP

and

that

is

not

currently

being

used

by

another

application.

This

stanza

entry

is

required.

Default

value:

389

Example:

port

=

389

prefer-readwrite-server

=

{yes|true|no|false}

Appendix

D.

Authorization

API

client

configuration

file

293

Indication

of

whether

the

client

can

question

the

Read/Write

LDAP

server

before

querying

any

replica

Read-only

servers

that

are

configured

in

the

domain.

The

default

value

can

be

different.

For

example,

the

default

value

for

ivmgrd.conf

is

yes

while

the

default

value

for

ivacld.conf

is

no.

Valid

values:

yes|true

Enables

the

client

to

be

able

to

question

the

Read/Write

LDAP

server.

no|false

Disables

the

client.

Anything

other

than

yes|true

will

be

interpreted

as

no|false,

including

a

blank

value.

This

stanza

entry

is

optional.

The

default

value

is

server

dependent.

Example:

prefer-readwrite-server

=

no

replica

=

ldap-server,

port,

type,

pref

Definition

of

the

LDAP

user

registry

replicas

in

the

domain

where:

v

ldap_server

is

the

network

name

of

the

server

v

port

is

the

port

number

for

the

LDAP

server.

A

valid

port

number

is

any

positive

number

that

is

allowed

by

TCP/IP

and

that

is

not

currently

being

used

by

another

application.

v

type

is

one

of

readonly

or

readwrite

v

preference

is

a

number

from

1

to

10

(10

is

the

highest

preference)

This

stanza

entry

is

optional.

Default

value

is

that

no

replicas

are

specified.

Example

of

one

replica

specified

and

two

replicas

commented

out:

replica

=

freddy,390,readonly,1

#replica

=

barney,391,readwrite,2

#replica

=

benny,392,readwrite,3

search-timeout

=

number_of_seconds

Number

of

seconds

allowed

for

authentication

operations

before

the

LDAP

server

is

considered

to

be

down.

A

value

of

zero

(0)

means

there

is

no

timeout.

This

stanza

entry

is

optional.

There

is

no

default

value:

Example:

search-timeout

=

0

ssl-enabled

=

{yes|true|no|false}

294

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Indication

of

whether

to

enable

SSL

communication

with

the

LDAP

server.

The

value

for

each

server

can

be

different,

depending

on

how

the

server

was

configured.

Valid

values:

yes|true

Enables

SSL

communication.

no|false

Disables

SSL

communication.

Anything

other

than

yes|true

will

be

interpreted

as

no|false,

including

a

blank

value,

and

SSL

will

be

automatically

configured.

This

stanza

entry

is

optional.

The

default

value

is

server

dependent.

Example:

ssl-enabled

=

yes

ssl-keyfile

=

ldap-ssl-key-filename

SSL

key

file

name

and

location

containing

the

LDAP

server

certificate.

Use

the

SSL

key

file

to

handle

certificates

that

are

used

in

LDAP

communication.

The

file

type

can

be

anything

but

the

extension

is

usually

.kdb.

This

stanza

entry

is

required

only

when

ssl-enabled

=

yes.

Default

value

is

server

dependent.

Example

for

UNIX:

ssl-keyfile

=

/opt/PolicyDirector/keytab/ivmgrd.kdb

ssl-keyfile-dn

=

keyLabel

Key

label

of

the

client

personal

certificate

within

the

SSL

key

file.

This

key

label

is

used

to

identify

the

client

certificate

that

is

presented

to

the

LDAP

server.

This

stanza

entry

is

required

when

the

LDAP

server

is

configured

to

perform

client

authentication.

There

is

no

default

value.

Example:

ssl-keyfile-dn

=

"PD_LDAP"

ssl-keyfile-pwd

=

ldap-ssl-keyfile-password

Password

to

access

the

SSL

key

file.

Note:

The

password

associated

with

the

default

SSL

keyfile

is

gsk4ikm.

This

stanza

entry

is

required

only

if

ssl-enabled

=

yes.

There

is

no

default

value.

Example:

ssl-keyfile-pwd

=

mysslpwd

ssl-port

=

port_number

SSL

IP

port

that

is

used

to

connect

to

the

LDAP

server.

For

port_number,

use

any

valid

port

number.

A

valid

port

number

is

any

positive

number

that

is

allowed

by

TCP/IP

and

that

is

not

currently

being

used

by

another

application.

This

stanza

entry

is

required

only

if

ssl-enabled

=

yes.

Default

value:

636

Example:

ssl-port

=

636

timeout

=

number_of_seconds

Appendix

D.

Authorization

API

client

configuration

file

295

Number

of

seconds

allowed

for

authentication

or

search

operations

before

the

LDAP

server

is

considered

to

be

down.

A

value

of

zero

(0)

means

there

is

no

timeout.

This

stanza

entry

is

optional.

There

is

no

default

value:

Example:

timeout

=

0

296

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[manager]

stanza

[manager]

stanza

management-domain

=

{default|domain_name

Name

of

the

management

domain.

This

value

is

created

and

set

by

svrsslcfg

Valid

values:

default

This

value

is

the

default

value.

domain_name

This

value

is

when

you

configure

your

own

name

for

the

domain.

The

domain_name

value

is

an

alphanumeric,

non-case

sensitive

string.

The

minimum

and

maximum

lengths

of

the

domain

name,

if

there

are

limits,

are

imposed

by

the

underlying

registry.

For

Active

Directory

the

maximum

length

is

256

alphanumeric

characters.

Valid

characters

are

the

letters

a-Z,

the

numbers

0-9,

a

period

(

.

),

an

underscore

(

_

),

a

plus

sign

(+),

a

hyphen

(

-

),

an

at

sign

(

@

),

an

ampersand

(

&

),

and

an

asterisk

(

*

).

You

cannot

use

a

space

in

the

domain

name.

This

stanza

entry

is

required.

Default

value:

Default

Example:

management-domain

=

Default

master-host

=

server_hostname

Host

name

of

the

Tivoli

Access

Manager

server.

Examples

of

valid

host

names:

v

mycomputer.city.company.com

v

mycomputer

This

stanza

entry

is

used

for

both

remote

and

local

mode.

This

stanza

entry

is

required.

There

is

no

default

value.

Example:

master-host

=

libra

master-port

=

port_number

TCP

port

on

which

the

server

is

listening

for

requests.

This

value

is

created

and

set

by

svrsslcfg

.

For

port_number,

use

any

valid

port

number.

A

valid

port

number

is

any

positive

number

that

is

allowed

by

TCP/IP

and

that

is

not

currently

being

used

by

another

application.

Use

the

default

port

number

value,

or

use

a

port

number

over

1000

that

is

currently

not

being

used.

This

stanza

entry

is

used

for

both

remote

and

local

mode.

This

stanza

entry

is

required.

Default

value:

7135

Example:

master-port

=

7135

Appendix

D.

Authorization

API

client

configuration

file

297

replica

=

hostname:port_number:preference:replica_certificate_dn

Configuration

settings

for

policy

server

replicas.

This

stanza

entry

is

used

for

remote

mode

only.

The

values

for

this

stanza

entry

are

set

by

using

the

svrsslcfg

utility

with

the

–add_replica

option.

The

values

are:

v

hostname

The

hostname

of

the

policy

server

replica.

v

port_number

The

port

on

which

to

communicate

with

the

policy

server

replica

v

preference

Integer

value

between

1

and

10,

specifying

the

priority

for

using

this

particular

replica

to

provide

authorization

decisions.

This

is

useful

when

the

domain

contains

multiple

replicas.

Replicas

are

accessed

in

order

of

their

preference

integer.

The

replica

with

the

largest

integer

value

is

accessed

first.

v

replica_certificate_DN

The

distinguished

name

used

to

access

the

replica’s

certificate.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example

(entered

as

one

continuous

line):

replica

=

\

rep1.acme.com:7135:5:cn=ivmgrd/rep1.acme.com,o=Policy

Director,C=US

298

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[meta-info]

stanza

[meta-info]

stanza

version

=

version_number

Authorization

API

version.

Expressed

as

a

decimal

equivalent

of

the

hexadecimal

value.

For

example,

the

hexadecimal

value

for

Tivoli

Access

ManagerVersion

5.1

is

0x510.

The

decimal

equivalent

is

1296.

Appendix

D.

Authorization

API

client

configuration

file

299

[ssl]

stanza

[ssl]

stanza

ssl-authn-user

=

user_name

The

user

name

that

is

used

when

the

authentication

type

is

password.

This

stanza

entry

is

optional.

There

is

no

default

value.

ssl-authn-password

=

password

The

password

for

the

user

name

that

is

used

if

the

authentication

type

is

password.

This

stanza

entry

is

optional,

but

is

required

when

ssl-authn-user

is

specified.

There

is

no

default

value.

Example:

ssl-authn-password

=

mypassw0rd

ssl-authn-type

=

certificate

Type

of

authentication.

This

value

is

created

and

the

value

is

set

by

svrsslcfg.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

certificate

Example:

ssl-authn-type

=

certificate

ssl-auto-refresh

=

{yes|no}

Indication

of

whether

automatic

refresh

of

the

SSL

certificate

and

the

key

database

file

password

occur.

Valid

values:

yes

Enables

automatic

refresh.

When

enabled,

the

certificate

and

password

are

regenerated

if

either

is

in

danger

of

expiration

(less

than

half

the

time

left).

no

Turns

off

automatic

certificate

and

password

refresh.

This

value

is

created

and

the

value

is

set

by

svrsslcfg.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

yes

Example:

ssl-auto-refresh

=

no

ssl-io-inactivity-timeout

=

{0|number_seconds}

300

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Duration

(in

seconds)

that

an

SSL

connection

waits

for

a

response

before

timing

out.

There

is

no

one

default

value

because

the

default

value

is

set

by

the

configuration

program

of

each

server.

Valid

values:

0

No

timeout.

number_seconds

The

timeout

specified

in

number

of

seconds.

There

is

no

range

limitation

for

timeout

values.

The

number

of

seconds

value

is

set

by

svrsslcfg.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value

is

server-dependent.

Example:

ssl-io-inactivity-timeout

=

90

ssl-keyfile

=

ssl-key-path

Path

location

and

file

name

of

the

local

system

of

the

SSL

key

file.

If

the

key

value

pair

does

not

exist

in

the

configuration

file,

the

application

will

fail.

The

file

extension

can

be

anything

but

it

is

usually

.kdb.

This

file

is

created

and

the

value

is

set

by

svrsslcfg.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value

for

UNIX:

opt/PolicyDirector/keytab/ivmgrd.kdb

Default

value

for

Windows:

C:\pd\keytab\ivmgrd.kdb

Example

for

UNIX:

ssl-keyfile

=

opt/PolicyDirector/keytab/ivmgrd.kdb

ssl-keyfile-label

=

label_name

Label

for

the

authorization

API

server

certificate

in

the

keyfile.

This

stanza

entry

is

required.

The

default

value

is:

PD

Server

Example:

ssl-keyfile-label

=

PD

Server

ssl-keyfile-stash

=

ssl-stash-path

Appendix

D.

Authorization

API

client

configuration

file

301

Path

location

and

file

name

of

the

SSL

password

stash

file.

The

file

extension

can

be

anything

but

it

is

usually

.sth.

The

password

is

used

to

protect

private

keys

in

the

key

file.

The

password

might

be

stored

encrypted

in

a

stash

file.

If

both

ssl-keyfile-pwd

and

ssl-keyfile-stash

are

specified,

then

the

ssl-keyfile-pwd

value

will

be

used.

This

file

is

created

and

the

value

is

set

by

svrsslcfg.

The

path

is

defined

by

the

-d

option

to

the

svrsslcfg

utility.

The

name

is

defined

by

the

-n

option

to

the

svrsslcfg

utility.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value

for

UNIX:

opt/PolicyDirector/keytab/ivmgrd.sth

Default

value

for

Windows:

C:\pd\keytab\ivmgrd.sth

Example

for

Windows:

ssl-keyfile-stash

=

C:\pd\keytab\ivmgrd.sth

ssl-listening-port

=

{0|port_number}

TCP

port

on

which

the

application

listens

for

incoming

requests

and

policy

cache

update

notifications.

Valid

values:

0

Disables

listening.

The

value

is

specified

during

configuration

by

using

the

svrsslcfg

utility.

port_number

Enables

listening

at

the

specified

port

number.

The

valid

range

for

port_number

is

any

positive

number

that

is

allowed

by

TCP/IP

and

is

not

currently

being

used

by

another

application.

This

stanza

entry

is

valid

only

with

the

following

mode

scenarios:

v

local

mode,

when

listen-flags

is

set

to

enable.

v

local

mode,

when

[aznapi-admin-services]

are

registered.

v

remote

mode,

when

[aznapi-admin-services]

are

registered.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

0

Example:

ssl-listening-port

=

7137

ssl-local-domain

=

domain_name

Local

domain

name.

This

is

the

domain

in

which

the

authorization

API

server

runs.

When

this

value

is

not

in

the

configuration

file

then

operations

that

rely

on

its

presence

will

fail.

This

value

must

conform

to

the

value

specified

when

the

server

was

configured.

This

stanza

entry

is

required.

Default

value

(none)

Example:

ssl-local-domain

=

default

ssl-maximum-worker-threads

=

number_threads

302

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Number

of

threads

that

can

be

created

by

the

authorization

API’s

internal

server

to

handle

incoming

requests.

Valid

values:

number_threads

Number

of

threads

that

can

be

specified.

The

valid

range

must

be

equal

to

1,

or

greater

than

1.

The

maximum

number

varies

because

it

is

dependent

on

available

system

resources.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

10

Example:

ssl-maximum-worker-threads

=

80

ssl-mgr-config

=

relative_pathname

Location

of

the

configuration

file

used

to

configure

the

Tivoli

Access

Manager

runtime

environment

(pd.conf).

When

specified,

values

for

master-host,

master-port,

and

master-dn

from

pd.conf

will

override

any

values

specified

in

the

application

configuration

file

(this

file).

This

value

can

be

either

a

fully

qualified

path

or

can

be

a

relative

path

name.

When

the

relative

path

name

is

used,

the

configuration

file

is

expected

to

be

located

under

the

Tivoli

Access

Manager

installation

directory.

This

stanza

entry

is

optional.

There

is

no

default

value.

Example:

ssl-mgr-config

=

./lib/pd.conf

ssl-pwd-life

=

number_days

Password

lifetime

for

the

key

database

file,

specified

in

the

number

of

days.

For

automatic

password

renewal,

the

value

for

the

lifetime

of

a

password

is

controlled

by

the

number_days

value

when

the

server

is

started.

Valid

values

for

the

number_days

is

from

1

to

7,299

days.

For

manual

password

renewal,

the

value

is

dictated

by

the

value

supplied

to

the

svrsslcfg

–chgpwd

command.

This

value

is

also

written

into

the

appropriate

configuration

file.

Note:

If

a

certificate

and

the

password

to

the

keyring

database

file

containing

that

certificate

are

both

expired,

then

the

password

must

be

refreshed

first.

The

number

of

days

value

is

created

and

the

value

is

set

by

svrsslcfg.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

183

Example:

ssl-pwd-life

=

105

ssl-v3-timeout

=

number_seconds

Appendix

D.

Authorization

API

client

configuration

file

303

Session

timeout

(in

seconds)

for

SSL

v3

connections

between

clients

and

servers.

This

timeout

value

controls

how

often

a

full

SSL

handshake

is

completed

between

Tivoli

Access

Manager

clients

and

servers.

Valid

range

of

values

for

number_seconds

is

from

10-86400

seconds,

where

86400

seconds

is

equal

to

1

day.

If

you

specify

a

number

outside

this

range,

the

default

number

will

be

used.

This

file

is

created

and

the

value

is

set

by

svrsslcfg.

The

path

is

defined

by

the

-d

option

to

the

svrsslcfg

utility.

The

name

is

defined

by

the

-n

option

to

the

svrsslcfg

utility.

Note:

Tivoli

Access

Manager

components

might

not

function

with

small

timeout

values

in

some

network

environments.

This

stanza

entry

is

required

when

SSL

is

enabled.

Default

value:

7200

Example:

ssl-v3-timeout

=

9800.

304

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[uraf-registry]

stanza

[uraf-registry]

stanza

bind-id

=

server_id

Server

administrator

or

user

login

identity

that

is

used

to

bind

(sign

on)

to

the

registry

server.

If

the

ID

belongs

to

a

user

rather

than

an

administrator,

the

user

must

have

privileges

to

update

and

modify

data

in

the

user

registry.

For

IBM

Lotus

Domino

registry,

a

Lotus

Notes

ID

file

provides

the

bind

ID

equivalent.

Note:

Only

the

server

uses

this

ID.

The

server_id

is

an

alphanumeric,

case-insensitive

string.

String

values

are

expected

to

be

characters

that

are

part

of

the

local

code

set.

The

minimum

and

maximum

lengths

of

the

ID,

if

there

are

limits,

are

imposed

by

the

underlying

registry.

For

Active

Directory

the

maximum

length

is

256

alphanumeric

characters.

This

stanza

entry

is

required

when

the

configured

registry

type

is

not

LDAP.

The

default

value

is

generated;

do

not

change

it.

Example:

bind-id

=

MySvrAdminID

bind-pwd

=

admin_password

Encoded

administrator

log-in

password

that

is

used

to

bind

(or

sign

on)

to

the

registry

server.

Additional

password

requirements

can

be

specified

for

Tivoli

Access

Manager

after

the

product

is

installed.

However,

the

initial

password

does

not

necessarily

conform

to

those

requirements.

The

admin_password

value

is

filled

in

automatically,

based

on

information

that

is

supplied

during

server

configuration.

The

password

is

an

encrypted

string.

This

stanza

entry

is

required

when

your

user

registry

is

not

LDAP.

The

default

value

is

generated;

do

not

change

it.

Example:

bind-pwd

=

MyADbindPwd

cache-lifetime

=

number_seconds

Number

of

seconds

that

the

objects

are

allowed

to

stay

in

the

cache.

Valid

values

include:

number_seconds

The

timeout

specified

in

number

of

seconds.

Use

a

number

within

the

range

of

1

to

86400.

If

cache-mode

=

enabled

and

this

stanza

entry

is

not

used,

the

default

value

of

86400

seconds

(number

of

seconds

in

one

day)

will

be

used.

For

performance

tuning,

the

longer

the

time

specified,

the

longer

the

repetitive

Read

advantage

is

held.

A

smaller

number

of

seconds

negates

the

cache

advantage

for

user-initiated

Reads.

This

stanza

entry

is

optional.

Default

value:

86400

Example:

cache-lifetime

=63200

cache-mode

={enabled|disabled}

Appendix

D.

Authorization

API

client

configuration

file

305

Mode

for

caching

that

represents

the

cache

being

either

turned

on

or

turned

off.

Valid

values

include:

enabled

Turns

the

cache

on.

You

would

enable

the

cache

mode

to

improve

the

performance

of

repetitive

Read

actions

on

a

specified

object,

such

as:

login

performance

that

is

done

more

than

once

a

day.

Performance

for

Write

actions

would

not

be

improved.

disabled

Turns

the

cache

off.

You

would

disable

the

cache

mode

for

better

security.

Caching

opens

a

small

window

for

users

to

go

from

server

to

server

in

order

to

bypass

the

maximum

number

of

failed

login

attempts.

This

value

is

the

default

value.

This

stanza

entry

is

optional.

Default

value:

enabled

Example:

cache-mode

=

enabled

cache-size

=

number_objects

object_type:cache_count

value

306

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Maximum

number

of

objects

for

a

particular

type

of

object

that

can

be

in

the

cache

at

one

time.

Or,

if

it

is

not

numeric,

it

is

a

list

of

one

or

more

object

types

and

their

cache

count

values.

If

cache-mode

=

enabled

and

this

stanza

entry

is

not

used,

the

cache

size

default

value

will

be

used.

Valid

values

include:

number_objects

Maximum

number

of

objects

must

be

a

prime

number

for

the

cache

count

values.

Range

value

is

from

3

to

a

maximum

number

that

is

logical

for

the

task

and

that

does

not

affect

performance.

Non-prime

numbers

are

automatically

rounded

up

to

the

next

higher

prime

number.

If

the

number

fails,

the

default

value

will

be

used.

object

type:cache

count

value

List

of

one

or

more

object

types

and

their

cache

count

values.

Examples:

cache-size

=user:251;group:251;resgroup:251;resource:251;

rescreds:251;

or:

cache-size

=user:251;group:251;

The

second

example

sets

the

user

and

group

cache

sizes

to

251

and

does

not

use

any

cache

for

the

others.

Performance

tuning

depends

on

how

much

memory

space

is

dedicated

to

a

cache

or

how

many

objects

you

typically

have

repetitive

Read

actions

on

(such

as

how

many

users

you

have

logging

in

a

day).

For

example,

a

setting

of

251

might

not

be

good

if

you

have

1000

users

logging

in

and

out

several

times

a

day.

However,

if

only

200

of

those

users

log

in

and

out

repetitively

during

the

day,

251

might

work

well.

This

stanza

entry

is

optional.

Default

value:

251

Example:

cache-size

=305

uraf-server-config

=

fully_qualified_path

Appendix

D.

Authorization

API

client

configuration

file

307

File

name

and

location

of

the

URAF

registry

configuration

file

for

Tivoli

Access

Manager.

The

fully_qualified_path

value

represents

an

alphanumeric,

case-insensitive

string.

String

values

are

expected

to

be

characters

that

are

part

of

the

local

code

set.

The

set

of

characters

permitted

in

a

file

name

can

be

determined

by

the

file

system

and

by

the

local

code

set.

For

Windows,

file

names

cannot

have

these

characters:

a

backward

slash

(\),

a

colon(:),

a

question

mark

(?),

or

double

quotation

marks

(″).

This

stanza

entry

is

required

when

the

configured

registry

type

is

not

LDAP.

UNIX

example

using

IBM

Lotus

Domino

server

and

user

registry:

Default

value

for

UNIX:

uraf-registry-config

=/opt/PolicyDirector/etc/domino.conf

Windows

example

using

Microsoft

Active

Directory

server

and

user

registry:

uraf-registry-config

=c:\Program

files

\tivoli

\Policy

Director

\etc

\activedir.conf

Windows

example

for

using

Microsoft

Active

Directory

user

registry

for

platforms

other

than

Windows

2000:

uraf-registry-config

=c:\Program

files

\tivoli

\Policy

Director

\etc\activedir_ldap.conf

308

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

[xmladi-attribute-definitions]

stanza

[xmladi-attribute-definitions]

stanza

attribute_name

=

″attribute_value″

XMLADI

attribute

definitions.

These

attribute

definitions

are

inserted

into

the

XMLADI

element

start

tag

to

enable

attributes

to

be

defined

for

the

entire

XMLADI

document

and

all

ADI

defined

therein.

The

programmatic

initialization

attribute

can

contain

multiple

attribute

values,

one

for

each

attribute

definition

to

be

added

to

the

XMLADI

element

start

tag.

The

attribute

definitions

are

in

the

format:

attribute_name

=

″attribute_value″

For

example:

xmlns:myNS

=

"http://myURI.mycompany.com"

appID

=

’"Jupiter"

-

Account

Management

Web

\

Portal

Server

#1.’

The

attribute

value

must

be

enclosed

in

either

single

or

double

quotation

marks.

The

XMLADI

element

start

tag

built

from

these

definitions

is:

<XMLADI

xmlns:myNS="http://myURI.mycompany.com"

\

appID=’"Jupiter"

-

Account

Management

Web

Portal

\

Server

#1.’>

This

stanza

entry

is

optional.

There

is

no

default

value.

Appendix

D.

Authorization

API

client

configuration

file

309

310

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

E.

User

registry

differences

The

following

user

registry

differences

are

known

to

exist

in

this

version

of

IBM

Tivoli

Access

Manager

(Tivoli

Access

Manager.)

1.

When

Tivoli

Access

Manager

is

using

either

Microsoft

Active

Directory

or

a

Lotus

Domino

server

as

its

user

registry,

only

a

single

domain

is

supported.

Use

an

LDAP

user

registry

if

you

wish

to

take

advantage

of

the

multi-domain

support

in

Tivoli

Access

Manager.

2.

Tivoli

Access

Manager

does

not

support

cross

domain

group

membership

or

universal

groups

when

using

Microsoft

Active

Directory

as

its

user

registry.

Importing

such

groups

into

Tivoli

Access

Manager

is

not

supported.

3.

When

the

Tivoli

Access

Manager

policy

server

is

using

either

Microsoft

Active

Directory

or

a

Lotus

Domino

server

as

its

user

registry,

existing

Tivoli

SecureWay

Policy

Director,

Version

3.8

clients

are

not

able

to

connect

to

the

policy

server.

Either

use

a

different

user

registry

or

upgrade

the

clients

to

Tivoli

Access

Manager.

4.

Users

created

in

a

Lotus

Domino

server

or

Microsoft

Active

Directory

user

registry

are

automatically

given

the

capability

to

own

single

signon

credentials

and

this

capability

can

not

be

removed.

When

using

an

LDAP

user

registry,

this

capability

must

be

explicitly

granted

to

a

user

and

subsequently

can

be

removed.

5.

Leading

and

trailing

blanks

in

user

names

and

group

names

are

ignored

when

using

LDAP

or

Microsoft

Active

Directory

as

the

user

registry

in

an

Tivoli

Access

Manager

secure

domain.

However,

when

using

a

Lotus

Domino

server

as

a

user

registry,

leading

and

trailing

blanks

are

significant.

To

ensure

that

processing

is

consistent

regardless

of

what

user

registry

is

being

used,

define

users

and

groups

in

the

user

registry

without

leading

or

trailing

blanks

in

their

names.

6.

The

forward

slash

character

(/)

should

be

avoided

in

user

and

group

names

defined

using

distinguished

name

strings.

The

forward

slash

character

is

treated

differently

in

different

user

registries:

Lotus

Domino

server

Users

and

groups

can

not

be

created

with

names

using

a

distinguished

name

string

containing

a

forward

slash

character.

To

avoid

the

problem,

either

do

not

use

a

forward

slash

character

or

define

the

user

without

using

the

distinguished

name

designation:

pdadmin

user

create

myuser

username/locinfo

test

test

testpwd

instead

of

using

this

one:

pdadmin

user

create

myuser

cn=username/o=locinfo

test

test

testpwd

Microsoft

Active

Directory

Users

and

groups

can

be

created

with

names

using

a

distinguished

name

string

containing

a

forward

slash

character.

However,

subsequent

operations

on

the

object

might

fail

as

some

Active

Directory

functions

interpret

the

forward

slash

character

as

a

separator

between

the

object

name

and

the

host

name.

To

avoid

the

problem,

do

not

use

a

forward

slash

character

to

define

the

user.

7.

When

using

a

multi-domain

Microsoft

Active

Directory

user

registry,

multiple

users

and

groups

can

be

defined

with

the

same

short

name

as

long

as

they

©

Copyright

IBM

Corp.

2000,2003

311

reside

in

different

domains.

However,

the

full

name

of

the

user

or

group,

including

the

domain

suffix,

must

always

be

specified

to

Tivoli

Access

Manager.

8.

When

using

iPlanet

Version

5.0

as

the

user

registry,

a

user

that

is

created,

added

to

a

group,

and

then

deleted

from

the

user

registry

retains

its

group

membership.

If

a

user

with

the

same

name

is

created

at

some

later

time,

the

new

user

automatically

inherits

the

old

group

membership

and

might

be

given

inappropriate

permissions.

It

is

strongly

recommended

that

the

user

be

removed

from

all

groups

before

the

user

is

deleted.

This

problem

does

not

occur

when

using

the

other

supported

user

registries.

9.

Attempting

to

add

a

single

duplicate

user

to

a

group

does

not

produce

an

error

when

an

LDAP

user

registry

is

being

used.

However,

an

error

is

properly

reflected

when

using

Lotus

Domino

server

or

Microsoft

Active

Directory.

10.

The

Tivoli

Access

Manager

authorization

API

provides

a

credentials

attribute

entitlements

service.

This

service

is

used

to

retrieve

user

attributes

from

a

user

registry.

When

this

service

is

used

with

an

LDAP

user

registry,

the

retrieved

attributes

can

be

either

string

or

binary

data.

However,

when

this

service

is

used

with

a

Microsoft

Active

Directory

or

Lotus

Domino

user

registry,

the

retrieved

attributes

can

be

either

string,

binary

or

integer

data.

11.

The

maximum

lengths

of

various

names

associated

with

Tivoli

Access

Manager

vary

depending

on

the

user

registry

being

used.

See

Table

7

for

a

comparison

of

the

maximum

lengths

allowed

and

the

recommended

maximum

length

to

use

to

ensure

compatibility

with

all

the

user

registries

supported

by

Tivoli

Access

Manager.

Table

7.

Maximum

lengths

for

names

based

on

user

registry

Maximum

length

of:

LDAP

Microsoft

Active

Directory

Lotus

Domino

server

Recommended

maximum

value

First

name

(LDAP

CN)

256

64

960

64

Middle

name

128

64

65535

64

Last

name

(surname)

128

64

960

64

Registry

UID

(LDAP

DN)

1024

2048

255

This

value

is

user

registry-specific

and

must

be

changed

when

changing

user

registries.

Tivoli

Access

Manager

user

identity

256

2048

-

1

-

length_of_

domain_name

200

-

4

-

length_of_

domain_name

This

value

is

user

registry-specific

and

must

be

changed

when

changing

user

registries.

User

password

unlimited

256

unlimited

256

User

description

1024

1024

1024

1024

Group

name

256

256

Group

description

1024

1024

1024

1024

312

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Table

7.

Maximum

lengths

for

names

based

on

user

registry

(continued)

Maximum

length

of:

LDAP

Microsoft

Active

Directory

Lotus

Domino

server

Recommended

maximum

value

Single

signon

resource

name

240

256

256

240

Single

signon

resource

description

1024

1024

1024

1024

Single

signon

user

ID

240

256

256

240

Single

signon

password

unlimited

256

unlimited

256

Single

signon

group

name

240

256

256

240

Single

signon

group

description

1024

1024

1024

1024

Action

name

1

1

1

1

Action

description,

action

type

unlimited

unlimited

unlimited

Object

name,

object

space

name,

ACL

name,

POP

name

unlimited

unlimited

unlimited

Object

description,

object

space

description,

ACL

description,

POP

description

unlimited

unlimited

unlimited

Even

though

some

names

can

be

of

unlimited

length,

excessive

lengths

can

result

in

policy

that

is

difficult

to

manage

and

might

result

in

poor

system

performance.

Choose

maximum

values

that

are

logical

for

your

environment.

Appendix

E.

User

registry

differences

313

314

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Appendix

F.

Notices

This

information

was

developed

for

products

and

services

offered

in

the

U.S.A.

IBM

may

not

offer

the

products,

services,

or

features

discussed

in

this

document

in

other

countries.

Consult

your

local

IBM

representative

for

information

on

the

products

and

services

currently

available

in

your

area.

Any

reference

to

an

IBM

product,

program,

or

service

is

not

intended

to

state

or

imply

that

only

that

IBM

product,

program,

or

service

may

be

used.

Any

functionally

equivalent

product,

program,

or

service

that

does

not

infringe

any

IBM

intellectual

property

right

may

be

used

instead.

However,

it

is

the

user’s

responsibility

to

evaluate

and

verify

the

operation

of

any

non-IBM

product,

program,

or

service.

IBM

may

have

patents

or

pending

patent

applications

covering

subject

matter

described

in

this

document.

The

furnishing

of

this

document

does

not

give

you

any

license

to

these

patents.

You

can

send

license

inquiries,

in

writing,

to:

IBM

Director

of

Licensing

IBM

Corporation

500

Columbus

Avenue

Thornwood,

NY

10594

U.S.A

For

license

inquiries

regarding

double-byte

(DBCS)

information,

contact

the

IBM

Intellectual

Property

Department

in

your

country

or

send

inquiries,

in

writing,

to:

IBM

World

Trade

Asia

Corporation

Licensing

2-31

Roppongi

3-chome,

Minato-ku

Tokyo

106,

Japan

The

following

paragraph

does

not

apply

to

the

United

Kingdom

or

any

other

country

where

such

provisions

are

inconsistent

with

local

law:

INTERNATIONAL

BUSINESS

MACHINES

CORPORATION

PROVIDES

THIS

PUBLICATION

“AS

IS”

WITHOUT

WARRANTY

OF

ANY

KIND,

EITHER

EXPRESS

OR

IMPLIED,

INCLUDING,

BUT

NOT

LIMITED

TO,

THE

IMPLIED

WARRANTIES

OF

NON-INFRINGEMENT,

MERCHANTABILITY

OR

FITNESS

FOR

A

PARTICULAR

PURPOSE.

Some

states

do

not

allow

disclaimer

of

express

or

implied

warranties

in

certain

transactions,

therefore,

this

statement

may

not

apply

to

you.

This

information

could

include

technical

inaccuracies

or

typographical

errors.

Changes

are

periodically

made

to

the

information

herein;

these

changes

will

be

incorporated

in

new

editions

of

the

publication.

IBM

may

make

improvements

and/or

changes

in

the

product(s)

and/or

the

program(s)

described

in

this

publication

at

any

time

without

notice.

Any

references

in

this

information

to

non-IBM

Web

sites

are

provided

for

convenience

only

and

do

not

in

any

manner

serve

as

an

endorsement

of

those

Web

sites.

The

materials

at

those

Web

sites

are

not

part

of

the

materials

for

this

IBM

product

and

use

of

those

Web

sites

is

at

your

own

risk.

IBM

may

use

or

distribute

any

of

the

information

you

supply

in

any

way

it

believes

appropriate

without

incurring

any

obligation

to

you.

©

Copyright

IBM

Corp.

2000,2003

315

Licensees

of

this

program

who

wish

to

have

information

about

it

for

the

purpose

of

enabling:

(i)

the

exchange

of

information

between

independently

created

programs

and

other

programs

(including

this

one)

and

(ii)

the

mutual

use

of

the

information

which

has

been

exchanged,

should

contact:

IBM

Corporation

2Z4A/101

11400

Burnet

Road

Austin,

TX

78758

USA

Such

information

may

be

available,

subject

to

appropriate

terms

and

conditions,

including

in

some

cases,

payment

of

a

fee.

The

licensed

program

described

in

this

information

and

all

licensed

material

available

for

it

are

provided

by

IBM

under

terms

of

the

IBM

Customer

Agreement,

IBM

International

Program

License

Agreement,

or

any

equivalent

agreement

between

us.

Any

performance

data

contained

herein

was

determined

in

a

controlled

environment.

Therefore,

the

results

obtained

in

other

operating

environments

may

vary

significantly.

Some

measurements

may

have

been

made

on

development-level

systems

and

there

is

no

guarantee

that

these

measurements

will

be

the

same

on

generally

available

systems.

Furthermore,

some

measurement

may

have

been

estimated

through

extrapolation.

Actual

results

may

vary.

Users

of

this

document

should

verify

the

applicable

data

for

their

specific

environment.

Information

concerning

non-IBM

products

was

obtained

from

the

suppliers

of

those

products,

their

published

announcements

or

other

publicly

available

sources.

IBM

has

not

tested

those

products

and

cannot

confirm

the

accuracy

of

performance,

compatibility

or

any

other

claims

related

to

non-IBM

products.

Questions

on

the

capabilities

of

non-IBM

products

should

be

addressed

to

the

suppliers

of

those

products.

All

statements

regarding

IBM’s

future

direction

or

intent

are

subject

to

change

or

withdrawal

without

notice,

and

represent

goals

and

objectives

only.

This

information

contains

examples

of

data

and

reports

used

in

daily

business

operations.

To

illustrate

them

as

completely

as

possible,

the

examples

include

the

names

of

individuals,

companies,

brands,

and

products.

All

of

these

names

are

fictitious

and

any

similarity

to

the

names

and

addresses

used

by

an

actual

business

enterprise

is

entirely

coincidental.

COPYRIGHT

LICENSE:

This

information

contains

sample

application

programs

in

source

language,

which

illustrates

programming

techniques

on

various

operating

platforms.

You

may

copy,

modify,

and

distribute

these

sample

programs

in

any

form

without

payment

to

IBM,

for

the

purposes

of

developing,

using,

marketing

or

distributing

application

programs

conforming

to

the

application

programming

interface

for

the

operating

platform

for

which

the

sample

programs

are

written.

These

examples

have

not

been

thoroughly

tested

under

all

conditions.

IBM,

therefore,

cannot

guarantee

or

imply

reliability,

serviceability,

or

function

of

these

programs.

You

may

copy,

modify,

and

distribute

these

sample

programs

in

any

form

without

payment

to

IBM

for

the

purposes

of

developing,

using,

marketing,

or

distributing

application

programs

conforming

to

IBM’s

application

programming

interfaces.

316

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Each

copy

or

any

portion

of

these

sample

programs

or

any

derivative

work,

must

include

a

copyright

notice

as

follows:

©

(your

company

name)

(year).

Portions

of

this

code

are

derived

from

IBM

Corp.

Sample

Programs.

©

Copyright

IBM

Corp.

_enter

the

year

or

years_.

All

rights

reserved.

If

you

are

viewing

this

information

softcopy,

the

photographs

and

color

illustrations

may

not

appear.

Trademarks

The

following

terms

are

trademarks

or

registered

trademarks

of

International

Business

Machines

Corporation

in

the

United

States,

other

countries,

or

both:

AIX

DB2

IBM

IBM

logo

SecureWay

Tivoli

Tivoli

logo

WebSphere

Microsoft,

Windows,

Windows

NT,

and

the

Windows

logo

are

trademarks

of

Microsoft

Corporation

in

the

United

States,

other

countries,

or

both.

Java

and

all

Java-based

trademarks

and

logos

are

trademarks

or

registered

trademarks

of

Sun

Microsystems,

Inc.

in

the

United

States

and

other

countries.

UNIX

is

a

registered

trademark

of

The

Open

Group

in

the

United

States

and

other

countries.

Other

company,

product,

and

service

names

may

be

trademarks

or

service

marks

of

others.

Appendix

F.

Notices

317

318

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Glossary

A

access

control.

In

computer

security,

the

process

of

ensuring

that

the

resources

of

a

computer

system

can

be

accessed

only

by

authorized

users

in

authorized

ways.

access

control

list

(ACL).

In

computer

security,

a

list

that

is

associated

with

an

object

that

identifies

all

the

subjects

that

can

access

the

object

and

their

access

rights.

For

example,

an

access

control

list

is

a

list

that

is

associated

with

a

file

that

identifies

the

users

who

can

access

the

file

and

identifies

the

users’

access

rights

to

that

file.

access

permission.

The

access

privilege

that

applies

to

the

entire

object.

action.

An

access

control

list

(ACL)

permission

attribute.

See

also

access

control

list.

ACL.

See

access

control

list.

administration

service.

An

authorization

API

runtime

plug-in

that

can

be

used

to

perform

administration

requests

on

a

Tivoli

Access

Manager

resource

manager

application.

The

administration

service

will

respond

to

remote

requests

from

the

pdadmin

command

to

perform

tasks,

such

as

listing

the

objects

under

a

particular

node

in

the

protected

object

tree.

Customers

may

develop

these

services

using

the

authorization

ADK.

attribute

list.

A

linked

list

that

contains

extended

information

that

is

used

to

make

authorization

decisions.

Attribute

lists

consist

of

a

set

of

name

=

value

pairs.

authentication.

(1)

In

computer

security,

verification

of

the

identity

of

a

user

or

the

user’s

eligibility

to

access

an

object.

(2)

In

computer

security,

verification

that

a

message

has

not

been

altered

or

corrupted.

(3)

In

computer

security,

a

process

that

is

used

to

verify

the

user

of

an

information

system

or

of

protected

resources.

See

also

multi-factor

authentication,

network-based

authentication,

and

step-up

authentication.

authorization.

(1)

In

computer

security,

the

right

granted

to

a

user

to

communicate

with

or

make

use

of

a

computer

system.

(2)

The

process

of

granting

a

user

either

complete

or

restricted

access

to

an

object,

resource,

or

function.

authorization

rule.

See

rule.

authorization

service

plug-in.

A

dynamically

loadable

library

(DLL

or

shared

library)

that

can

be

loaded

by

the

Tivoli

Access

Manager

authorization

API

runtime

client

at

initialization

time

in

order

to

perform

operations

that

extend

a

service

interface

within

the

Authorization

API.

The

service

interfaces

that

are

currently

available

include

Administration,

External

Authorization,

Credentials

modification,

Entitlements

and

PAC

manipulation

interfaces.

Customers

may

develop

these

services

using

the

authorization

ADK.

B

BA.

See

basic

authentication.

basic

authentication.

A

method

of

authentication

that

requires

the

user

to

enter

a

valid

user

name

and

password

before

access

to

a

secure

online

resource

is

granted.

bind.

To

relate

an

identifier

to

another

object

in

a

program;

for

example,

to

relate

an

identifier

to

a

value,

an

address

or

another

identifier,

or

to

associate

formal

parameters

and

actual

parameters.

blade.

A

component

that

provides

application-specific

services

and

components.

business

entitlement.

The

supplemental

attribute

of

a

user

credential

that

describes

the

fine-grained

conditions

that

can

be

used

in

the

authorization

of

requests

for

resources.

C

CA.

See

certificate

authority.

CDAS.

See

Cross

Domain

Authentication

Service.

CDMF.

See

Cross

Domain

Mapping

Framework.

certificate.

In

computer

security,

a

digital

document

that

binds

a

public

key

to

the

identity

of

the

certificate

owner,

thereby

enabling

the

certificate

owner

to

be

authenticated.

A

certificate

is

issued

by

a

certificate

authority.

certificate

authority

(CA).

An

organization

that

issues

certificates.

The

certificate

authority

authenticates

the

certificate

owner’s

identity

and

the

services

that

the

owner

is

authorized

to

use,

issues

new

certificates,

renews

existing

certificates,

and

revokes

certificates

belonging

to

users

who

are

no

longer

authorized

to

use

them.

CGI.

See

common

gateway

interface.

©

Copyright

IBM

Corp.

2000,2003

319

cipher.

Encrypted

data

that

is

unreadable

until

it

has

been

converted

into

plain

data

(decrypted)

with

a

key.

common

gateway

interface

(CGI).

An

Internet

standard

for

defining

scripts

that

pass

information

from

a

Web

server

to

an

application

program,

through

an

HTTP

request,

and

vice

versa.

A

CGI

script

is

a

CGI

program

that

is

written

in

a

scripting

language,

such

as

Perl.

configuration.

(1)

The

manner

in

which

the

hardware

and

software

of

an

information

processing

system

are

organized

and

interconnected.

(2)

The

machines,

devices,

and

programs

that

make

up

a

system,

subsystem,

or

network.

connection.

(1)

In

data

communication,

an

association

established

between

functional

units

for

conveying

information.

(2)

In

TCP/IP,

the

path

between

two

protocol

applications

that

provides

reliable

data

stream

delivery

service.

In

the

Internet,

a

connection

extends

from

a

TCP

application

on

one

system

to

a

TCP

application

on

another

system.

(3)

In

system

communications,

a

line

over

which

data

can

be

passed

between

two

systems

or

between

a

system

and

a

device.

container

object.

A

structural

designation

that

organizes

the

object

space

into

distinct

functional

regions.

cookie.

Information

that

a

server

stores

on

a

client

machine

and

accesses

during

subsequent

sessions.

Cookies

allow

servers

to

remember

specific

information

about

clients.

credentials.

Detailed

information,

acquired

during

authentication,

that

describes

the

user,

any

group

associations,

and

other

security-related

identity

attributes.

Credentials

can

be

used

to

perform

a

multitude

of

services,

such

as

authorization,

auditing,

and

delegation.

credentials

modification

service.

An

authorization

API

runtime

plug-in

which

can

be

used

to

modify

a

Tivoli

Access

Manager

credential.

Credentials

modification

services

developed

externally

by

customers

are

limited

to

performing

operation

to

add

and

remove

from

the

credentials

attribute

list

and

only

to

those

attributes

that

are

considered

modifiable.

cross

domain

authentication

service

(CDAS).

A

WebSEAL

service

that

provides

a

shared

library

mechanism

that

allows

you

to

substitute

the

default

WebSEAL

authentication

mechanisms

with

a

custom

process

that

returns

a

Tivoli

Access

Manager

identity

to

WebSEAL.

See

also

WebSEAL.

cross

domain

mapping

framework

(CDMF).

A

programming

interface

that

allows

a

developer

to

customize

the

mapping

of

user

identities

and

the

handling

of

user

attributes

when

WebSEAL

e-Community

SSO

function

are

used.

D

daemon.

A

program

that

runs

unattended

to

perform

continuous

or

periodic

systemwide

functions,

such

as

network

control.

Some

daemons

are

triggered

automatically

to

perform

their

task;

others

operate

periodically.

directory

schema.

The

valid

attribute

types

and

object

classes

that

can

appear

in

a

directory.

The

attribute

types

and

object

classes

define

the

syntax

of

the

attribute

values,

which

attributes

must

be

present,

and

which

attributes

may

be

present

for

the

directory.

distinguished

name

(DN).

The

name

that

uniquely

identifies

an

entry

in

a

directory.

A

distinguished

name

is

made

up

of

attribute:value

pairs,

separated

by

commas.

digital

signature.

In

e-commerce,

data

that

is

appended

to,

or

is

a

cryptographic

transformation

of,

a

data

unit

and

that

enables

the

recipient

of

the

data

unit

to

verify

the

source

and

integrity

of

the

unit

and

to

recognize

potential

forgery.

DN.

See

distinguished

name.

domain.

(1)

A

logical

grouping

of

users,

systems,

and

resources

that

share

common

services

and

usually

function

with

a

common

purpose.

(2)

That

part

of

a

computer

network

in

which

the

data

processing

resources

are

under

common

control.

See

also

domain

name.

domain

name.

In

the

Internet

suite

of

protocols,

a

name

of

a

host

system.

A

domain

name

consists

of

a

sequence

of

subnames

that

are

separated

by

a

delimiter

character.

For

example,

if

the

fully

qualified

domain

name

(FQDN)

of

a

host

system

is

as400.rchland.vnet.ibm.com,

each

of

the

following

is

a

domain

name:

as400.rchland.vnet.ibm.com,

vnet.ibm.com,

ibm.com.

E

EAS.

See

External

Authorization

Service.

encryption.

In

computer

security,

the

process

of

transforming

data

into

an

unintelligible

form

in

such

a

way

that

the

original

data

either

cannot

be

obtained

or

can

be

obtained

only

by

using

a

decryption

process.

entitlement.

A

data

structure

that

contains

externalized

security

policy

information.

Entitlements

contain

policy

data

or

capabilities

that

are

formatted

in

a

way

that

is

understandable

to

a

specific

application.

entitlement

service.

An

authorization

API

runtime

plug-in

which

can

be

used

to

return

entitlements

from

an

external

source

for

a

principal

or

set

of

conditions.

Entitlements

are

normally

application

specific

data

that

will

be

consumed

by

the

resource

manager

application

320

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

in

some

way

or

added

to

the

principal’s

credentials

for

use

further

on

in

the

authorization

process.

Customers

may

develop

these

services

using

the

authorization

ADK.

external

authorization

service.

An

authorization

API

runtime

plug-in

that

can

be

used

to

make

application

or

environment

specific

authorization

decisions

as

part

of

the

Tivoli

Access

Manager

authorization

decision

chain.

Customers

may

develop

these

services

using

the

authorization

ADK.

F

file

transfer

protocol

(FTP).

In

the

Internet

suite

of

protocols,

an

application

layer

protocol

that

uses

Transmission

Control

Protocol

(TCP)

and

Telnet

services

to

transfer

bulk-data

files

between

machines

or

hosts.

G

global

signon

(GSO).

A

flexible

single

sign-on

solution

that

enables

the

user

to

provide

alternative

user

names

and

passwords

to

the

back-end

Web

application

server.

Global

signon

grants

users

access

to

the

computing

resources

they

are

authorized

to

use

through

a

single

login.

Designed

for

large

enterprises

consisting

of

multiple

systems

and

applications

within

heterogeneous,

distributed

computing

environments,

GSO

eliminates

the

need

for

users

to

manage

multiple

user

names

and

passwords.

See

also

single

signon.

GSO.

See

global

signon.

H

host.

A

computer

that

is

connected

to

a

network

(such

as

the

Internet

or

an

SNA

network)

and

provides

an

access

point

to

that

network.

Also,

depending

on

the

environment,

the

host

may

provide

centralized

control

of

the

network.

The

host

can

be

a

client,

a

server,

or

both

a

client

and

a

server

simultaneously.

HTTP.

See

Hypertext

Transfer

Protocol.

hypertext

transfer

protocol

(HTTP).

In

the

Internet

suite

of

protocols,

the

protocol

that

is

used

to

transfer

and

display

hypertext

documents.

I

Internet

protocol

(IP).

In

the

Internet

suite

of

protocols,

a

connectionless

protocol

that

routes

data

through

a

network

or

interconnected

networks

and

acts

as

an

intermediary

between

the

higher

protocol

layers

and

the

physical

network.

Internet

suite

of

protocols.

A

set

of

protocols

developed

for

use

on

the

Internet

and

published

as

Requests

for

Comments

(RFCs)

through

the

Internet

Engineering

Task

Force

(IETF).

interprocess

communication

(IPC).

(1)

The

process

by

which

programs

communicate

data

to

each

other

and

synchronize

their

activities.

Semaphores,

signals,

and

internal

message

queues

are

common

methods

of

interprocess

communication.

(2)

A

mechanism

of

an

operating

system

that

allows

processes

to

communicate

with

each

other

within

the

same

computer

or

over

a

network.

IP.

See

Internet

Protocol.

IPC.

See

Interprocess

Communication.

J

junction.

An

HTTP

or

HTTPS

connection

between

a

front-end

WebSEAL

server

and

a

back-end

Web

application

server.

WebSEAL

uses

a

junction

to

provide

protective

services

on

behalf

of

the

back-end

server.

K

key.

In

computer

security,

a

sequence

of

symbols

that

is

used

with

a

cryptographic

algorithm

for

encrypting

or

decrypting

data.

See

private

key

and

public

key.

key

database

file.

See

key

ring.

key

file.

See

key

ring.

key

pair.

In

computer

security,

a

public

key

and

a

private

key.

When

the

key

pair

is

used

for

encryption,

the

sender

uses

the

public

key

to

encrypt

the

message,

and

the

recipient

uses

the

private

key

to

decrypt

the

message.

When

the

key

pair

is

used

for

signing,

the

signer

uses

the

private

key

to

encrypt

a

representation

of

the

message,

and

the

recipient

uses

the

public

key

to

decrypt

the

representation

of

the

message

for

signature

verification.

key

ring.

In

computer

security,

a

file

that

contains

public

keys,

private

keys,

trusted

roots,

and

certificates.

L

LDAP.

See

Lightweight

Directory

Access

Protocol.

lightweight

directory

access

protocol

(LDAP).

An

open

protocol

that

(a)

uses

TCP/IP

to

provide

access

to

directories

that

support

an

X.500

model

and

(b)

does

not

incur

the

resource

requirements

of

the

more

complex

X.500

Directory

Access

Protocol

(DAP).

Applications

that

use

LDAP

(known

as

directory-enabled

applications)

can

use

the

directory

as

a

common

data

store

and

for

retrieving

information

about

people

or

services,

such

as

e-mail

addresses,

public

keys,

or

service-specific

configuration

parameters.

LDAP

was

originally

specified

in

RFC

Glossary

321

1777.

LDAP

version

3

is

specified

in

RFC

2251,

and

the

IETF

continues

work

on

additional

standard

functions.

Some

of

the

IETF-defined

standard

schemas

for

LDAP

are

found

in

RFC

2256.

lightweight

third

party

authentication

(LTPA).

An

authentication

framework

that

allows

single

sign-on

across

a

set

of

Web

servers

that

fall

within

an

Internet

domain.

LTPA.

See

lightweight

third

party

authentication.

M

management

domain.

The

default

domain

in

which

Tivoli

Access

Manager

enforces

security

policies

for

authentication,

authorization,

and

access

control.

This

domain

is

created

when

the

policy

server

is

configured.

See

also

domain.

management

server.

Obsolete.

See

policy

server.

metadata.

Data

that

describes

the

characteristics

of

stored

data.

migration.

The

installation

of

a

new

version

or

release

of

a

program

to

replace

an

earlier

version

or

release.

multi-factor

authentication.

A

protected

object

policy

(POP)

that

forces

a

user

to

authenticate

using

two

or

more

levels

of

authentication.

For

example,

the

access

control

on

a

protected

resource

can

require

that

the

users

authenticate

with

both

user

name/password

and

user

name/token

passcode.

See

also

protected

object

policy.

multiplexing

proxy

agent

(MPA).

A

gateway

that

accommodates

multiple

client

access.

These

gateways

are

sometimes

known

as

Wireless

Access

Protocol

(WAP)

gateways

when

clients

access

a

secure

domain

using

a

WAP.

Gateways

establish

a

single

authenticated

channel

to

the

originating

server

and

tunnel

all

client

requests

and

responses

through

this

channel.

N

network-based

authentication.

A

protected

object

policy

(POP)

that

controls

access

to

objects

based

on

the

internet

protocol

(IP)

address

of

the

user.

See

also

protected

object

policy.

P

PAC.

See

privilege

attribute

certificate.

permission.

The

ability

to

access

a

protected

object,

such

as

a

file

or

directory.

The

number

and

meaning

of

permissions

for

an

object

are

defined

by

the

access

control

list

(ACL).

See

also

access

control

list.

policy.

A

set

of

rules

that

are

applied

to

managed

resources.

policy

server.

The

Tivoli

Access

Manager

server

that

maintains

the

location

information

about

other

servers

in

the

secure

domain.

polling.

The

process

by

which

databases

are

interrogated

at

regular

intervals

to

determine

if

data

needs

to

be

transmitted.

POP.

See

protected

object

policy.

portal.

An

integrated

Web

site

that

dynamically

produces

a

customized

list

of

Web

resources,

such

as

links,

content,

or

services,

available

to

a

specific

user,

based

on

the

access

permissions

for

the

particular

user.

privilege

attribute

certificate.

A

digital

document

that

contains

a

principal’s

authentication

and

authorization

attributes

and

a

principal’s

capabilities.

privilege

attribute

certificate

service.

An

authorization

API

runtime

client

plug-in

which

translates

a

PAC

of

a

predetermined

format

in

to

a

Tivoli

Access

Manager

credential,

and

vice-versa.

These

services

could

also

be

used

to

package

or

marshall

a

Tivoli

Access

Manager

credential

for

transmission

to

other

members

of

the

secure

domain.

Customers

may

develop

these

services

using

the

authorization

ADK.

See

also

privilege

attribute

certificate.

protected

object.

The

logical

representation

of

an

actual

system

resource

that

is

used

for

applying

ACLs

and

POPs

and

for

authorizing

user

access.

See

also

protected

object

policy

and

protected

object

space.

protected

object

policy

(POP).

A

type

of

security

policy

that

imposes

additional

conditions

on

the

operation

permitted

by

the

ACL

policy

to

access

a

protected

object.

It

is

the

responsibility

of

the

resource

manager

to

enforce

the

POP

conditions.

See

also

access

control

list,

protected

object,

and

protected

object

space.

protected

object

space.

The

virtual

object

representation

of

actual

system

resources

that

is

used

for

applying

ACLs

and

POPs

and

for

authorizing

user

access.

See

also

protected

object

and

protected

object

policy.

private

key.

In

computer

security,

a

key

that

is

known

only

to

its

owner.

Contrast

with

public

key.

public

key.

In

computer

security,

a

key

that

is

made

available

to

everyone.

Contrast

with

private

key.

Q

quality

of

protection.

The

level

of

data

security,

determined

by

a

combination

of

authentication,

integrity,

and

privacy

conditions.

322

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

R

registry.

The

datastore

that

contains

access

and

configuration

information

for

users,

systems,

and

software.

replica.

A

server

that

contains

a

copy

of

the

directory

or

directories

of

another

server.

Replicas

back

up

servers

in

order

to

enhance

performance

or

response

times

and

to

ensure

data

integrity.

resource

object.

The

representation

of

an

actual

network

resource,

such

as

a

service,

file,

and

program.

response

file.

A

file

that

contains

a

set

of

predefined

answers

to

questions

asked

by

a

program

and

that

is

used

instead

of

entering

those

values

one

at

a

time.

role

activation.

The

process

of

applying

the

access

permissions

to

a

role.

role

assignment.

The

process

of

assigning

a

role

to

a

user,

such

that

the

user

has

the

appropriate

access

permissions

for

the

object

defined

for

that

role.

routing

file.

An

ASCII

file

that

contains

commands

that

control

the

configuration

of

messages.

RSA

encryption.

A

system

for

public-key

cryptography

used

for

encryption

and

authentication.

It

was

invented

in

1977

by

Ron

Rivest,

Adi

Shamir,

and

Leonard

Adleman.

The

system’s

security

depends

on

the

difficulty

of

factoring

the

product

of

two

large

prime

numbers.

rule.

One

or

more

logical

statements

that

enable

the

event

server

to

recognize

relationships

among

events

(event

correlation)

and

to

execute

automated

responses

accordingly.

run

time.

The

time

period

during

which

a

computer

program

is

executing.

A

runtime

environment

is

an

execution

environment.

S

scalability.

The

ability

of

a

network

system

to

respond

to

increasing

numbers

of

users

who

access

resources.

schema.

The

set

of

statements,

expressed

in

a

data

definition

language,

that

completely

describe

the

structure

of

a

database.

In

a

relational

database,

the

schema

defines

the

tables,

the

fields

in

each

table,

and

the

relationships

between

fields

and

tables.

secure

sockets

layer

(SSL).

A

security

protocol

that

provides

communication

privacy.

SSL

enables

client/server

applications

to

communicate

in

a

way

that

is

designed

to

prevent

eavesdropping,

tampering,

and

message

forgery.

SSL

was

developed

by

Netscape

Communications

Corp.

and

RSA

Data

Security,

Inc.

security

management.

The

management

discipline

that

addresses

an

organization’s

ability

to

control

access

to

applications

and

data

that

are

critical

to

its

success.

self-registration.

The

process

by

which

a

user

can

enter

required

data

and

become

a

registered

Tivoli

Access

Manager

user,

without

the

involvement

of

an

administrator.

service.

Work

performed

by

a

server.

A

service

can

be

a

simple

request

for

data

to

be

sent

or

stored

(as

with

file

servers,

HTTP

servers,

e-mail

servers,

and

finger

servers),

or

it

can

be

more

complex

work

such

as

that

of

print

servers

or

process

servers.

silent

installation.

An

installation

that

does

not

send

messages

to

the

console

but

instead

stores

messages

and

errors

in

log

files.

Also,

a

silent

installation

can

use

response

files

for

data

input.

See

also

response

file.

single

signon

(SSO).

The

ability

of

a

user

to

logon

once

and

access

multiple

applications

without

having

to

logon

to

each

application

separately.

See

also

global

signon.

SSL.

See

Secure

Sockets

Layer.

SSO.

See

Single

Signon.

step-up

authentication.

A

protected

object

policy

(POP)

that

relies

on

a

preconfigured

hierarchy

of

authentication

levels

and

enforces

a

specific

level

of

authentication

according

to

the

policy

set

on

a

resource.

The

step-up

authentication

POP

does

not

force

the

user

to

authenticate

using

multiple

levels

of

authentication

to

access

any

given

resource

but

requires

the

user

to

authenticate

at

a

level

at

least

as

high

as

that

required

by

the

policy

protecting

a

resource.

suffix.

A

distinguished

name

that

identifies

the

top

entry

in

a

locally

held

directory

hierarchy.

Because

of

the

relative

naming

scheme

used

in

Lightweight

Directory

Access

Protocol

(LDAP),

this

suffix

applies

to

every

other

entry

within

that

directory

hierarchy.

A

directory

server

can

have

multiple

suffixes,

each

identifying

a

locally

held

directory

hierarchy.

T

token.

(1)

In

a

local

area

network,

the

symbol

of

authority

passed

successively

from

one

data

station

to

another

to

indicate

the

station

temporarily

in

control

of

the

transmission

medium.

Each

data

station

has

an

opportunity

to

acquire

and

use

the

token

to

control

the

medium.

A

token

is

a

particular

message

or

bit

pattern

that

signifies

permission

to

transmit.

(2)

In

local

area

networks

(LANs),

a

sequence

of

bits

passed

from

one

device

to

another

along

the

transmission

medium.

When

the

token

has

data

appended

to

it,

it

becomes

a

frame.

Glossary

323

trusted

root.

In

the

Secure

Sockets

Layer

(SSL),

the

public

key

and

associated

distinguished

name

of

a

certificate

authority

(CA).

U

uniform

resource

identifier

(URI).

The

character

string

used

to

identify

content

on

the

Internet,

including

the

name

of

the

resource

(a

directory

and

file

name),

the

location

of

the

resource

(the

computer

where

the

directory

and

file

name

exist),

and

how

the

resource

can

be

accessed

(the

protocol,

such

as

HTTP).

An

example

of

a

URI

is

a

uniform

resource

locator,

or

URL.

uniform

resource

locator

(URL).

A

sequence

of

characters

that

represent

information

resources

on

a

computer

or

in

a

network

such

as

the

Internet.

This

sequence

of

characters

includes

(a)

the

abbreviated

name

of

the

protocol

used

to

access

the

information

resource

and

(b)

the

information

used

by

the

protocol

to

locate

the

information

resource.

For

example,

in

the

context

of

the

Internet,

these

are

abbreviated

names

of

some

protocols

used

to

access

various

information

resources:

http,

ftp,

gopher,

telnet,

and

news;

and

this

is

the

URL

for

the

IBM

home

page:

http://www.ibm.com.

URI.

See

uniform

resource

identifier.

URL.

See

uniform

resource

locator.

user.

Any

person,

organization,

process,

device,

program,

protocol,

or

system

that

uses

a

service

provided

by

others.

user

registry.

See

registry.

V

virtual

hosting.

The

capability

of

a

Web

server

that

allows

it

to

appear

as

more

than

one

host

to

the

Internet.

W

Web

Portal

Manager

(WPM).

A

Web-based

graphical

application

used

to

manage

Tivoli

Access

Manager

Base

and

WebSEAL

security

policy

in

a

secure

domain.

An

alternative

to

the

pdadmin

command

line

interface,

this

GUI

enables

remote

administrator

access

and

enables

administrators

to

create

delegated

user

domains

and

assign

delegate

administrators

to

these

domains.

WebSEAL.

A

Tivoli

Access

Manager

blade.

WebSEAL

is

a

high

performance,

multi-threaded

Web

server

that

applies

a

security

policy

to

a

protected

object

space.

WebSEAL

can

provide

single

sign-on

solutions

and

incorporate

back-end

Web

application

server

resources

into

its

security

policy.

WPM.

See

Web

Portal

Manager.

324

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

Index

Aaccess

control

decisionsmaking

192

making

and

extending

194,

239

access

decision

function

(ADF)

2

access

enforcement

function

(AEF)

2

addingadditional

application-specific

context

60

attributes

for

LDAP

access

37

authorization

to

an

application

3

credentials

and

handle

172

name

or

buffer

value

to

attribute

list

154

name

or

value

to

attribute

list

153

additional

user

information

57

address

of

data

structure

57

ADF

(access

decision

function)

2

ADIdynamic

ADI

retrieval

46

ADI

prefix

list

45

ADK

2

administration

serviceconfiguring

127

error

codes

132

implementing

124

initializing

129

shutdown

129

supported

functions

130

administrator’s

distinguished

name

38

AEF

(access

enforcement

function)

2

AIXlibivauthzn.a

library

file

5

allocated

memory

62

AMWebARS

99

APIattribute

lists

12

authorization

decisions

13

credentials

12

error

handling

13

extensions

14

functions

12

API

functionsazn_attrlist_add_entry_buffer()

154

azn_attrlist_add_entry()

153

azn_attrlist_create()

157,

158

azn_attrlist_delete_entry_value()

161

azn_attrlist_delete_entry()

160

azn_attrlist_delete()

159

azn_attrlist_get_entry_buffer_value()

169

azn_attrlist_get_entry_string_value()

165

azn_attrlist_get_entry_type()

167

azn_attrlist_get_names()

170

azn_attrlist_name_get_num()

171

azn_creds_combine()

172

azn_creds_create()

175

azn_creds_delete()

176

azn_creds_for_subject()

178

azn_creds_get_attrlist_for_subject()

181

azn_creds_get_pac()

183,

234

azn_creds_modify()

185,

236

azn_creds_num_of_subjects()

188

azn_decision_access_allowed_ext()

194

API

functions

(continued)azn_decision_access_allowed()

192

azn_error_major()

200

azn_error_minor_get_string()

202

azn_error_minor()

201

azn_id_get_creds()

203

azn_initialize()

207

azn_pac_get_creds()

210,

247

azn_release_buffer()

212

azn_release_strings()

215

azn_shutdown()

216

azn_svc_decision_access_allowed_ext()

239

azn_util_password_authenticate()

219

Application

Development

Kit

(ADK)

2

applicationsbuilding

7

building

an

attribute

list

60

deploying

with

the

authorization

API

9

determining

user’s

authorization

credentials

56

array

of

stringsmemory,

releasing

62

storage,

freeing

215

assigninghandle

for

an

empty

attribute

list

157,

158

handle

to

empty

credentials

structure

175

user

credentials

to

a

credentials

handle

60

attribute

definitionsXMLADI

46

attribute

list

functions

12

attribute

listsadding

name

or

buffer

value

154

adding

name

or

value

153

building

for

additional

application

information

60

creating

18

creating

and

assigning

a

handle

157,

158

deleting

19,

159,

160,

161

getting

an

attribute

entry

value

type

19

getting

an

attribute

name

19

getting

the

number

of

values

19

getting

values

19

obtaining

a

credential

64

releasing

memory

62

setting

an

entry

18

Attribute

Retrieval

Service

99

attribute

type

167

auditidentifier

182

user

information

user_info

57

auditingconfiguring

49

authenticated

user

identity

55

authenticationidentity,

user

56

information

57,

219

mechanism

55

authentication-mechanisms

stanza

278

authority,

authorization

56

authorizationauthority

56

credentials

56,

57,

58

decisions

13,

59,

61

©

Copyright

IBM

Corp.

2000,2003

325

authorization

APIbuffer

57

building

applications

7

changing

the

credential’s

contents

64

character

strings

14

converting

credentials

to

a

transportable

format

63

converting

credentials

to

the

native

format

63

creating

a

chain

of

credentials

63

deploying

applications

9

determining

the

number

of

credentials

in

a

chain

64

handling

credentials

63

initializing

207

introducing

2

obtaining

a

credential

from

a

chain

64

obtaining

credential

from

a

chain

64

setting

code

set

206

shutting

down

62

specifying

cache

mode

type

26

tasks

9

authorization

rulesADI

prefix

45

initializing

44

XMLADI

input

document

44

XSL

rule

document

44

authorization

serverspecifying

cache

mode

type

26

authorization

servicecode

set

206

initializing

207

minor

error

codes

6

minor

errors

21

starting

51

submitting

requests

to

2

authorization

service

dispatcher

77

azn_admin_get_object()

224

azn_admin_get_objectlist()

226

azn_admin_get_tasklist()

228

azn_admin_perform_task()

231

azn_attrlist_add_entry_buffer()

60

azn_attrlist_add_entry()

60

azn_attrlist_create()

60,

66

azn_attrlist_delete()

159

azn_attrlist_get_entry_buffer_value()

162,

169

azn_attrlist_get_entry_string_value()

165

azn_attrlist_get_names()

170

azn_attrlist_get_type()

167

azn_attrlist_h_t

18,

61

azn_attrlist_name_get_num()

171

azn_buffer_desc

14

azn_buffer_t

14

AZN_C_AUDIT_ID

182

AZN_C_EMPTY_BUFFER

14

AZN_C_INITIATOR_INDEX

64,

66,

178,

181

AZN_C_NO_BUFFER

14

AZN_C_NOT_PERMITTED

61,

192,

194,

240

AZN_C_PERMITTED

61,

192,

194,

239

AZN_C_VERSION

51

azn_creds_combine()

64,

172

azn_creds_create()

62,

64,

175

azn_creds_delete()

176

azn_creds_for_subject()

64,

178

azn_creds_get_attrlist_for_subject()

66,

181

azn_creds_get_pac()

63,

183

azn_creds_h_t

20,

62,

63

azn_creds_modify()

65,

185

azn_creds_num_of_subjects()

64,

188

azn_decision_access_allowed_ext()

61,

194

azn_decision_access_allowed()

59,

61,

192

azn_error_get_string()

21

azn_error_major()

200

azn_error_minor_get_string()

202

azn_error_minor()

201

azn_id_get_creds()

57,

60,

63,

203

azn_init_set_code_set()

206

azn_init_ssl_local_domain

28

azn_initialize()

207

azn_operation_read

59

azn_operation_traverse

59

azn_pac_get_creds()

210

azn_release_buffer()

212

azn_release_pobj()

62

azn_release_string()

14,

214

azn_release_strings()

14,

215

AZN_S_

INVALID_MOD_FUNCTION

186,

238

AZN_S_ATTR_INVALID_INDEX

163

AZN_S_ATTR_INVALID_INTEGER_REF

188

AZN_S_ATTR_VALUE_NOT_BUFFER_TYPE

163,

169

AZN_S_ATTR_VALUE_NOT_STRING_TYPE

166

AZN_S_COMPLETE

21

AZN_S_DOMAIN_CONFLICT

204

AZN_S_FAILURE

21

AZN_S_INVALID_ADDED_CREDS_HDL

173

AZN_S_INVALID_APP_CONTEXT_HDL

196,

241

AZN_S_INVALID_ATTR_NAME

153,

162,

169

AZN_S_INVALID_ATTRLIST_HDL

153,

162,

169

AZN_S_INVALID_AUTHORITY

204

AZN_S_INVALID_BUFFER

154

AZN_S_INVALID_BUFFER_REF

162,

169,

212

AZN_S_INVALID_COMB_CREDS_HDL

173

AZN_S_INVALID_CREDS_HDL

173,

176,

177,

179,

184,

193,

235

AZN_S_INVALID_INTEGER_REF

171

AZN_S_INVALID_MECHANISM

204

AZN_S_INVALID_MECHANISM_INFO

204

AZN_S_INVALID_NEW_CREDS_HDL

179,

204,

211,

248

AZN_S_INVALID_OPERATION

193

AZN_S_INVALID_PAC

211,

248

AZN_S_INVALID_PAC_SVC

184,

211,

235,

248

AZN_S_INVALID_PERMISSION_REF

193

AZN_S_INVALID_PROTECTED_RESOURCE

193

AZN_S_INVALID_STRING_REF

214,

215

AZN_S_INVALID_STRING_VALUE

153

AZN_S_INVALID_SUBJECT_INDEX

179

AZN_S_U_PASSWORD_ACCT_DISABLED

220

AZN_S_UNIMPLEMENTED_FUNCTION

179,

211,

248

azn_service_initialize()

244

azn_service_shutdown()

249

azn_shutdown()

51,

216

azn_status_t

21

azn_string_t

14,

18,

56

azn_svc_creds_get_pac()

234

azn_svc_creds_modify()

236

azn_svc_decision_access_allowed_ext()

239

azn_svc_pac_get_creds()

247

azn_util_password_authenticate()

55,

219

aznapi.conf

configuration

file

291

aznutils.h

5,

21

Bbackwards

compatibility

70

deprecated

API

elements

70

Version

3.9

69

Version

4.1

69

326

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

binary

compatibility

70

browser

information

57

buffer

14

declaration

14

empty

14

buffer

attribute

value

162

buffersdeclaration

57

introduction

to

14

none

14

release

of

memory

62

storage,

freeing

212

buildingapplications

7

attribute

lists

60

Ccache

modes

26

chain

of

credentials

63,

188

changingcontents

of

a

credential

64

existing

credential

185,

236

character

strings

14

cleaning

up

62,

216

combining

credentials

and

handle

172

components

ofADK

5

Tivoli

Access

Manager

5

configuration

file

83

aznapi.conf

291

configuringauthorization

API

26

secure

domain

4

contents

of

the

credential

64

convertingcredentials

to

a

transportable

format

63

creatingattribute

lists

18

chain

of

credentials

63

empty

credentials

structure

175

new

attribute

lists

25,

60

privilege

attribute

certificates

183

valid

empty

attribute

list

157,

158

credential

attributes

entitlement

service

100

credentials

12

changing

185,

236

changing

the

credential’s

contents

64

combining

with

a

handle

172

converting

to

a

transportable

format

63

converting

to

the

native

format

63

creating

a

chain

of

credentials

63

creating

and

assigning

a

handle

175

deleting

176

determining

number

of

credentials

64

extracting

individual

credentials

178

handle

60

invoking

a

privilege

attribute

certificate

service

183

making

access

control

decisions

192

making

extended

access

control

decisions

194,

239

obtaining

attribute

list

from

a

credential

65

obtaining

for

user

authorization

56,

57

obtaining

from

a

chain

of

credentials

64

returning

handle

to

new

PAC

credentials

210,

247

returning

in

a

chain

188

returning

information

from

181

user

authorization

57

creds_attrlist

66

custom-protected

object

60

Ddata

type

structureazn_attrlist_h_t

18

azn_buffer_t

14

azn_status_t

21

azn_string_t

14

decisionauthorization

61

decision,

authorization

61

decisionsaccess

control

192,

194,

239

authorization

13

definingsecurity

policy

3

deletingattribute

list

19,

159

attribute

list

entry

160

attribute

list

value

161

credentials

176

deployingapplications

9

applications

into

secure

domain

4

deprecated

API

elements

70

deprecated

DCE

authentication

72

determiningauthorization

credentials

for

a

user

57

identity

for

a

user

56

number

of

credentials

in

a

credentials

chain

64

disablingnotification

listener

28

refreshes

of

local

authorization

policy

database

27

distinguished

name

38

dynADI

retrieval

110

dynamic

ADI

retrieval

46

dynamic

ADI

retrieval

entitlement

services

110

Eempty

credentials

chain

175

enablingnotification

listener

28

entitlement

serviceauthorizing

a

caller

108

configuring

106

dynamic

ADI

retrieval

46

error

codes

109

implementing

103

initializing

106

shut

down

106

entitlement

service

plug-insample

code

93

error

codesaznutils.h

6,

21

ogauthzn.h

6,

21

pdb*msg.h

6,

21

error

handling

13,

21

example

ofassigning

user

identity

information

58

attribute

list

initialization

data

30

declaring

a

buffer

57

extendingAPI

function

standard

14

Index

327

extending

(continued)function

for

obtaining

an

access

decision

61

extensions,

API

14

external

authorization

servicearchitecture

139

authorization

decision

146

configuring

143

error

codes

147

implementing

138

initializing

145

policy

triggers

140

shutdown

145

weightings

142

extracting

individual

credentials

178

Ffiles

aznutils.h

5,

21

ogauthzn.h

6,

21

pdb*msg.h

21

formatcredentials,

transportable

63

freeingarray

of

strings

storage

215

buffer

storage

212

string

storage

214

Ggetting

attribute

list

name

19

attribute

type

167

entry

string

value

165

entry

value

type

19

handle

for

a

specified

identity

203

name

attributes

170

number

of

attribute

entries

171

number

of

values

for

attribute

list

name

19

value

attributes

19

Hhandle

172,

175,

176,

203

credentials

20,

60

handling

credentials

63

header

filesaznutils.h

5

ogauthzn.h

5

host

interfaceslistening

on

50

host

name,

LDAP

server

37

IIBM

Directory

user

registrySee

LDAP

server

identities,

user

56

implementation

modes

2

initialization

13

initializingauthorization

rules

44

authorization

service

207

code

set

206

data

207

initializing

(continued)invalid

data

208

initiator

3

interfacesauthorization

API

manual

pages

151

International

Organization

for

Standardization

(ISO)

2

IP

address

57

ISO

(International

Organization

for

Standardization)

2

ivacld-servers

54

Kkey

file,

SSL

38

key

label,

SSL

39

LLDAP

administrator’s

distinguished

name

38

administrator’s

password

38

key

file

password

39

port

number

37

server

host

name

37

server

key

label

39

SSL

key

file

38

ldap

stanza

280,

291

lengthdata

structure

57

local

cache

mode

2,

26

local

domain

28

logging

inusing

username

and

password

pair

219

Mmajor

errors

6,

21,

200

makingaccess

control

decisions

192

extended

access

control

decisions

194,

239

manager

stanza

297

manual

pagessummary

151

mappingrequested

resource

to

protected

object

60

user

operation

to

a

permission

59

memorycredential

structure

20

release

62

minor

errors

6,

21,

201

mod_info

64

mod_svc_id

65

modelocal

cache

2

remote

cache

2

modes,

specifying

26

modifyingcontents

of

a

credential

64

existing

credential

185,

236

multiple

domains

28

Nname

value

170

notification

listener

26

328

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

number

ofbytes

in

the

data

14

individual

credentials

in

a

chain

188

seconds

before

refreshing

27

value

attributes

in

the

entry

171

values

for

an

attribute

name

19

number

of

port,

LDAP

server

37

Oobtaining

authorization

decision

61

credential

from

a

chain

of

credentials

64

user

authorization

credentials

56,

57

ogauthzn.h

5,

21

Open

Group

2

output

parametersauthorization

decision

61

extended

authorization

decision

61

PPAC

(privilege

attribute

certificate)

56,

63,

183,

210,

247

pac_svc_id

63

passwordaccessing

the

SSL

key

file

39

authenticating

219

LDAP

administrator

38

pdb*msg.h

21

permission

informationenabling

return

of

47

permissions

59

persistent

authorization

policy

database

27

placing

the

data

structure

into

a

buffer

57

policy

database

replica

27

policy

triggers

140

port

numberfor

a

TCP

port

28,

37

privilege

attribute

certificate

(PAC)

56,

63,

183,

210,

247

protected

object

60

protected

object

namespace

60

providingadditional

parameters

60

Rrefreshing

local

authorization

database

27

registry,

user

7,

55

related

publications

xiii

releasingallocated

memory

20,

62

remote

cache

mode

2,

26

remote-acl-users

54

removingattribute

list

159,

160,

161

credentials

176

requested

resource

60

returningaccess

control

decision

information

195,

240

attribute

type

167

entry

string

value

165

handle

185,

236

handle

for

a

specified

identity

203

handle

to

credentials

structure

178

handle

to

new

PAC

credentials

210,

247

returning

(continued)individual

credentials

in

a

chain

188

information

from

a

credentials

structure

181

major

error

code

200

minor

error

code

201

name

attributes

170

number

of

buffer

attribute

entries

171

number

of

value

attributes

171

privilege

attribute

certificate

183

Ssecure

domain

7

Secure

Socket

Layer

(SSL)

38

security

policy

3

serverhost

name,

LDAP

37

service

definition

82

service

plug-in

82,

83

administration

service

80

architecture

76

configuring

82

credentials

modification

service

79,

101

entitlement

service

79,

97

error

codes

88

external

authorization

service

80,

102

implementing

81

initializing

82

privilege

attribute

certificate

service

79,

102

shut

down

92

supplied

implementations

96

service

plug-in

interfacesimplementing

86

setting

an

attribute

list

entry

18

shutdown

13,

62

shutting

down

13,

62,

216

Solaris

Operating

Environmentlibivauthzn.so

library

file

5

specifyingadditional

user

information

57

authorization

authority

56

type

of

cache

mode

26

user

authentication

identity

56

SSLcommunications

38

key

file

password

39

key

label

39

ssl

stanza

300

ssl-local-domain

28

standard,

The

Open

Group

2

stanzasauthentication-mechanisms

278

ldap

280,

291

manager

297

ssl

300

uraf-registry

305

startingauthorization

service

51

status

codes

21,

200,

201

storagearray

of

strings,

freeing

215

buffer,

freeing

212

string,

freeing

214

stringsfreeing

of

storage

214

release

of

memory

62

value

165

Index

329

successful

login

219

summary

ofAPI

extensions

14

API

functions

12

attribute

list

functions

12

attribute

list

tasks

18

authentication

parameters

58

authorization

API

manual

pages

151

authorization

API

tasks

9

authorization

decision

functions

13

authorization

decision

output

parameters

61

buffer

names

and

values

14

cache

modes

26

credentials

functions

12

error

code

files

21

initialization,

shutdown,

and

error

handling

functions

13

local

cache

mode

attributes

and

values

27

SSL

attributes

for

LDAP

access

38

user

identity

types

55

Ttasks,

authorization

API

9

TCP

port

number

28

types

ofadditional

user

information

57

authentication

parameters

58

cache

modes

26

user

identities

55

Uunauthenticated

user

17,

55

uraf-registry

stanza

305

useradditional

auditing

information

57

assigning

credentials

to

a

credentials

handle

60

authentication

identity

56

authorization

credentials

56,

57

mapping

the

user

operation

59

obtaining

an

identity

55

specifying

additional

information

57

unauthenticated

57

user

registrydifferences

311

LDAP

291

maximum

values

312,

313

specifying

LDAP

7

specifying

the

user

authentication

identity

56

User

Registry

Adapter

Framework

(URAF)

305

username

and

password

219

usingusername

and

password

to

log

in

219

utility

function

error

codesmajor

errors

6

minor

errors

6

Vvalue

attributesbuffer

162,

169

entry

number

171

name

170

string

165

type

167

values

14

version

number

51

Wweightings

142

Windows

NTivauthzn.dll

library

file

5

XXMLADI

44,

46

XSL

rule

document

44

330

IBM

Tivoli

Access

Manager

for

e-business:

Authorization

C

API

Developer

Reference

����

Printed

in

USA

SC32-1355-00