audit.c (185573) | audit.c (186647) |
---|---|
1/*- 2 * Copyright (c) 2005-2008 Apple Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 12 unchanged lines hidden (view full) --- 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * | 1/*- 2 * Copyright (c) 2005-2008 Apple Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 12 unchanged lines hidden (view full) --- 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * |
29 * $P4: //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#11 $ | 29 * $P4: //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#13 $ |
30 */ 31/* 32 * Program to trigger the audit daemon with a message that is either: 33 * - Open a new audit log file 34 * - Read the audit control file and take action on it 35 * - Close the audit log file and exit 36 * 37 */ --- 4 unchanged lines hidden (view full) --- 42#include <sys/queue.h> 43#else /* !HAVE_FULL_QUEUE_H */ 44#include <compat/queue.h> 45#endif /* !HAVE_FULL_QUEUE_H */ 46#include <sys/uio.h> 47 48#include <bsm/libbsm.h> 49 | 30 */ 31/* 32 * Program to trigger the audit daemon with a message that is either: 33 * - Open a new audit log file 34 * - Read the audit control file and take action on it 35 * - Close the audit log file and exit 36 * 37 */ --- 4 unchanged lines hidden (view full) --- 42#include <sys/queue.h> 43#else /* !HAVE_FULL_QUEUE_H */ 44#include <compat/queue.h> 45#endif /* !HAVE_FULL_QUEUE_H */ 46#include <sys/uio.h> 47 48#include <bsm/libbsm.h> 49 |
50#include <errno.h> |
|
50#include <fcntl.h> 51#include <stdio.h> 52#include <stdlib.h> 53#include <unistd.h> 54 55 56static int send_trigger(unsigned int); 57 58#ifdef USE_MACH_IPC 59#include <mach/mach.h> 60#include <servers/netname.h> 61#include <mach/message.h> 62#include <mach/port.h> 63#include <mach/mach_error.h> 64#include <mach/host_special_ports.h> 65#include <servers/bootstrap.h> 66 | 51#include <fcntl.h> 52#include <stdio.h> 53#include <stdlib.h> 54#include <unistd.h> 55 56 57static int send_trigger(unsigned int); 58 59#ifdef USE_MACH_IPC 60#include <mach/mach.h> 61#include <servers/netname.h> 62#include <mach/message.h> 63#include <mach/port.h> 64#include <mach/mach_error.h> 65#include <mach/host_special_ports.h> 66#include <servers/bootstrap.h> 67 |
67#include "auditd_control_user.h" | 68#include "auditd_control.h" |
68 | 69 |
70/* 71 * XXX the following is temporary until this can be added to the kernel 72 * audit.h header. 73 */ 74#ifndef AUDIT_TRIGGER_INITIALIZE 75#define AUDIT_TRIGGER_INITIALIZE 7 76#endif 77 |
|
69static int 70send_trigger(unsigned int trigger) 71{ 72 mach_port_t serverPort; 73 kern_return_t error; 74 75 error = host_get_audit_control_port(mach_host_self(), &serverPort); 76 if (error != KERN_SUCCESS) { | 78static int 79send_trigger(unsigned int trigger) 80{ 81 mach_port_t serverPort; 82 kern_return_t error; 83 84 error = host_get_audit_control_port(mach_host_self(), &serverPort); 85 if (error != KERN_SUCCESS) { |
77 mach_error("Cannot get auditd_control Mach port: ", error); | 86 if (geteuid() != 0) { 87 errno = EPERM; 88 perror("audit requires root privileges"); 89 } else 90 mach_error("Cannot get auditd_control Mach port:", 91 error); |
78 return (-1); 79 } 80 81 error = auditd_control(serverPort, trigger); 82 if (error != KERN_SUCCESS) { 83 mach_error("Error sending trigger: ", error); 84 return (-1); 85 } --- 5 unchanged lines hidden (view full) --- 91 92static int 93send_trigger(unsigned int trigger) 94{ 95 int error; 96 97 error = auditon(A_SENDTRIGGER, &trigger, sizeof(trigger)); 98 if (error != 0) { | 92 return (-1); 93 } 94 95 error = auditd_control(serverPort, trigger); 96 if (error != KERN_SUCCESS) { 97 mach_error("Error sending trigger: ", error); 98 return (-1); 99 } --- 5 unchanged lines hidden (view full) --- 105 106static int 107send_trigger(unsigned int trigger) 108{ 109 int error; 110 111 error = auditon(A_SENDTRIGGER, &trigger, sizeof(trigger)); 112 if (error != 0) { |
99 perror("Error sending trigger"); | 113 if (error == EPERM) 114 perror("audit requires root privileges"); 115 else 116 perror("Error sending trigger"); |
100 return (-1); 101 } 102 103 return (0); 104} 105#endif /* ! USE_MACH_IPC */ 106 107static void 108usage(void) 109{ 110 | 117 return (-1); 118 } 119 120 return (0); 121} 122#endif /* ! USE_MACH_IPC */ 123 124static void 125usage(void) 126{ 127 |
111 (void)fprintf(stderr, "Usage: audit -n | -s | -t \n"); | 128 (void)fprintf(stderr, "Usage: audit -i | -n | -s | -t \n"); |
112 exit(-1); 113} 114 115/* 116 * Main routine to process command line options. 117 */ 118int 119main(int argc, char **argv) 120{ 121 int ch; 122 unsigned int trigger = 0; 123 124 if (argc != 2) 125 usage(); 126 | 129 exit(-1); 130} 131 132/* 133 * Main routine to process command line options. 134 */ 135int 136main(int argc, char **argv) 137{ 138 int ch; 139 unsigned int trigger = 0; 140 141 if (argc != 2) 142 usage(); 143 |
127 while ((ch = getopt(argc, argv, "nst")) != -1) { | 144 while ((ch = getopt(argc, argv, "inst")) != -1) { |
128 switch(ch) { 129 | 145 switch(ch) { 146 |
147 case 'i': 148 trigger = AUDIT_TRIGGER_INITIALIZE; 149 break; 150 |
|
130 case 'n': 131 trigger = AUDIT_TRIGGER_ROTATE_USER; 132 break; 133 134 case 's': 135 trigger = AUDIT_TRIGGER_READ_FILE; 136 break; 137 --- 16 unchanged lines hidden --- | 151 case 'n': 152 trigger = AUDIT_TRIGGER_ROTATE_USER; 153 break; 154 155 case 's': 156 trigger = AUDIT_TRIGGER_READ_FILE; 157 break; 158 --- 16 unchanged lines hidden --- |