PERFORCE change 138488 for review
Aaron Meihm
alm at FreeBSD.org
Tue Mar 25 01:51:50 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=138488
Change 138488 by alm at alm_praetorian on 2008/03/25 01:51:35
First pass at new threaded model.
Affected files ...
.. //depot/projects/trustedbsd/netauditd/Makefile#6 edit
.. //depot/projects/trustedbsd/netauditd/conf.c#8 edit
.. //depot/projects/trustedbsd/netauditd/grammar.y#2 edit
.. //depot/projects/trustedbsd/netauditd/netauditd.c#17 edit
.. //depot/projects/trustedbsd/netauditd/netauditd.h#12 edit
.. //depot/projects/trustedbsd/netauditd/reader.c#1 add
.. //depot/projects/trustedbsd/netauditd/reader.h#1 add
.. //depot/projects/trustedbsd/netauditd/writer.c#1 add
.. //depot/projects/trustedbsd/netauditd/writer.h#1 add
Differences ...
==== //depot/projects/trustedbsd/netauditd/Makefile#6 (text+ko) ====
@@ -1,7 +1,7 @@
CC = gcc
-CFLAGS = -Wall -g
+CFLAGS = -Wall -g -pthread
TARGETS = netauditd
-OBJ = conf.o lex.yy.o netauditd.o y.tab.o
+OBJ = conf.o lex.yy.o netauditd.o reader.o y.tab.o writer.o
all: $(TARGETS)
==== //depot/projects/trustedbsd/netauditd/conf.c#8 (text+ko) ====
@@ -23,6 +23,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+#include <sys/types.h>
+#include <sys/socket.h>
#include <sys/queue.h>
#include <stdio.h>
==== //depot/projects/trustedbsd/netauditd/grammar.y#2 (text+ko) ====
@@ -36,10 +36,13 @@
#include "conf.h"
#include "netauditd.h"
+#include "reader.h"
+#include "writer.h"
#define AU_CMPNT_INIT(x) x = malloc(sizeof(struct au_cmpnt)); \
assert (x != NULL); \
- bzero(x, sizeof(struct au_cmpnt));
+ bzero(x, sizeof(struct au_cmpnt)); \
+ TAILQ_INIT(&x->ac_sbuffers);
static int ainfo_passive;
@@ -115,6 +118,8 @@
new->ac_type = COMPONENT_NET;
new->ac_name = $3;
new->ac_ainfo = $4;
+ new->ac_init_func = writer_init_net;
+ writer_q_init(new);
$$ = new;
}
|
@@ -125,6 +130,8 @@
new->ac_type = COMPONENT_TRAIL;
new->ac_name = $2;
new->ac_path = $3;
+ new->ac_init_func = writer_init_trail;
+ writer_q_init(new);
$$ = new;
}
;
@@ -137,6 +144,8 @@
new->ac_type = COMPONENT_PIPE;
new->ac_name = $2;
new->ac_path = $3;
+ new->ac_init_func = reader_init_pipe;
+ new->ac_read_func = reader_read_pipe;
$$ = new;
}
|
@@ -147,6 +156,8 @@
new->ac_type = COMPONENT_NET;
new->ac_name = $3;
new->ac_ainfo = $4;
+ new->ac_init_func = reader_init_net;
+ new->ac_read_func = reader_accept_client;
$$ = new;
}
;
==== //depot/projects/trustedbsd/netauditd/netauditd.c#17 (text+ko) ====
@@ -30,25 +30,57 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
#include <unistd.h>
#include <netdb.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
#include "conf.h"
#include "netauditd.h"
+#include "reader.h"
+#include "writer.h"
+static int debug_flag;
+pthread_mutex_t debug_mutex;
ac_head_t ac_list_src;
ac_head_t ac_list_dst;
extern char *conf_path;
+void
+dprintf(char *fmt, ...)
+{
+ char buf[1024];
+ va_list ap;
+
+ if (!debug_flag)
+ return;
+ if (pthread_mutex_lock(&debug_mutex) != 0)
+ exit(2);
+ va_start(ap, fmt);
+ (void) vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ (void) printf("debug: %s\n", buf);
+ if (pthread_mutex_unlock(&debug_mutex) != 0)
+ exit(2);
+}
+
int
main(int argc, char *argv[])
{
+ pthread_t writer_thread;
char ch;
+ if (pthread_mutex_init(&debug_mutex, NULL) != 0)
+ exit(2);
conf_path = DEFAULT_CONF_PATH;
- while ((ch = getopt(argc, argv, "f:h")) != -1) {
+ while ((ch = getopt(argc, argv, "df:h")) != -1) {
switch (ch) {
+ case 'd':
+ debug_flag = 1;
+ break;
case 'f':
conf_path = optarg;
break;
@@ -58,15 +90,33 @@
/* Not reached */
}
}
+ (void) signal(SIGPIPE, SIG_IGN);
TAILQ_INIT(&ac_list_src);
TAILQ_INIT(&ac_list_dst);
conf_load(conf_path);
+ if (pthread_create(&writer_thread, NULL, writer_start, NULL) != 0)
+ exit(2);
+ reader_start();
return (0);
}
+int
+nonblock(int fd)
+{
+ int flags;
+
+ flags = fcntl(fd, F_GETFL);
+ if (flags == -1)
+ return (-1);
+ flags |= O_NONBLOCK;
+ if (fcntl(fd, F_SETFL, flags) == -1)
+ return (-1);
+ return (0);
+}
+
void
usage()
{
- (void) fputs("usage: netauditd [-h] [-f path]\n", stderr);
+ (void) fputs("usage: netauditd [-dh] [-f path]\n", stderr);
exit(1);
}
==== //depot/projects/trustedbsd/netauditd/netauditd.h#12 (text+ko) ====
@@ -32,19 +32,67 @@
COMPONENT_TRAIL
};
+#define FLAG_ONLINE 1 /* Component is online */
+#define FLAG_CONNECTING (1 << 1) /* Component connecting */
+
+struct audit_record {
+ void *ar_buf;
+ u_int32_t ar_record_len;
+ int ar_refcount;
+};
+
+struct au_queue_ent {
+ TAILQ_ENTRY(au_queue_ent) aq_glue;
+ struct audit_record *aq_record;
+ u_int32_t aq_remain;
+};
+
+typedef TAILQ_HEAD(, au_queue_ent) au_q_t;
+
+struct au_qpair {
+ au_q_t qp_a, qp_b;
+ int qp_ready;
+ au_q_t *qp_read, *qp_write;
+ pthread_mutex_t qp_lock;
+ pthread_cond_t qp_cond;
+ u_int32_t qp_read_size;
+ time_t qp_time;
+};
+
struct au_cmpnt {
struct addrinfo *ac_ainfo;
struct au_cmpnt **ac_dsts;
+ time_t ac_failed;
int ac_fd;
+ int ac_flags;
TAILQ_ENTRY(au_cmpnt) ac_glue;
char *ac_name;
int ac_ndsts;
char *ac_path;
+ struct au_qpair ac_q;
int ac_type;
+
+ TAILQ_HEAD(, au_src_buffer) ac_sbuffers;
+
+ int (*ac_init_func)(struct au_cmpnt *);
+ int (*ac_read_func)(struct au_cmpnt *);
+};
+
+struct au_src_buffer {
+ struct sockaddr as_addr;
+ socklen_t as_addrlen;
+ int as_fd;
+ TAILQ_ENTRY(au_src_buffer) as_glue;
+ u_char as_header[5];
+ struct au_cmpnt *as_parent;
+ u_int32_t as_nread;
+ struct audit_record *as_record;
};
typedef TAILQ_HEAD(, au_cmpnt) ac_head_t;
extern ac_head_t ac_list_src;
extern ac_head_t ac_list_dst;
+void dprintf(char *, ...);
+int nonblock(int);
void usage(void);
More information about the p4-projects
mailing list