Tuesday, October 16, 2007

eTrust SiteMinder - Active Response

Normally we use SiteMinder generated attributes (like SM_USER, SM_USERDN...) as Response attributes. Sometimes we need customized response values in our Application’s Response. So Active Response gives the answer for this requirement. We can call it as Custom Response.


Active Response is based on the SiteMinder Authorization API which returns response values from the custom Java class. We can use C, Java and Perl scripts to write the Active Responses. This article talks about how to write an Active Response using Java to parse the Impersonators CN value from the DN.



Necessity of Active Response:

Let us consider the CSR Impersonation. It has two kinds of users namely Impersonators and Impersonatee’s. In some scenarios Impersonator performs some tasks on behalf of Impersonatee’s, For auditing purpose if we want to track that which task done by whom, then the simplest solution would be capturing the user’s CN value and store or use in your application as required. So throughout the application we need to pass both Impersonator and Impersonatee's CN value as Response.


If we specify the response attribute like CN=< %userattr = "cn" % >, it will have Impersonators CN value, (i.e. after Impersonator Authentication and before starting the Impersonation). On successful Impersonation, Impersonatee’s CN value will replace the Impersonators CN value in the SiteMinder Response. So we want to have both the Impersonator and Impersonatee’s CN value in SiteMinder Response.


To overcome this issue, we write an Active Response using JAVA to parse the Impersonators CN value from the DN value and put this CN value into the SiteMinder’s Response.



Java Code to Parse the CN value from the DN:



There is a response attribute called SM_USERIMPERSONATORNAME which returns the Impersonators DN value as SiteMinder Response.


The following java class parses the Impersonators CN value from the SiteMinder’s default attribute SM_USERIMPERSONATORNAME.


public class ParseCNFromImpersonatorDN

implements ActiveExpression

{

public int init(APIContext context)

throws Exception

{

// This example needs no initialization so just return "success"

return 0;

}

public String invoke(ActiveExpressionContext context ,String param)

throws Exception

{

int indexOfChar = -1;

if (context == null)

{

// should never happen

throw new IllegalArgumentException("ActiveResponseSample invoked without context");

}

// the User Context is required to use the methods like getProp, setProp.

UserContext theUserContext = context.getUserContext();

if (theUserContext == null)

{

//context.setErrorText("No User Context.");

return null;

}

String csrdn = theUserContext.getProp("SM_USERIMPERSONATORNAME");

if ("".equals(csrdn) csrdn == null )

{

return null;

}

indexOfChar = csrdn.indexOf("=");

if(-1 == indexOfChar)

{

//context.setErrorText("Param is not Impersonator DN "+csrdn);

return null;

}

String csrUserName = csrdn.substring(indexOfChar+1);

indexOfChar = csrUserName.indexOf(",");

if(-1 == indexOfChar)

{

//context.setErrorText("Param is not Impersonator DN "+csrUserName);

return null;

}

csrUserName = csrUserName.substring(0,indexOfChar);

return csrUserName;

}

Public int release (APIContext context)

throws Exception

{

// This example needs no shutdown so just return "success"

return 0;

}

}


Steps to implement the Active Response in SiteMinder Policy Server:



1. Compile the ParseCNFromImpersonatorDN.java file and create CNFromDN.jar file.



2. Copy the jar file CNFromDN.jar into the following Location in your SiteMinder server.:\apps\netegrity\siteminder\bin\jars


3. Add the location of CNFromDN.jar file in the JVMOptions.txt file as follows:
:/apps/netegrity/siteminder/bin/jars/CNFromDN.jar;


4. Add the CSRCN response attribute in your SiteMinder Response as below.
Create a new Response attribute as follows (either HTTP Header or Cookie):
Attribute: WebAgent-HTTP-Header-Variable

Attribute Setup:

Attribute Kind : Active Response

Variable Name : CSRCN

Library Name : smjavaapi

Function Name : JavaActiveExpression

Parameters : com.sample.ActiveResponse.ParseCNFromImpersonatorDN


5. It requires Restart of your SiteMinder Policy Server to take effect of this Active Response.


On successful Implementation of this Active Response you will have both Impersonator and Impersonatee’s CN value in your application’s response.



Abbreviation:
DN – Domain Name
CN – Common Name
CSR – Customer Service Representative

Reference:
http://www.ca.com/

3 comments:

James McGovern said...

I would like to create a program that given a userID but not a password, can automatically log a user into a siteminder protected site. This program will of course need to be trusted.

If you have any sample code that demonstrates, I would love to see it...

Ashok said...

Kindly go through the following link. It might give solution for your query.

http://ashok-iam.blogspot.com/2007/08/csr-impersonation-etrust-siteminder.html

sweetoms said...

i found this on my computer help


llkeywords version 2

# sections
[word .5, .1, .3]
default Name of

default state that all scripts

must have
state Keyword

to indicate state block or state

transition

# data types
[word .1, .3, .1]
integer Integer

type
float Floating

-point type
string String

type
key

Key type. Use NULL_KEY to test

for empty keys.
vector Vector

type of 3 floats. Used to

represent 3D motion, Euler

angles, and color.:Access

components by .x, .y. or .z
rotation Rotation

type of 4 floats. Used to

represent rotation.:Access

components by .x, .y., .z, or .w
list List of

various data types

# events
[word 0, .3, .5]
state_entry

state_entry():Triggered on any

state transition and startup
state_exit

state_exit():Triggered on any

state transition
touch_start

touch_start(integer

num_detected):Triggered by the

start of agent clicking on task
touch touch

(integer num_detected):Triggered

while agent is clicking on task
touch_end

touch_end(integer

num_detected):Triggered when

agent stops clicking on task
collision_start collision_start

(integer num_detected):Triggered

when task starts colliding with

another task
collision

collision(integer

num_detected):Triggered while

task is colliding with another

task
collision_end collision_end

(integer num_detected):Triggered

when task stops colliding with

another task
land_collision_start

land_collision_start(vector

pos):Triggered when task starts

colliding with land
land_collision

land_collision(vector

pos):Triggered when task is

colliding with land
land_collision_end

land_collision_end(vector

pos):Triggered when task stops

colliding with land
timer timer

():Result of the llSetTimerEvent

library function call.
listen listen

(integer channel, string name,

key id, string message):Result of

the llListen library function

call
sensor sensor

(integer num_detected):Result of

the llSensor library function

call
no_sensor

no_sensor():Result of the

llSensor library function call
control control

(key id, integer level, integer

edge):Result of llTakeControls

library function call
at_target

at_target(integer tnum, vector

targetpos, vector ourpos):Result

of llTarget library function call
not_at_target not_at_target

():Result of llTarget library

function call
at_rot_target at_rot_target

(integer tnum, rotation

targetrot, rotation

ourrot):Result of LLRotTarget

library function call
not_at_rot_target

not_at_rot_target():Result of

LLRotTarget library function call
money money(key

id, integer amount):Triggered

when L$ is given to task
email email

(string time, string address,

string subj, string message,

integer num_left):Triggered when

task receives email
run_time_permissions

run_time_permissions(integer

perm):Triggered when an agent

grants run time permissions to

task
attach attach

(key id):Triggered when an agent

attaches or detaches from agent
dataserver dataserver(key

queryid, string data):Triggered

when task receives asynchronous

data
moving_start moving_start

():Triggered when task begins

moving
moving_end

moving_end():Triggered when task

stops moving
on_rez on_rez

(integer start_param):Triggered

when task is rezed in from

inventory or another task
object_rez

object_rez(key id):Triggered when

task rezes in another task
link_message link_message

(integer sender_num, integer num,

string str, key id):Triggered

when task receives a link message

via LLMessageLinked library

function call
changed changed(

integer change ):Triggered

various event change the task:

(test change with

CHANGED_INVENTORY, CHANGED_COLOR,

CHANGED_SHAPE, CHANGED_SCALE,

CHANGED_TEXTURE, CHANGED_LINK,

CHANGED_ALLOWED_DROP,

CHANGED_OWNER, CHANGED_REGION,

CHANGED_TELEPORT)
remote_data remote_data

(integer event_type, key channel,

key message_id, string

sender,integer idata, string

sdata):Triggered by various XML-

RPC calls (event_type will be one

of REMOTE_DATA_CHANNEL,

REMOTE_DATA_REQUEST,

REMOTE_DATA_REPLY)
http_response http_response(key

request_id, integer status, list

metadata, string body):Triggered

when task receives a response to

one of its llHTTPRequests

# integer constants
[word .1, .1, .5]
TRUE Integer

constant for Boolean operations
FALSE Integer

constant for Boolean operations
STATUS_PHYSICS Passed in the

llSetStatus library function. If

TRUE, object moves physically
STATUS_PHANTOM Passed in the

llSetStatus library function. If

TRUE, object doesn't collide with

other objects
STATUS_ROTATE_X Passed in the

llSetStatus library function. If

FALSE, object doesn't rotate

around local X axis
STATUS_ROTATE_Y Passed in the

llSetStatus library function. If

FALSE, object doesn't rotate

around local Y axis
STATUS_ROTATE_Z Passed in the

llSetStatus library function. If

FALSE, object doesn't rotate

around local Z axis
STATUS_SANDBOX Passed in the

llSetStatus library function. If

TRUE, object can't cross region

boundaries or move more than 10

meters from its start location
STATUS_BLOCK_GRAB Passed in the

llSetStatus library function. If

TRUE, object can't be grabbed and

physically dragged
STATUS_DIE_AT_EDGE Passed in the

llSetStatus library function. If

TRUE, objects that reach the edge

of the world just die:rather than

teleporting back to the owner
STATUS_RETURN_AT_EDGE Passed in

the llSetStatus library function.

If TRUE, script rezzed objects

that reach the edge of the

world:are returned rather than

killed:STATUS_RETURN_AT_EDGE

trumps STATUS_DIE_AT_EDGE if both

are set
STATUS_CAST_SHADOWS Passed in

the llSetStatus library function.

If TRUE, object casts shadows on

other objects
AGENT Passed in

llSensor library function to look

for other Agents
ACTIVE Passed in

llSensor library function to look

for moving objects
PASSIVE Passed in

llSensor library function to look

for objects that aren't moving
SCRIPTED Passed in

llSensor library function to look

for scripted objects
CONTROL_FWD Passed to

llTakeControls library function

and used control event handler to

test for agent forward control
CONTROL_BACK Passed to

llTakeControls library function

and used control event handler to

test for agent back control
CONTROL_LEFT Passed to

llTakeControls library function

and used control event handler to

test for agent left control
CONTROL_RIGHT Passed to

llTakeControls library function

and used control event handler to

test for agent right control
CONTROL_ROT_LEFT

Passed to llTakeControls

library function and used control

event handler to test for agent

rotate left control
CONTROL_ROT_RIGHT

Passed to llTakeControls

library function and used control

event handler to test for agent

rotate right control
CONTROL_UP

Passed to

llTakeControls library function

and used control event handler to

test for agent up control
CONTROL_DOWN

Passed to llTakeControls

library function and used control

event handler to test for agent

down control
CONTROL_LBUTTON

Passed to llTakeControls

library function and used control

event handler to test for agent

left button control
CONTROL_ML_LBUTTON

Passed to llTakeControls

library function and used control

event handler to test for agent

left button control with the

agent in mouse look
PERMISSION_DEBIT

Passed to

llRequestPermissions library

function to request permission to

take L$ from agent's account
PERMISSION_TAKE_CONTROLS

Passed to llRequestPermissions

library function to request

permission to take agent's

controls
# PERMISSION_REMAP_CONTROLS

Passed to llRequestPermissions

library function to request

permission to remap agent's

controls (not implemented yet)
PERMISSION_TRIGGER_ANIMATION

Passed to llRequestPermissions

library function to request

permission to trigger animation

on agent
PERMISSION_ATTACH

Passed to

llRequestPermissions library

function to request permission to

attach/detach from agent
# PERMISSION_RELEASE_OWNERSHIP

Passed to llRequestPermissions

library function to request

permission to release ownership

(not implemented)
PERMISSION_CHANGE_LINKS

Passed to llRequestPermissions

library function to request

permission to change links
# PERMISSION_CHANGE_JOINTS

Passed to llRequestPermissions

library function to request

permission to change joints (not

implemented)
# PERMISSION_CHANGE_PERMISSIONS

Passed to llRequestPermissions

library function to request

permission to change permissions
PERMISSION_TRACK_CAMERA

Passed to llRequestPermissions

library function to request

permission to track agent's

camera
PERMISSION_CONTROL_CAMERA

Passed to llRequestPermissions

library function to request

permission to change agent's

camera

DEBUG_CHANNEL Chat

channel reserved for debug and

error messages from scripts
PUBLIC_CHANNEL Chat

channel that broadcasts to all

nearby users

AGENT_FLYING Returned

by llGetAgentInfo if the Agent is

flying
AGENT_ATTACHMENTS Returned

by llGetAgentInfo if the Agent

has attachments
AGENT_SCRIPTED Returned

by llGetAgentInfo if the Agent

has scripted attachments
AGENT_SITTING Returned

by llGetAgentInfo if the Agent is

sitting
AGENT_ON_OBJECT Returned

by llGetAgentInfo if the Agent is

sitting on an object
AGENT_MOUSELOOK Returned

by llGetAgentInfo if the Agent is

in mouselook
AGENT_AWAY

Returned by llGetAgentInfo if the

Agent is in away mode
AGENT_WALKING Returned

by llGetAgentInfo if the Agent is

walking
AGENT_IN_AIR Returned

by llGetAgentInfo if the Agent is

in the air
AGENT_TYPING Returned

by llGetAgentInfo if the Agent is

typing
AGENT_CROUCHING Returned

by llGetAgentInfo if the Agent is

crouching
AGENT_BUSY

Returned by llGetAgentInfo if the

Agent is busy
AGENT_ALWAYS_RUN Returned

by llGetAgentInfo if the Agent

has 'Always Run' enabled

PSYS_PART_FLAGS
PSYS_PART_START_COLOR
PSYS_PART_START_ALPHA
PSYS_PART_START_SCALE
PSYS_PART_END_COLOR
PSYS_PART_END_ALPHA
PSYS_PART_END_SCALE
PSYS_PART_MAX_AGE

PSYS_PART_BOUNCE_MASK
PSYS_PART_WIND_MASK
PSYS_PART_INTERP_COLOR_MASK
PSYS_PART_INTERP_SCALE_MASK
PSYS_PART_FOLLOW_SRC_MASK
PSYS_PART_FOLLOW_VELOCITY_MASK
PSYS_PART_TARGET_POS_MASK
PSYS_PART_EMISSIVE_MASK
PSYS_PART_TARGET_LINEAR_MASK

PSYS_SRC_PATTERN
PSYS_SRC_INNERANGLE

Deprecated -- Use

PSYS_SRC_ANGLE_BEGIN
PSYS_SRC_OUTERANGLE

Deprecated -- Use

PSYS_SRC_ANGLE_END
PSYS_SRC_ANGLE_BEGIN
PSYS_SRC_ANGLE_END
PSYS_SRC_BURST_RATE
PSYS_SRC_BURST_PART_COUNT
PSYS_SRC_BURST_RADIUS
PSYS_SRC_BURST_SPEED_MIN
PSYS_SRC_BURST_SPEED_MAX
PSYS_SRC_MAX_AGE
PSYS_SRC_ACCEL
PSYS_SRC_TEXTURE
PSYS_SRC_TARGET_KEY
PSYS_SRC_OMEGA

PSYS_SRC_PATTERN_DROP
PSYS_SRC_PATTERN_EXPLODE
PSYS_SRC_PATTERN_ANGLE
PSYS_SRC_PATTERN_ANGLE_CONE
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY

OBJECT_UNKNOWN_DETAIL Returned

by llGetObjectDetails when passed

an invalid object parameter type.
OBJECT_NAME

Used with llGetObjectDetails to

get an object's name.
OBJECT_DESC

Used with llGetObjectDetails to

get an object's description.
OBJECT_POS

Used with llGetObjectDetails to

get an object's position.
OBJECT_ROT

Used with llGetObjectDetails to

get an object's rotation.
OBJECT_VELOCITY

Used with llGetObjectDetails to

get an object's velocity.
OBJECT_OWNER

Used with llGetObjectDetails to

get an object's owner's key.

Will be NULL_KEY if group owned.
OBJECT_GROUP

Used with llGetObjectDetails to

get an object's group's key.
OBJECT_CREATOR

Used with llGetObjectDetails to

get an object's creator's key.

# some vehicle params
VEHICLE_TYPE_NONE
VEHICLE_TYPE_SLED
VEHICLE_TYPE_CAR
VEHICLE_TYPE_BOAT
VEHICLE_TYPE_AIRPLANE
VEHICLE_TYPE_BALLOON

VEHICLE_REFERENCE_FRAME

Rotation of vehicle axes relative

to local frame

VEHICLE_LINEAR_FRICTION_TIMESCALE

A vector of timescales

for exponential decay of linear

velocity along the three vehicle

axes
VEHICLE_ANGULAR_FRICTION_TIMESCAL

E A vector of timescales

for exponential decay of angular

velocity about the three vehicle

axes
VEHICLE_LINEAR_MOTOR_DIRECTION

The linear velocity that the

vehicle will try to achieve
VEHICLE_LINEAR_MOTOR_OFFSET

An offset from the center

of mass of the vehicle where the

linear motor is applied
VEHICLE_ANGULAR_MOTOR_DIRECTION

The angular velocity that the

vehicle will try to achieve

VEHICLE_HOVER_HEIGHT

The height the vehicle will try

to hover
VEHICLE_HOVER_EFFICIENCY A

slider between 0 (bouncy) and 1

(critically damped) hover

behavior
VEHICLE_HOVER_TIMESCALE

The period of time for the

vehicle to achieve its hover

height
VEHICLE_BUOYANCY

A slider between 0 (no anti-

gravity) and 1 (full anti-

gravity)

VEHICLE_LINEAR_DEFLECTION_EFFICIE

NCY A slider between 0 (no

deflection) and 1 (maximum

strength)
VEHICLE_LINEAR_DEFLECTION_TIMESCA

LE The exponential

timescale for the vehicle to

redirect its velocity to be along

its x-axis

VEHICLE_LINEAR_MOTOR_TIMESCALE

The exponential timescale

for the vehicle to achive its

full linear motor velocity
VEHICLE_LINEAR_MOTOR_DECAY_TIMESC

ALE The exponential timescale

for the linear motor's

effectiveness to decay toward

zero

VEHICLE_ANGULAR_DEFLECTION_EFFICI

ENCY A slider between 0 (no

deflection) and 1 (maximum

strength)
VEHICLE_ANGULAR_DEFLECTION_TIMESC

ALE The exponential timescale

for the vehicle to achieve full

angular deflection

VEHICLE_ANGULAR_MOTOR_TIMESCALE

The exponential timescale

for the vehicle to achive its

full angular motor velocity
VEHICLE_ANGULAR_MOTOR_DECAY_TIMES

CALE The exponential timescale

for the angular motor's

effectiveness to decay toward

zero

VEHICLE_VERTICAL_ATTRACTION_EFFIC

IENCY A slider between 0

(bouncy) and 1 (critically

damped) attraction of vehicle z-

axis to world z-axis (vertical)
VEHICLE_VERTICAL_ATTRACTION_TIMES

CALE The exponential timescale

for the vehicle to align its z-

axis to the world z-axis

(vertical)

VEHICLE_BANKING_EFFICIENCY A

slider between -1 (leans out of

turns), 0 (no banking), and +1

(leans into turns)
VEHICLE_BANKING_MIX

A slider betwen 0 (static

banking) and 1 (dynamic banking)
VEHICLE_BANKING_TIMESCALE

The exponential timescale for the

banking behavior to take full

effect

VEHICLE_FLAG_NO_DEFLECTION_UP

Prevents linear deflection along

world-z axis
VEHICLE_FLAG_LIMIT_ROLL_ONLY

Removes vertical attraction for

changes in vehicle pitch
VEHICLE_FLAG_HOVER_WATER_ONLY

Hover only pays attention to

water level
VEHICLE_FLAG_HOVER_TERRAIN_ONLY

Hover only pays attention to

terrain height
VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT

Hover only pays attention to

global height
VEHICLE_FLAG_HOVER_UP_ONLY

Hover only pushes up
VEHICLE_FLAG_LIMIT_MOTOR_UP

Prevents ground vehicles from

motoring into the sky
VEHICLE_FLAG_MOUSELOOK_STEER

Makes vehicle try to turn toward

mouselook direction.
VEHICLE_FLAG_MOUSELOOK_BANK

Makes vehicle try to turn toward

mouselook direction assuming

banking is enabled.
VEHICLE_FLAG_CAMERA_DECOUPLED

Causes the camera look-at axis to

NOT move when the vehicle

rotates.

CAMERA_PITCH

(-45 to 80) (Adjusts the angular

amount that the camera aims

straight ahead vs. straight down,

maintaining the same distance.

Analogous to 'incidence'.")
CAMERA_FOCUS_OFFSET

(-10 to 10) A vector that adjusts

the position of the camera focus

position relative to the subject
CAMERA_POSITION_LAG

(0.0 to 3.0) How much the camera

lags as it tries to move towards

its 'ideal' position
CAMERA_FOCUS_LAG

(0.0 to 3.0) How much the camera

lags as it tries to aim towards

the subject
CAMERA_DISTANCE

(0.5 to 10) Sets how far away the

camera wants to be from its

subject
CAMERA_BEHINDNESS_ANGLE

(0 to 180) Sets the angle in

degrees within which the camera

is not constrained by changes in

subject rotation
CAMERA_BEHINDNESS_LAG

(0.0 to 3.0) Sets how strongly

the camera is forced to stay

behind the target if outside of

behindness angle
CAMERA_POSITION_THRESHOLD

(0.0 to 4.0) Sets the radius of a

sphere around the camera's ideal

position within which it is not

affected by subject motion
CAMERA_FOCUS_THRESHOLD

(0.0 to 4.0) Sets the radius of a

sphere around the camera's

subject position within which its

focus is not affected by subject

motion
CAMERA_ACTIVE

(0 or 1) Turns on or off scripted

control of the camera
CAMERA_POSITION

Sets the position of the camera
CAMERA_FOCUS

Sets the focus (target position)

of the camera
CAMERA_POSITION_LOCKED

(0 or 1) Locks the camera

position so it will not move
CAMERA_FOCUS_LOCKED

(0 or 1) Locks the camera focus

so it will not move

INVENTORY_TEXTURE Passed to

task inventory library functions

to reference textures
INVENTORY_SOUND Passed to

task inventory library functions

to reference sounds
INVENTORY_OBJECT Passed to

task inventory library functions

to reference objects
INVENTORY_SCRIPT Passed to

task inventory library functions

to reference scripts
INVENTORY_LANDMARK Passed to

task inventory library functions

to reference landmarks
INVENTORY_CLOTHING Passed to

task inventory library functions

to reference clothing
INVENTORY_NOTECARD Passed to

task inventory library functions

to reference notecards
INVENTORY_BODYPART Passed to

task inventory library functions

to reference body parts
INVENTORY_ANIMATION Passed to

task inventory library functions

to reference animations
INVENTORY_GESTURE Passed to

task inventory library functions

to reference gestures
INVENTORY_ALL Passed to

task inventory library functions

to reference all inventory items
INVENTORY_NONE Returned

by llGetInventoryType when no

item is found.

ATTACH_CHEST Passed to

llAttachToAvatar to attach task

to chest
ATTACH_HEAD

Passed to llAttachToAvatar to

attach task to head
ATTACH_LSHOULDER Passed to

llAttachToAvatar to attach task

to left shoulder
ATTACH_RSHOULDER Passed to

llAttachToAvatar to attach task

to right shoulder
ATTACH_LHAND Passed to

llAttachToAvatar to attach task

to left hand
ATTACH_RHAND Passed to

llAttachToAvatar to attach task

to right hand
ATTACH_LFOOT Passed to

llAttachToAvatar to attach task

to left foot
ATTACH_RFOOT Passed to

llAttachToAvatar to attach task

to right foot
ATTACH_BACK

Passed to llAttachToAvatar to

attach task to back
ATTACH_PELVIS Passed to

llAttachToAvatar to attach task

to pelvis
ATTACH_MOUTH Passed to

llAttachToAvatar to attach task

to mouth
ATTACH_CHIN

Passed to llAttachToAvatar to

attach task to chin
ATTACH_LEAR

Passed to llAttachToAvatar to

attach task to left ear
ATTACH_REAR

Passed to llAttachToAvatar to

attach task to right ear
ATTACH_LEYE

Passed to llAttachToAvatar to

attach task to left eye
ATTACH_REYE

Passed to llAttachToAvatar to

attach task to right eye
ATTACH_NOSE

Passed to llAttachToAvatar to

attach task to noce
ATTACH_RUARM Passed to

llAttachToAvatar to attach task

to right upper arm
ATTACH_RLARM Passed to

llAttachToAvatar to attach task

to right lower arm
ATTACH_LUARM Passed to

llAttachToAvatar to attach task

to left upper arm
ATTACH_LLARM Passed to

llAttachToAvatar to attach task

to left lower arm
ATTACH_RHIP

Passed to llAttachToAvatar to

attach task to right hip
ATTACH_RULEG Passed to

llAttachToAvatar to attach task

to right upper leg
ATTACH_RLLEG Passed to

llAttachToAvatar to attach task

to right lower leg
ATTACH_LHIP

Passed to llAttachToAvatar to

attach task to left hip
ATTACH_LULEG Passed to

llAttachToAvatar to attach task

to left upper leg
ATTACH_LLLEG Passed to

llAttachToAvatar to attach task

to left lower leg
ATTACH_BELLY Passed to

llAttachToAvatar to attach task

to belly
ATTACH_RPEC

Passed to llAttachToAvatar to

attach task to right pectoral
ATTACH_LPEC

Passed to llAttachToAvatar to

attach task to left pectoral

LAND_LEVEL

Passed to llModifyLand to level

terrain
LAND_RAISE

Passed to llModifyLand to raise

terrain
LAND_LOWER

Passed to llModifyLand to lower

terrain
LAND_SMOOTH

Passed to llModifyLand to smooth

terrain
LAND_NOISE

Passed to llModifyLand to

randomize terrain
LAND_REVERT

Passed to llModifyLand to revert

terrain toward original state
LAND_SMALL_BRUSH Passed to

llModifyLand to modify small land

areas
LAND_MEDIUM_BRUSH Passed to

llModifyLand to modify medium

land areas
LAND_LARGE_BRUSH Passed to

llModifyLand to modify large land

areas

DATA_PAYINFO Passed to

llRequestAgentData to get payment

status of an agent
DATA_ONLINE

Passed to llRequestAgentData to

determine if agent is online
DATA_NAME

Passed to llRequestAgentData to

get full agent name
DATA_BORN

Passed to llRequestAgentData to

get born on date as a string
DATA_RATING

Passed to llRequestAgentData to

get a comma separated sting of

integer ratings
DATA_SIM_POS Passed to

llRequestSimulatorData to get a

string (cast to vector) of a

simulator's global position
DATA_SIM_STATUS Passed to

llRequestSimulatorData to get the

status of a simulator
DATA_SIM_RATING Passed to

llRequestSimulatorData to get the

rating of a simulator

PAYMENT_INFO_ON_FILE

Used with llRequestAgentData to

tell if Agent is of "Payment Info

On File" status
PAYMENT_INFO_USED Used with

llRequestAgentData to tell if

Agent is of "Payment Info Used"

status

ANIM_ON

Enable texture animation
LOOP

Loop when animating textures
REVERSE

Animate in the reverse direction
PING_PONG

Animate forward, then reverse.
SMOOTH

Textures slides, instead of

stepping
ROTATE

Rotates the texture, instead of

using frames
SCALE

Scales the texture, instead of

using frames

ALL_SIDES

Passed to various texture and

color library functions to modify

all sides

LINK_SET

Passed to various link functions

to modify all blocks in the

object
LINK_ROOT

Passed to various link functions

to modify only the root block (no

effect on single block objects)
LINK_ALL_OTHERS Passed to

various link functions to modify

all other blocks in the object
LINK_ALL_CHILDREN Passed to

various link functions to modify

all child blocks in the object
LINK_THIS

Passed to various link functions

to modify only the calling block

CHANGED_INVENTORY Parameter

of changed event handler used to

indicate change to task's

inventory
CHANGED_COLOR Parameter

of changed event handler used to

indicate change to task's color
CHANGED_SHAPE Parameter

of changed event handler used to

indicate change to task's shape

parameters
CHANGED_SCALE Parameter

of changed event handler used to

indicate change to task's scale
CHANGED_TEXTURE Parameter

of changed event handler used to

indicate change to task's texture
CHANGED_LINK Parameter

of changed event handler used to

indicate change to task's link

status
CHANGED_ALLOWED_DROP Parameter of

changed event handler used to

indicate a user dropped an

inventory item:onto task that was

allowed only by

llAllowInventoryDrop function

call
CHANGED_OWNER Parameter

of changed event handler used to

indicate change to task's owner

ONLY when an object is sold as

original or deeded to group
CHANGED_REGION Parameter

of changed event handler used to

indicate the region has changed
CHANGED_TELEPORT Parameter

of changed event handler used to

indicate teleport has completed

TYPE_INTEGER Indicates

that the list entry is holding an

integer
TYPE_FLOAT

Indicates that the list entry is

holding an float
TYPE_STRING

Indicates that the list entry is

holding an string
TYPE_KEY

Indicates that the list entry is

holding an key
TYPE_VECTOR

Indicates that the list entry is

holding an vector
TYPE_ROTATION Indicates

that the list entry is holding an

rotation
TYPE_INVALID Indicates

that this wasn't a valid list

entry


REMOTE_DATA_CHANNEL Value of

event_type in remote_event after

successful

llOpenRemoteDataChannel
REMOTE_DATA_REQUEST Value of

event_type in remote_event if

XML-RPC request is received
REMOTE_DATA_REPLY Value of

event_type in remote_event if

XML-RPC reply is received


PRIM_TYPE

Followed by PRIM_TYPE_BOX,

PRIM_TYPE_CYLINDER,

PRIM_TYPE_PRISM,

PRIM_TYPE_SPHERE,:PRIM_TYPE_TORUS

, or PRIM_TYPE_TUBE and their

arguments
PRIM_MATERIAL Sets

material to PRIM_MATERIAL_STONE,

PRIM_MATERIAL_METAL,

PRIM_MATERIAL_GLASS,:PRIM_MATERIA

L_WOOD, PRIM_MATERIAL_FLESH,

PRIM_MATERIAL_PLASTIC,:PRIM_MATER

IAL_RUBBER, or

PRIM_MATERIAL_LIGHT
PRIM_PHYSICS Sets

physics to TRUE or FALSE
PRIM_FLEXIBLE Sets

primitive flexibility to TRUE or

FALSE
PRIM_POINT_LIGHT Sets

light emission to TRUE or FALSE
PRIM_TEMP_ON_REZ Sets

temporay on rez to TRUE or FALSE
PRIM_PHANTOM Sets

phantom to TRUE or FALSE
PRIM_CAST_SHADOWS Enables

or disables shadow casting for

the primitive
PRIM_POSITION Sets

primitive position to a vector

position
PRIM_SIZE

Sets primitive size to a vector

size
PRIM_ROTATION Sets

primitive rotation
PRIM_TEXTURE Followed

by an integer face, key id,

vector repeats, vector

offsets,:and float rotation in

radians
PRIM_COLOR

Followed by an integer face,

vector color, and float alpha
PRIM_BUMP_SHINY Followed

by an integer face, one of

PRIM_SHINY_NONE,

PRIM_SHINY_LOW,:PRIM_SHINY_MEDIUM

, or PRIM_SHINY_HIGH,:and one of

PRIM_BUMP_NONE, PRIM_BUMP_BRIGHT,

PRIM_BUMP_DARK, etc
PRIM_FULLBRIGHT Followed

by an integer face, and TRUE or

FALSE
PRIM_TEXGEN

Followed by an integer face, and

one of PRIM_TEXGEN_DEFAULT or

PRIM_TEXGEN_PLANAR

PRIM_TYPE_BOX Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector top size, and

vector top shear
PRIM_TYPE_CYLINDER Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector top size, and

vector top shear
PRIM_TYPE_PRISM Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector top size, and

vector top shear
PRIM_TYPE_SPHERE Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:and vector dimple
PRIM_TYPE_TORUS Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector hole size, vector

top shear, vector advanced cut,

vector taper,:float revolutions,

float radius offset, and float

skew
PRIM_TYPE_TUBE Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector hole size, vector

top shear, vector advanced cut,

vector taper,:float revolutions,

float radius offset, and float

skew
PRIM_TYPE_RING Followed

by integer hole shape, vector

cut, float hollow, vector

twist,:vector hole size, vector

top shear, vector advanced cut,

vector taper,:float revolutions,

float radius offset, and float

skew
PRIM_TYPE_SCULPT Followed

by a key or string texture uuid.

PRIM_HOLE_DEFAULT Sets hole

type to match the prim type.
PRIM_HOLE_SQUARE Sets hole

type to square.
PRIM_HOLE_CIRCLE Sets hole

type to circle.
PRIM_HOLE_TRIANGLE Sets hole

type to triangle.

PRIM_MATERIAL_STONE

Sets material to stone
PRIM_MATERIAL_METAL

Sets material to metal
PRIM_MATERIAL_GLASS

Sets material to glass
PRIM_MATERIAL_WOOD

Sets material to wood
PRIM_MATERIAL_FLESH

Sets material to flesh
PRIM_MATERIAL_PLASTIC Sets

material to plastic
PRIM_MATERIAL_RUBBER Sets

material to rubber
PRIM_MATERIAL_LIGHT

Sets material to light

PRIM_SHINY_NONE

No shininess
PRIM_SHINY_LOW

Low shininess
PRIM_SHINY_MEDIUM

Medium shininess
PRIM_SHINY_HIGH

High shininess

PRIM_BUMP_NONE

No bump map
PRIM_BUMP_BRIGHT

Generate bump map from highlights
PRIM_BUMP_DARK

Generate bump map from lowlights
PRIM_BUMP_WOOD

Wood bump map
PRIM_BUMP_BARK

Bark bump map
PRIM_BUMP_BRICKS

Brick bump map
PRIM_BUMP_CHECKER

Checker bump map
PRIM_BUMP_CONCRETE

Concrete bump map
PRIM_BUMP_TILE

Tile bump map
PRIM_BUMP_STONE

Stone bump map
PRIM_BUMP_DISKS

Disk bump map
PRIM_BUMP_GRAVEL

Gravel bump map
PRIM_BUMP_BLOBS

Blob bump map
PRIM_BUMP_SIDING

Siding bump map
PRIM_BUMP_LARGETILE

Large tile bump map
PRIM_BUMP_STUCCO

Stucco bump map
PRIM_BUMP_SUCTION

Suction cup bump map
PRIM_BUMP_WEAVE

Weave bump map

PRIM_TEXGEN_DEFAULT

Default texture mapping
PRIM_TEXGEN_PLANAR

Planar texture mapping

PRIM_SCULPT_TYPE_SPHERE

Stitch edges in a sphere-like way
PRIM_SCULPT_TYPE_TORUS

Stitch edges in a torus-like way
PRIM_SCULPT_TYPE_PLANE

Do not stitch edges
PRIM_SCULPT_TYPE_CYLINDER

Stitch edges in a cylinder-like

way

MASK_BASE

Base permissions
MASK_OWNER

Owner permissions
MASK_GROUP

Group permissions
MASK_EVERYONE

Everyone permissions
MASK_NEXT

Next owner permissions

PERM_TRANSFER

Transfer permission
PERM_MODIFY

Modify permission
PERM_COPY

Copy permission
PERM_MOVE

Move permission
PERM_ALL

Move/Modify/Copy/Transfer

permissions

PARCEL_MEDIA_COMMAND_STOP Stop

media stream
PARCEL_MEDIA_COMMAND_PAUSE Pause

media stream
PARCEL_MEDIA_COMMAND_PLAY Play

media stream
PARCEL_MEDIA_COMMAND_LOOP Loop

media stream
PARCEL_MEDIA_COMMAND_TEXTURE Get

or set the parcel's media texture
PARCEL_MEDIA_COMMAND_URL Get or

set the parcel's media url
PARCEL_MEDIA_COMMAND_TIME Set

media stream to specific time
PARCEL_MEDIA_COMMAND_AGENT Allows

media stream commands to apply to

only one agent
PARCEL_MEDIA_COMMAND_UNLOAD

Unloads the media stream
PARCEL_MEDIA_COMMAND_AUTO_ALIGN

Auto aligns the media stream to

the texture size. May cause a

performance hit and loss of some

visual quality.

PAY_HIDE

Used with llSetPayPrice to hide a

button
PAY_DEFAULT

Used with llSetPayPrice to use

the default price for a button

LIST_STAT_MAX

Used with llListStatistics to

find the largest number in a list
LIST_STAT_MIN

Used with llListStatistics to

find the smallest number in a

list
LIST_STAT_MEAN

Used with llListStatistics to

find the mean of the numbers in a

list
LIST_STAT_MEDIAN

Used with llListStatistics to

find the median of the numbers in

a list
LIST_STAT_STD_DEV

Used with llListStatistics to

find the standard deviation of

the numbers in a list
LIST_STAT_SUM

Used with llListStatistics to

find the sum of the numbers in a

list
LIST_STAT_SUM_SQUARES Used with

llListStatistics to find the sum

of the squares of the numbers in

a list
LIST_STAT_NUM_COUNT

Used with llListStatistics to

find how many numbers are in a

list
LIST_STAT_GEOMETRIC_MEAN

Used with llListStatistics to

find the geometric mean of the

numbers in a list (all numbers

must be > 0)
LIST_STAT_RANGE

Used with llListStatistics to

find the range of the numbers in

a list

PARCEL_FLAG_ALLOW_FLY

Used with

llGetParcelFlags to find if a

parcel allows flying
PARCEL_FLAG_ALLOW_GROUP_SCRIPTS

Used with llGetParcelFlags to

find if a parcel allows group

scripts
PARCEL_FLAG_ALLOW_SCRIPTS

Used with

llGetParcelFlags to find if a

parcel allows outside scripts
PARCEL_FLAG_ALLOW_LANDMARK

Used with

llGetParcelFlags to find if a

parcel allows landmarks to be

created
PARCEL_FLAG_ALLOW_TERRAFORM

Used with

llGetParcelFlags to find if a

parcel allows anyone to terraform

the land
PARCEL_FLAG_ALLOW_DAMAGE

Used with

llGetParcelFlags to find if a

parcel allows damage
PARCEL_FLAG_ALLOW_CREATE_OBJECTS

Used with llGetParcelFlags to

find if a parcel allows anyone to

create objects
PARCEL_FLAG_USE_ACCESS_GROUP

Used with llGetParcelFlags to

find if a parcel limits access to

a group
PARCEL_FLAG_USE_ACCESS_LIST

Used with

llGetParcelFlags to find if a

parcel limits access to a list of

residents
PARCEL_FLAG_USE_BAN_LIST

Used with

llGetParcelFlags to find if a

parcel uses a ban list
PARCEL_FLAG_USE_LAND_PASS_LIST

Used with llGetParcelFlags to

find if a parcel allows passes to

be purchased
PARCEL_FLAG_LOCAL_SOUND_ONLY

Used with llGetParcelFlags to

find if a parcel restricts

spacialized sound to the parcel
PARCEL_FLAG_RESTRICT_PUSHOBJECT

Used with llGetParcelFlags to

find if a parcel restricts

llPushObject() calls
PARCEL_FLAG_LOCAL_SOUND_ONLY

Used with llGetParcelFlags to

find if a parcel restricts

spacialized sound to the parcel
PARCEL_FLAG_RESTRICT_PUSHOBJECT

Used with llGetParcelFlags to

find if a parcel restricts

llPushObject() calls
PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTR

Y Used with

llGetParcelFlags to find if a

parcel allows all objects to

enter
PARCEL_FLAG_ALLOW_GROUP_OBJECT_EN

TRY Used with

llGetParcelFlags to find if a

parcel only allows group (and

owner) objects to enter

REGION_FLAG_ALLOW_DAMAGE

Used with

llGetRegionFlags to find if a

region is entirely damage enabled
REGION_FLAG_FIXED_SUN

Used with

llGetRegionFlags to find if a

region has a fixed sun position
REGION_FLAG_BLOCK_TERRAFORM

Used with

llGetRegionFlags to find if a

region terraforming disabled
REGION_FLAG_SANDBOX

Used with

llGetRegionFlags to find if a

region is a sandbox
REGION_FLAG_DISABLE_COLLISIONS

Used with llGetRegionFlags to

find if a region has disabled

collisions
REGION_FLAG_DISABLE_PHYSICS

Used with

llGetRegionFlags to find if a

region has disabled physics
REGION_FLAG_BLOCK_FLY

Used with

llGetRegionFlags to find if a

region blocks flying
REGION_FLAG_ALLOW_DIRECT_TELEPORT

Used with llGetRegionFlags to

find if a region allows direct

teleports
REGION_FLAG_RESTRICT_PUSHOBJECT

Used with llGetRegionFlags to

find if a region restricts

llPushObject() calls

HTTP_METHOD

Used with llHTTPRequest to

specify the method, such as "GET"

or "POST"
HTTP_MIMETYPE

Used with llHTTPRequest to

specify the MIME type, defaults

to "text/plain"
HTTP_BODY_MAXLENGTH

Used with llHTTPRequest to

specify the maxium reponse body

to return
HTTP_VERIFY_CERT

Used with llHTTPRequest to

specify SSL certificate

verification
HTTP_BODY_TRUNCATED

Used with http_response to

indicate truncation point in

bytes

PARCEL_COUNT_TOTAL

Used with llGetParcelPrimCount to

get the total number of prims on

the parcel
PARCEL_COUNT_OWNER

Used with llGetParcelPrimCount to

get the number of prims on the

parcel owned by the owner
PARCEL_COUNT_GROUP

Used with llGetParcelPrimCount to

get the number of prims on the

parcel owned by the group
PARCEL_COUNT_OTHER

Used with llGetParcelPrimCount to

get the number of prims on the

parcel owned by others
PARCEL_COUNT_SELECTED Used with

llGetParcelPrimCount to get the

number of prims on the parcel

currently selected or sat upon
PARCEL_COUNT_TEMP

Used with llGetParcelPrimCount to

get the number of prims on the

parcel that are temp on rez

PARCEL_DETAILS_NAME

Used with llGetParcelDetails to

get the parcel name.
PARCEL_DETAILS_DESC

Used with llGetParcelDetails to

get the parcel description.
PARCEL_DETAILS_OWNER Used with

llGetParcelDetails to get the

parcel owner id.
PARCEL_DETAILS_GROUP Used with

llGetParcelDetails to get the

parcel group id.
PARCEL_DETAILS_AREA

Used with llGetParcelDetails to

get the parcel area in square

meters.

STRING_TRIM_HEAD

Used with llStringTrim to trim

leading spaces from a string.
STRING_TRIM_TAIL

Used with llStringTrim to trim

trailing spaces from a string.
STRING_TRIM

Used with llStringTrim to trim

both leading and trailing spaces

from a string.

# string constants
[word .1, .3, .5]
NULL_KEY

Indicates an empty key
EOF

Indicates the last line of a

notecard was read

# float constants
[word .3, .1, .5]
PI

3.1415926535897932384626433832795
TWO_PI

6.283185307179586476925286766559
PI_BY_TWO

1.5707963267948966192313216916398
DEG_TO_RAD

To convert from degrees to

radians
RAD_TO_DEG

To convert from radians to

degrees
SQRT2

1.4142135623730950488016887242097

# compound constants
[word .4, .2, .4]
ZERO_VECTOR

<0.0, 0.0, 0.0>
ZERO_ROTATION <0.0,

0.0, 0.0, 1.0>


# flow control keywords
[word 0, 0, .8]
for

for loop:for (initializer; test;

iteration):{: statements:}
do

do loop:do:{: statements:}

while (test);
while

while loop:while (test):{

statements:}
if

if statement:if (test):{

statements:}
else

else clause:if (test):{

statements:}:else:{

statements:}
jump

jump statement:jump label;:
return

Leave current function or event

handler

# flow control label
[line 0, 0, .8]
@

Label:Target for jump statement

# Comment
[one_sided_delimiter .8, .3, .15]
//

Comment:Non-functional commentary

or disabled code

# String literals
[two_sided_delimiter 0, .2, 0]
"

String literal

#functions are supplied by the

program now.