Skip to content

Commit

Permalink
Merge pull request #13 from 0mp/pjdlogging
Browse files Browse the repository at this point in the history
pjdlogging
  • Loading branch information
0mp committed Jun 25, 2016
2 parents fe54da8 + e468070 commit 446b58f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 71 deletions.
113 changes: 44 additions & 69 deletions contrib/openbsm/bin/bsmconv/bsmconv.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,12 @@
#include <sys/sbuf.h>
#include <unistd.h>

#include <stdarg.h> /* debug */
#include "pjdlog.h"

#define BSMCONV_BUFFER_SIZE 16
#define BSMCONV_MSG_FIELD_PREFIX "msg=audit("
#define BSMCONV_MSG_FIELD_TIMESTAMPID_LEN 14

static void
debug(const char *fmt, ...)
{
va_list fmtargs;
fprintf(stderr, "debug: ");
va_start(fmtargs, fmt);
vfprintf(stderr, fmt, fmtargs);
fprintf(stderr, "\n");
va_end(fmtargs);
}

/*
* Returns the absolute position of a newline character.
* The position is not less than offset.
Expand All @@ -36,7 +25,7 @@ find_record_end(struct sbuf *buf, const size_t offset)
size_t offsetlen;
size_t ii;

assert(sbuf_len(buf) != -1);
PJDLOG_ASSERT(sbuf_len(buf) != -1);

offsetlen = sbuf_len(buf) - offset;
data = sbuf_data(buf);
Expand All @@ -55,8 +44,8 @@ find_msg_field_position(struct sbuf *buf)
size_t msgii;
char *data;

assert(sbuf_len(buf) != -1);
assert(sbuf_done(buf) != 0);
PJDLOG_ASSERT(sbuf_len(buf) != -1);
PJDLOG_ASSERT(sbuf_done(buf) != 0);

data = sbuf_data(buf);
buflen = sbuf_len(buf);
Expand All @@ -81,15 +70,16 @@ find_msg_field_end(struct sbuf *buf, const size_t pos)
size_t buflen;
size_t ii;

assert(sbuf_len(buf) != -1);
assert(sbuf_done(buf) != 0);
PJDLOG_ASSERT(sbuf_len(buf) != -1);
PJDLOG_ASSERT(sbuf_done(buf) != 0);

data = sbuf_data(buf);
buflen = sbuf_len(buf);

for (ii = pos; ii < buflen; ii++)
if (data[ii] == ')')
return (ii);

return (-1);
}

Expand All @@ -100,11 +90,11 @@ process_event(struct sbuf *buf)

retval = sbuf_finish(buf);
if (retval == -1)
err(errno, "sbuf_finish");
pjdlog_exit(errno, "sbuf_finish");

assert(sbuf_len(buf) != -1);
PJDLOG_ASSERT(sbuf_len(buf) != -1);

debug("event: |%zu| (%.*s)", sbuf_len(buf), (int)sbuf_len(buf), sbuf_data(buf));
pjdlog_notice("event: |%zu| (%.*s)", sbuf_len(buf), (int)sbuf_len(buf), sbuf_data(buf));

return;
}
Expand All @@ -113,25 +103,24 @@ static void
parse_record(struct sbuf * const eventbuf, struct sbuf *recordbuf,
struct sbuf *idbuf)
{
size_t msgfieldpos;
ssize_t msgfieldpos;
size_t msgfieldend;
size_t recordlen;
size_t idlen;
char *recorddata;
char *iddata;
int retval;

assert(sbuf_len(idbuf) != -1);
assert(sbuf_len(recordbuf) != -1);
PJDLOG_ASSERT(sbuf_len(idbuf) != -1);
PJDLOG_ASSERT(sbuf_len(recordbuf) != -1);

retval = sbuf_finish(recordbuf);
if (retval == -1)
err(errno, "sbuf_finish");
pjdlog_exit(errno, "sbuf_finish");
recordlen = sbuf_len(recordbuf);
recorddata = sbuf_data(recordbuf);

msgfieldpos = find_msg_field_position(recordbuf);
/* debug("len (%zu), data (%s)", recordlen, recorddata); */

/* Find the msg field. */
if (msgfieldpos == -1) {
Expand All @@ -150,13 +139,10 @@ parse_record(struct sbuf * const eventbuf, struct sbuf *recordbuf,
if (sbuf_len(idbuf) == 0) {
recorddata = sbuf_data(recordbuf);
idlen = msgfieldend - msgfieldpos;
retval = sbuf_bcat(idbuf, recorddata + msgfieldpos, idlen);
if (retval == -1)
err(errno, "sbuf_bcat");
assert(sbuf_len(idbuf) == idlen);
retval = sbuf_bcat(eventbuf, recorddata, recordlen);
if (retval == -1)
err(errno, "sbuf_bcat");
PJDLOG_ASSERT(sbuf_bcat(idbuf, recorddata + msgfieldpos, idlen) != -1);
PJDLOG_ASSERT(sbuf_len(idbuf) != -1);
PJDLOG_ASSERT((size_t)sbuf_len(idbuf) == idlen);
PJDLOG_ASSERT(sbuf_bcat(eventbuf, recorddata, recordlen) != -1);
}
else {
idlen = sbuf_len(idbuf);
Expand All @@ -172,13 +158,9 @@ parse_record(struct sbuf * const eventbuf, struct sbuf *recordbuf,
sbuf_clear(idbuf);
}
/* Add the current record to the event. */
retval = sbuf_bcat(eventbuf, recorddata, recordlen);
if (retval == -1)
err(errno, "sbuf_bcat");
PJDLOG_ASSERT(sbuf_bcat(eventbuf, recorddata, recordlen) != -1);
/* Separate the records with the EOS character. */
retval = sbuf_bcat(eventbuf, "\0", 1);
if (retval == -1)
err(errno, "sbuf_bcat");
PJDLOG_ASSERT(sbuf_bcat(eventbuf, "\0", 1) != -1);
}
}
sbuf_clear(recordbuf);
Expand All @@ -199,70 +181,63 @@ int main()
int retval;

eventbuf = sbuf_new_auto();
if (eventbuf == NULL)
err(errno, "sbuf_new_auto");
PJDLOG_ASSERT(eventbuf != NULL);

idbuf = sbuf_new_auto();
if (idbuf == NULL)
err(errno, "sbuf_new_auto");
PJDLOG_ASSERT(idbuf != NULL);

inbuf = sbuf_new_auto();
if (inbuf == NULL)
err(errno, "sbuf_new_auto");
PJDLOG_ASSERT(inbuf != NULL);

recordbuf = sbuf_new_auto();
if (recordbuf == NULL)
err(errno, "sbuf_new_auto");

for (;;) {
bytesread = read(STDIN_FILENO, readbuf, sizeof(readbuf));
if (bytesread == -1)
err(errno, "read");
else if (bytesread == 0) {
debug("eof");
break;
}
PJDLOG_ASSERT(recordbuf != NULL);

retval = sbuf_bcat(inbuf, readbuf, bytesread);
if (retval == -1)
err(errno, "sbuf_bcat");
pjdlog_init(PJDLOG_MODE_STD);

while ((bytesread = read(STDIN_FILENO, readbuf, sizeof(readbuf))) > 0) {

PJDLOG_ASSERT(sbuf_bcat(inbuf, readbuf, bytesread) != -1);
retval = sbuf_finish(inbuf);
if (retval == -1)
err(errno, "sbuf_finish");
assert(sbuf_done(inbuf) != 0);
pjdlog_exit(errno, "sbuf_finish");
PJDLOG_ASSERT(sbuf_done(inbuf) != 0);
indata = sbuf_data(inbuf);
offset = 0;

/* The whole record is available. */
while ((newlinepos = find_record_end(inbuf, offset)) != -1) {
assert(sbuf_data(inbuf)[newlinepos] == '\n');
PJDLOG_ASSERT(sbuf_data(inbuf)[newlinepos] == '\n');

offsetlen = newlinepos - offset;
retval = sbuf_bcat(recordbuf, indata + offset, offsetlen);
if (retval == -1)
err(errno, "sbuf_bcat");
PJDLOG_ASSERT(sbuf_bcat(recordbuf, indata + offset, offsetlen) != -1);
retval = sbuf_finish(recordbuf);
if (retval == -1)
err(errno, "sbuf_finish");
pjdlog_exit(errno, "sbuf_finish");
offset += newlinepos + 1;
parse_record(eventbuf, recordbuf, idbuf);
}

offsetlen = sbuf_len(inbuf) - offset;
retval = sbuf_bcat(recordbuf, indata + offset, offsetlen);
if (retval == -1)
err(errno, "sbuf_bcat");
PJDLOG_ASSERT(sbuf_bcat(recordbuf, indata + offset, offsetlen) != -1);

sbuf_clear(inbuf);
}
assert(sbuf_len(eventbuf) != -1);

PJDLOG_ASSERT(bytesread != -1);
PJDLOG_ASSERT(bytesread == 0);
pjdlog_notice("EOF");

PJDLOG_ASSERT(sbuf_len(eventbuf) != -1);
if (sbuf_len(eventbuf) != 0) {
process_event(eventbuf);
}

sbuf_delete(eventbuf);
sbuf_delete(recordbuf);
sbuf_delete(inbuf);
sbuf_delete(idbuf);

pjdlog_fini();

return (0);
}
7 changes: 6 additions & 1 deletion contrib/openbsm/bin/bsmconv/runtests.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
#!/bin/sh

TEST_DIR=tests/
BIN=../../../../usr.bin/bsmconv/bsmconv
MAKEFILE_DIR=../../../../usr.bin/bsmconv/
BIN=${MAKEFILE_DIR}bsmconv
MAKEFILE=${MAKEFILE_DIR}Makefile

if [ "$1" = "-m" ]; then
CWD=$(pwd)
cd "$MAKEFILE_DIR"
make
cd "$CWD"
fi

for TEST_FILE in "$TEST_DIR"*.input; do
Expand Down
2 changes: 1 addition & 1 deletion usr.bin/bsmconv/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ PROG= bsmconv
SRCS= bsmconv.c
SRCS+= pjdlog.c

LIBADD+= l sbuf util
LIBADD+=sbuf util
MAN=

# auditdistd cannot use FreeBSD specific lock annotation macros. Disable
Expand Down

0 comments on commit 446b58f

Please sign in to comment.