diff options
-rw-r--r-- | plugin/autoserial.c | 21 | ||||
-rw-r--r-- | plugin/dnsnotify.c | 8 | ||||
-rw-r--r-- | plugin/plugin.c | 6 | ||||
-rw-r--r-- | tools/notify-dns-slaves.c | 31 |
4 files changed, 48 insertions, 18 deletions
diff --git a/plugin/autoserial.c b/plugin/autoserial.c index d10f8a5..16af5d7 100644 --- a/plugin/autoserial.c +++ b/plugin/autoserial.c @@ -18,12 +18,12 @@ * DECLARATIONS */ -/* TODO: Fill these in from settings */ static const char *dnsserial_soa_attribute = "sOARecord"; static const char *dnsserial_soa_base = ""; static Slapi_Mutex *dnsserial_mutex = NULL; static strset *dnsserial_soa_cache = NULL; +static int dnsserial_enable = 0; /* --------------------------------------------------------------------------------- * MEMORY ALLOCATION @@ -389,6 +389,9 @@ change_soa_attribute (const char *dn, const char *soa_old, const char *soa_new) return -1; } + /* Call the dns notify code, and note that we've changed a sOARecord */ + dnsnotify_post_modify (dn, mods); + trace ("success"); return 0; } @@ -433,6 +436,9 @@ autoserial_post_delete (const char *dn) return_if_fail (dn && dn[0]); + if (!dnsserial_enable) + return; + /* A DN that is an SOA? */ if (present_in_soa_cache (dn)) { remove_from_soa_cache (dn); @@ -455,6 +461,9 @@ autoserial_post_modify (const char *dn, LDAPMod **mods) return_if_fail (dn && dn[0]); + if (!dnsserial_enable) + return; + /* Add or remove from cache as appropriate */ soa = load_soa_attribute(dn); if (soa) { @@ -484,6 +493,9 @@ autoserial_post_modrdn (const char *odn, const char *ndn) return_if_fail (odn && odn[0]); return_if_fail (ndn && ndn[0]); + if (!dnsserial_enable) + return; + /* A DN that is an SOA? */ if (present_in_soa_cache (odn)) { @@ -507,6 +519,9 @@ autoserial_post_add (const char *dn) return_if_fail (dn && dn[0]); + if (!dnsserial_enable) + return; + /* A DN that is an SOA? */ soa = load_soa_attribute (dn); if (soa) { @@ -536,6 +551,10 @@ autoserial_config (const char *name, const char *value) } else if (strcmp ("base-dn", name) == 0 && value) { dnsserial_soa_base = value; return 1; + + } else if (strcmp ("enable-auto-serial", name) == 0 && !value) { + dnsserial_enable = 1; + return 1; } return 0; diff --git a/plugin/dnsnotify.c b/plugin/dnsnotify.c index 132726f..d610414 100644 --- a/plugin/dnsnotify.c +++ b/plugin/dnsnotify.c @@ -41,7 +41,7 @@ load_soa_ns_attributes (const char *dn, char **soa_result, char ***ns_result) Slapi_PBlock *pb; Slapi_Attr *attr; LDAPControl *ctrl; - char *attrs[2]; + char *attrs[3]; char *soa, **ns; int rc, code, num, i; @@ -52,7 +52,8 @@ load_soa_ns_attributes (const char *dn, char **soa_result, char ***ns_result) ctrl = NULL; /* No controls */ attrs[0] = (char*)dnsnotify_soa_attribute; - attrs[1] = NULL; + attrs[1] = (char*)dnsnotify_ns_attribute; + attrs[2] = NULL; trace ("performing internal search"); @@ -77,6 +78,7 @@ load_soa_ns_attributes (const char *dn, char **soa_result, char ***ns_result) return_val_if_fail (entries, 0); soa = NULL; + ns = NULL; if (entries[0]) { if (slapi_entry_attr_find (entries[0], (char*)dnsnotify_soa_attribute, &attr) >= 0 && attr && slapi_attr_get_values (attr, &values) >= 0 && values && values[0]) { @@ -108,7 +110,7 @@ load_soa_ns_attributes (const char *dn, char **soa_result, char ***ns_result) slapi_pblock_destroy (pb); /* Only proceed if we have all the data we need */ - if (soa && soa[0] && ns && ns[0] && ns[0]) { + if (soa && soa[0] && ns && ns[0]) { *soa_result = soa; *ns_result = ns; return 1; diff --git a/plugin/plugin.c b/plugin/plugin.c index c38eb67..c34294a 100644 --- a/plugin/plugin.c +++ b/plugin/plugin.c @@ -310,8 +310,10 @@ plugin_init (Slapi_PBlock *pb) plugin_arguments[i] = slapi_ch_strdup (argv[i]); arg = trim (plugin_arguments[i]); - value = strchr (arg, '='); - if (value) { + value = arg + strcspn (arg, ":="); + if (!*value) { + value = NULL; + } else { *value = 0; value = trim (value + 1); } 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 (); |