// // 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 <security_agent_client/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); // // Support transaction semantics outside the usual client protocol // (those semantics not defined here) // routine txStart(agentPort: mach_port_t; sreplyport clientReplyPort: mach_port_make_send_once_t); simpleroutine txEnd(agentPort: mach_port_t);