X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpowerdns.c;h=189c46fec1bbf2cb7383096418da4b5649f94d97;hb=2f712e8af3ae9461df24fe92098b44a0ee07d291;hp=6ae9797ef7f2b097bee278ff61c53a1fa531d903;hpb=c84dfcbfe5971d55fbcbc88a88f2845fbeb8dfb3;p=collectd.git diff --git a/src/powerdns.c b/src/powerdns.c index 6ae9797e..189c46fe 100644 --- a/src/powerdns.c +++ b/src/powerdns.c @@ -45,20 +45,13 @@ #endif #define FUNC_ERROR(func) do { char errbuf[1024]; ERROR ("powerdns plugin: %s failed: %s", func, sstrerror (errno, errbuf, sizeof (errbuf))); } while (0) -#define SERVER_SOCKET "/var/run/pdns.controlsocket" +#define SERVER_SOCKET LOCALSTATEDIR"/run/pdns.controlsocket" #define SERVER_COMMAND "SHOW *" -#define RECURSOR_SOCKET "/var/run/pdns_recursor.controlsocket" -#define RECURSOR_COMMAND "get all-outqueries answers0-1 " /* {{{ */ \ - "answers100-1000 answers10-100 answers1-10 answers-slow cache-entries " \ - "cache-hits cache-misses chain-resends client-parse-errors " \ - "concurrent-queries dlg-only-drops ipv6-outqueries negcache-entries " \ - "noerror-answers nsset-invalidations nsspeeds-entries nxdomain-answers " \ - "outgoing-timeouts qa-latency questions resource-limits " \ - "server-parse-errors servfail-answers spoof-prevents sys-msec " \ - "tcp-client-overflow tcp-outqueries tcp-questions throttled-out " \ - "throttled-outqueries throttle-entries unauthorized-tcp unauthorized-udp " \ - "unexpected-packets unreachables user-msec" /* }}} */ +#define RECURSOR_SOCKET LOCALSTATEDIR"/run/pdns_recursor.controlsocket" +#define RECURSOR_COMMAND "get noerror-answers nxdomain-answers " \ + "servfail-answers sys-msec user-msec qa-latency cache-entries cache-hits " \ + "cache-misses questions" struct list_item_s; typedef struct list_item_s list_item_t; @@ -67,7 +60,7 @@ struct list_item_s { enum { - SRV_AUTHORATIVE, + SRV_AUTHORITATIVE, SRV_RECURSOR } server_type; int (*func) (list_item_t *item); @@ -271,7 +264,7 @@ static void submit (const char *plugin_instance, /* {{{ */ if (i >= lookup_table_length) { - DEBUG ("powerdns plugin: submit: Not found in lookup table: %s = %s;", + INFO ("powerdns plugin: submit: Not found in lookup table: %s = %s;", pdns_type, value); return; } @@ -327,11 +320,12 @@ static void submit (const char *plugin_instance, /* {{{ */ vl.time = time (NULL); sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "powerdns", sizeof (vl.plugin)); + sstrncpy (vl.type, type, sizeof (vl.type)); if (type_instance != NULL) sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance)); - plugin_dispatch_values (type, &vl); + plugin_dispatch_values (&vl); } /* }}} static void submit */ static int powerdns_get_data_dgram (list_item_t *item, /* {{{ */ @@ -356,10 +350,9 @@ static int powerdns_get_data_dgram (list_item_t *item, /* {{{ */ memset (&sa_unix, 0, sizeof (sa_unix)); sa_unix.sun_family = AF_UNIX; - strncpy (sa_unix.sun_path, + sstrncpy (sa_unix.sun_path, (local_sockpath != NULL) ? local_sockpath : PDNS_LOCAL_SOCKPATH, sizeof (sa_unix.sun_path)); - sa_unix.sun_path[sizeof (sa_unix.sun_path) - 1] = 0; status = unlink (sa_unix.sun_path); if ((status != 0) && (errno != ENOENT)) @@ -409,6 +402,7 @@ static int powerdns_get_data_dgram (list_item_t *item, /* {{{ */ FUNC_ERROR ("recv"); break; } + buffer_size = status + 1; status = 0; } while (0); @@ -418,7 +412,7 @@ static int powerdns_get_data_dgram (list_item_t *item, /* {{{ */ if (status != 0) return (-1); - buffer_size = status + 1; + assert (buffer_size > 0); buffer = (char *) malloc (buffer_size); if (buffer == NULL) { @@ -426,8 +420,8 @@ static int powerdns_get_data_dgram (list_item_t *item, /* {{{ */ return (-1); } - memcpy (buffer, temp, status); - buffer[status] = 0; + memcpy (buffer, temp, buffer_size - 1); + buffer[buffer_size - 1] = 0; *ret_buffer = buffer; *ret_buffer_size = buffer_size; @@ -625,7 +619,7 @@ static int powerdns_update_recursor_command (list_item_t *li) /* {{{ */ } else { - strcpy (buffer, "get "); + sstrncpy (buffer, "get ", sizeof (buffer)); status = strjoin (&buffer[4], sizeof (buffer) - strlen ("get "), li->fields, li->fields_num, /* seperator = */ " "); @@ -669,12 +663,18 @@ static int powerdns_read_recursor (list_item_t *item) /* {{{ */ ERROR ("powerdns plugin: powerdns_update_recursor_command failed."); return (-1); } + + DEBUG ("powerdns plugin: powerdns_read_recursor: item->command = %s;", + item->command); } assert (item->command != NULL); status = powerdns_get_data (item, &buffer, &buffer_size); if (status != 0) + { + ERROR ("powerdns plugin: powerdns_get_data failed."); return (-1); + } keys_list = strdup (item->command); if (keys_list == NULL) @@ -810,7 +810,7 @@ static int powerdns_config_add_server (oconfig_item_t *ci) /* {{{ */ */ if (strcasecmp ("Server", ci->key) == 0) { - item->server_type = SRV_AUTHORATIVE; + item->server_type = SRV_AUTHORITATIVE; item->func = powerdns_read_server; item->socktype = SOCK_STREAM; socket_temp = strdup (SERVER_SOCKET); @@ -859,15 +859,9 @@ static int powerdns_config_add_server (oconfig_item_t *ci) /* {{{ */ break; } - if (item->command == NULL) - { - ERROR ("powerdns plugin: item->command == NULL."); - status = -1; - break; - } - item->sockaddr.sun_family = AF_UNIX; - sstrncpy (item->sockaddr.sun_path, socket_temp, UNIX_PATH_MAX); + sstrncpy (item->sockaddr.sun_path, socket_temp, + sizeof (item->sockaddr.sun_path)); e = llentry_create (item->instance, item); if (e == NULL) @@ -916,7 +910,7 @@ static int powerdns_config (oconfig_item_t *ci) /* {{{ */ if ((strcasecmp ("Server", option->key) == 0) || (strcasecmp ("Recursor", option->key) == 0)) powerdns_config_add_server (option); - if (strcasecmp ("LocalSocket", option->key) == 0) + else if (strcasecmp ("LocalSocket", option->key) == 0) { char *temp = strdup (option->key); if (temp == NULL)