sa_request.defs   [plain text]


//
// sa_request.defs - Client-side Mach RPC interface to SecurityAgent.
//
#include <mach/std_types.defs>
#include <mach/mach_types.defs>

subsystem secagentrequest 1100;
serverprefix sa_request_server_;
userprefix sa_request_client_;

import "sa_types.h";

//
// Data types
//
type Data = array [] of char;

type AuthorizationString = c_string[*:1024];
type AuthorizationItemSetBlob = Data
	ctype: AuthorizationItemSetPtr;
type AuthorizationItemSetPtr = unsigned32;
type AuthorizationValueVectorBlob = Data
	ctype: AuthorizationValueVectorPtr;
type AuthorizationValueVectorPtr = unsigned32;
type SessionId = unsigned32;
type Choice = struct[2] of unsigned32;


#define BLOB(name,type)	name: type##Blob; name##Base: type##Ptr

//
// Staged SecurityAgent request protocol
//
simpleroutine create(requestport agentPort: mach_port_t;
	instanceReplyPort: mach_port_make_send_t; // give agent send rights for replies
	sessionId: SessionId;
	pluginId: AuthorizationString;
	mechanismId: AuthorizationString);

simpleroutine invoke(requestport instanceRequestPort: mach_port_t;
	BLOB(argumentsIn,AuthorizationValueVector);
	BLOB(hintsIn,AuthorizationItemSet);
	BLOB(contextIn,AuthorizationItemSet));

simpleroutine deactivate(requestport instanceRequestPort: mach_port_t);

simpleroutine destroy(requestport instanceRequestPort: mach_port_t);

//
// Tell the SecurityAgent to go away we no longer need you.
//
simpleroutine terminate(requestport agentPort: mach_port_t);