Index: affile.c =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/affile.c,v retrieving revision 1.50 diff -u -r1.50 affile.c --- affile.c 26 Apr 2002 09:43:53 -0000 1.50 +++ affile.c 5 Jul 2002 08:06:15 -0000 @@ -145,6 +145,7 @@ (flags . UINT32) (src object io_fd) (prefix pointer UINT8) + (pad_size . UINT32) (name string))) */ @@ -161,7 +162,7 @@ if (do_open_file(self->name, flags, -1, -1, -1, -1, -1, -1, 0, &fd)) { lseek(fd, 0, SEEK_END); self->src = io_read(make_io_fd(cfg->backend, fd, ol_string_use(self->name)), - make_log_reader(0, self->prefix, cfg->log_msg_size, c), + make_log_reader(0, self->prefix, cfg->log_msg_size, self->pad_size, c), NULL); self->res = REMEMBER_RESOURCE(cfg->resources, &self->src->super.super); return ST_OK | ST_GOON; @@ -186,7 +187,7 @@ KILL_RESOURCE_NODE(cfg->resources, self->res); } -struct log_source_driver *make_affile_source(const char *name, int flags, UINT8 *prefix) +struct log_source_driver *make_affile_source(const char *name, int flags, UINT8 *prefix, UINT32 pad_size) { NEW(affile_source, self); @@ -196,6 +197,7 @@ self->name = c_format_cstring("%z", name); self->flags = flags; self->prefix = prefix; + self->pad_size = pad_size; return &self->super; } @@ -856,7 +858,7 @@ { "MESSAGE", M_MESSAGE }, { "SOURCEIP", M_SOURCE_IP } }; - char format[MAX_EXPANDED_MACRO], *format_ptr = format; + char format[cfg->log_msg_size + 1], *format_ptr = format; int left = sizeof(format); int i, j; Index: affile.h =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/affile.h,v retrieving revision 1.18 diff -u -r1.18 affile.h --- affile.h 19 Mar 2002 09:26:16 -0000 1.18 +++ affile.h 5 Jul 2002 08:06:15 -0000 @@ -63,7 +63,7 @@ void affile_set_template_escape(struct log_dest_driver *c, int enable); void affile_set_remove_if_older(struct log_dest_driver *c, int interval); -struct log_source_driver *make_affile_source(const char *name, int flags, UINT8 *prefix); +struct log_source_driver *make_affile_source(const char *name, int flags, UINT8 *prefix, UINT32 pad_size); struct log_dest_driver *make_affile_dest(const char *name, int flags); #endif Index: afinet.c =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/afinet.c,v retrieving revision 1.18 diff -u -r1.18 afinet.c --- afinet.c 29 May 2002 09:42:35 -0000 1.18 +++ afinet.c 5 Jul 2002 08:06:15 -0000 @@ -89,13 +89,13 @@ notice("AF_INET client connected from %S, port %i\n", inet->ip, inet->port); io_read(self->client, - make_log_reader(0, NULL, cfg->log_msg_size, c), + make_log_reader(0, NULL, cfg->log_msg_size, 0, c), make_afsocket_source_close_callback(self)); } else { /* SOCK_DGRAM */ io_read(self->client, - make_log_reader(1, NULL, cfg->log_msg_size, c), + make_log_reader(1, NULL, cfg->log_msg_size, 0, c), make_afsocket_source_close_callback(self)); } Index: afunix.c =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/afunix.c,v retrieving revision 1.21 diff -u -r1.21 afunix.c --- afunix.c 26 Apr 2002 09:43:54 -0000 1.21 +++ afunix.c 5 Jul 2002 08:06:15 -0000 @@ -51,7 +51,7 @@ CAST(afsocket_source_connection, self, c); io_read(self->client, - make_log_reader(0, NULL, cfg->log_msg_size, c), + make_log_reader(0, NULL, cfg->log_msg_size, 0, c), make_afsocket_source_close_callback(self)); return ST_OK | ST_GOON; Index: cfg-grammar.y =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/cfg-grammar.y,v retrieving revision 1.54 diff -u -r1.54 cfg-grammar.y --- cfg-grammar.y 10 Jun 2002 07:24:10 -0000 1.54 +++ cfg-grammar.y 5 Jul 2002 08:06:15 -0000 @@ -46,6 +46,7 @@ static struct log_source_driver *last_source_driver; static struct log_dest_driver *last_dest_driver; UINT8 *last_prefix = NULL; +UINT32 last_pad_size; UINT8 * get_last_log_prefix(void) @@ -85,7 +86,7 @@ %token KW_COMPRESS KW_MAC KW_AUTH KW_ENCRYPT %token KW_DNS_CACHE KW_DNS_CACHE_SIZE %token KW_DNS_CACHE_EXPIRE KW_DNS_CACHE_EXPIRE_FAILED -%token KW_REMOVE_IF_OLDER KW_LOG_PREFIX +%token KW_REMOVE_IF_OLDER KW_LOG_PREFIX KW_PAD_SIZE /* filter items*/ %token KW_FACILITY KW_LEVEL KW_NETMASK KW_HOST KW_MATCH @@ -215,12 +216,12 @@ source_affile : KW_FILE '(' string source_affile_options ')' { - $$ = make_affile_source($3, 0, get_last_log_prefix()); + $$ = make_affile_source($3, 0, get_last_log_prefix(), last_pad_size); free($3); } | KW_PIPE '(' string source_affile_options ')' { - $$ = make_affile_source($3, AFFILE_PIPE, get_last_log_prefix()); + $$ = make_affile_source($3, AFFILE_PIPE, get_last_log_prefix(), last_pad_size); free($3); } ; @@ -232,6 +233,7 @@ source_affile_option : KW_LOG_PREFIX '(' string ')' { last_prefix = $3; } + | KW_PAD_SIZE '(' NUMBER ')' { last_pad_size = $3; } ; source_afsocket Index: cfg-lex.l =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/cfg-lex.l,v retrieving revision 1.23 diff -u -r1.23 cfg-lex.l --- cfg-lex.l 26 Apr 2002 09:43:54 -0000 1.23 +++ cfg-lex.l 5 Jul 2002 08:06:15 -0000 @@ -99,6 +99,7 @@ { "dns_cache_expire_failed", KW_DNS_CACHE_EXPIRE_FAILED }, { "log_prefix", KW_LOG_PREFIX }, { "log_msg_size", KW_LOG_MSG_SIZE }, + { "pad_size", KW_PAD_SIZE }, /* source or destination items */ { "file", KW_FILE }, Index: sources.c =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/sources.c,v retrieving revision 1.33 diff -u -r1.33 sources.c --- sources.c 26 Apr 2002 09:43:54 -0000 1.33 +++ sources.c 5 Jul 2002 08:06:15 -0000 @@ -51,6 +51,8 @@ (prefix pointer UINT8) (pos simple UINT32) (buffer space UINT8) + (max_log_line simple UINT32) + (pad_size simple UINT32) (next object log_handler))) */ @@ -82,11 +84,14 @@ size_t salen = sizeof(sabuf); if (!closure->dgram) { - n = A_READ(read, MAX_LOG_LINE - closure->pos, closure->buffer + closure->pos); + if (closure->pad_size) + n = A_READ(read, MIN(closure->max_log_line, closure->pad_size), closure->buffer + closure->pos); + else + n = A_READ(read, closure->max_log_line - closure->pos, closure->buffer + closure->pos); salen = 0; } else - n = A_RECV(read, MAX_LOG_LINE - closure->pos, closure->buffer + closure->pos, (abstract_addr *) &sabuf, &salen); + n = A_RECV(read, closure->max_log_line - closure->pos, closure->buffer + closure->pos, (abstract_addr *) &sabuf, &salen); switch(n) { case 0: @@ -102,6 +107,11 @@ eol = memchr(closure->buffer, '\0', closure->pos); if (eol == NULL) eol = memchr(closure->buffer, '\n', closure->pos); + if (closure->pad_size && eol) { + do_handle_line(closure, eol - closure->buffer, closure->buffer, salen ? (abstract_addr *) &sabuf : NULL, salen); + closure->pos = 0; + return ST_OK | ST_GOON; + } if (!eol && closure->pos) { /* we don't have a terminating nl nor \0 */ do_handle_line(closure, closure->pos, closure->buffer, salen ? (abstract_addr *) &sabuf : NULL, salen); @@ -139,6 +149,7 @@ make_log_reader(UINT32 dgram, UINT8 *prefix, UINT32 max_log_line, + UINT32 pad_size, struct log_handler *next) { NEW(log_reader, self); @@ -147,6 +158,8 @@ self->dgram = dgram; self->next = next; self->prefix = prefix; + self->max_log_line = MAX(max_log_line, pad_size) + 1; + self->pad_size = pad_size; self->buffer = ol_space_alloc(max_log_line); return &self->super; Index: sources.h =================================================================== RCS file: /var/cvs/syslog-ng/syslog-ng/src/sources.h,v retrieving revision 1.14 diff -u -r1.14 sources.h --- sources.h 26 Apr 2002 09:43:54 -0000 1.14 +++ sources.h 5 Jul 2002 08:06:15 -0000 @@ -64,6 +64,7 @@ make_log_reader(UINT32 dgram, UINT8 *prefix, UINT32 max_log_line, + UINT32 pad_size, struct log_handler *next); struct log_source_group *make_source_group(const char *name, struct log_source_driver *drvs);