// // sa_request.defs - Client-side Mach RPC interface to SecurityAgent. // #include #include subsystem secagentrequest 1100; serverprefix sa_request_server_; userprefix sa_request_client_; import ; // // 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); // // client check-in // simpleroutine contact(requestport agentPort: mach_port_t; clientPort: mach_port_make_send_t; serveraudittoken sourceAudit: audit_token_t; jobPort: mach_port_move_send_t; processBootstrap: mach_port_t; userPrefs: mach_port_t);