#include <mach/mach.h>
#include <servers/netname.h>
#include <mach/message.h>
#include <mach/port.h>
#include <mach/mach_error.h>
#include <mach/host_special_ports.h>
#include <servers/bootstrap.h>
#include <auditd_control.h>
#include <auditd.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
mach_port_t serverPort;
mach_port_t bootstrapPort;
void init();
void process(int flags);
int main(int argc, char **argv)
{
char ch;
int flags = 0;
while ((ch = getopt(argc, argv, "nst")) != -1) {
switch(ch) {
case 'n':
flags = OPEN_NEW;
break;
case 's':
flags = READ_FILE;
break;
case 't':
flags = CLOSE_AND_DIE;
break;
case '?':
default:
(void)fprintf(stderr,
"usage: audit -n | -s | -t \n");
exit(1);
}
}
init();
process(flags);
return 0;
}
void init()
{
if(host_get_audit_control_port(mach_host_self(), &serverPort) != KERN_SUCCESS) {
fprintf(stderr, "Cannot get auditd_control\n");
exit(1);
}
printf("Server port is %d\n", serverPort);
}
void process(int flags)
{
kern_return_t retcode;
retcode = auditd_control(serverPort, flags);
if(retcode != KERN_SUCCESS) {
mach_error("error doing IPC: ", retcode);
exit(1);
}
printf("Client call successful\n");
}