--- /dev/null
+//
+// 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);
+
+//
+// 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);