diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/notify-dns-slaves.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/tools/notify-dns-slaves.c b/tools/notify-dns-slaves.c index 018af43..4af4b8c 100644 --- a/tools/notify-dns-slaves.c +++ b/tools/notify-dns-slaves.c @@ -103,7 +103,7 @@ static int the_socket4 = -1; static int the_socket6 = -1; static char stdin_buffer[LINE_LENGTH + 1]; -static size_t stdin_offset = 0; +static ssize_t stdin_offset = 0; static int processing_active = 0; static int input_complete = 0; @@ -147,9 +147,9 @@ vmessage(int level, int erno, const char* msg, va_list ap) char buf[MAX_MSGLEN]; size_t len; - if(debug_level < level) +/* if(debug_level < level) return; - +*/ assert (msg); strncpy (buf, msg, MAX_MSGLEN); @@ -165,7 +165,7 @@ vmessage(int level, int erno, const char* msg, va_list ap) } /* Either to syslog or stderr */ - if (is_helper && level != LOG_DEBUG) +/* if (is_helper && level != LOG_DEBUG) */ vsyslog (level, buf, ap); vwarnx (buf, ap); @@ -636,7 +636,7 @@ stdin_callback (int fd, int type, void *arg) assert (fd == 0); - num = read (fd, stdin_buffer, LINE_LENGTH - stdin_offset); + num = read (fd, stdin_buffer + stdin_offset, LINE_LENGTH - stdin_offset); if (num < 0) { if (errno == EAGAIN || errno == EINTR) return; @@ -660,15 +660,18 @@ stdin_callback (int fd, int type, void *arg) line = stdin_buffer + LINE_LENGTH; } - if (!line) /* Wait for more data */ + if (!line) /* Wait for more data */ { +fprintf (stderr, "waiting for more data %d\n", stdin_offset); break; +} *line = 0; num = (line + 1) - stdin_buffer; process_stdin_line (stdin_buffer); - stdin_offset = LINE_LENGTH - num; - memmove (stdin_buffer, stdin_buffer + num, stdin_offset); + stdin_offset = stdin_offset - num; + if (stdin_offset) + memmove (stdin_buffer, stdin_buffer + num, stdin_offset); } while (!input_complete); @@ -677,6 +680,8 @@ stdin_callback (int fd, int type, void *arg) server_stop (); server_unwatch (fd); } + + assert (stdin_offset >= 0); } static void @@ -743,8 +748,8 @@ make_sockets (void) static void usage() { - fprintf (stderr, "usage: slapi-dnsnotify-helper -s [-d level]\n"); - fprintf (stderr, "usage: slapi-dnsnotify-helper [-d level] zone server ...\n"); + fprintf (stderr, "usage: notify-dns-slaves -s [-w wait] [-d level]\n"); + fprintf (stderr, "usage: notify-dns-slaves [-d level] zone server ...\n"); exit (2); } @@ -759,7 +764,7 @@ main(int argc, char *argv[]) { case 'd': debug_level = strtol (optarg, &str, 10); - if (*str || debug_level > 4) + if (*str || debug_level < 0 || debug_level > 4) fatalx (1, "invalid debug log level: %s", optarg); debug_level += LOG_ERR; break; @@ -768,8 +773,10 @@ main(int argc, char *argv[]) break; case 'w': delay_interval = strtol (optarg, &str, 10); - if (*str || delay_interval > 0) + if (*str || delay_interval < 0) fatalx (1, "invalid delay interval: %s", optarg); + delay_interval *= 1000; + break; case '?': default: usage (); |