X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpowerdns.c;h=189c46fec1bbf2cb7383096418da4b5649f94d97;hb=8bc093a2476f2bef751c9d3d9e382a7e62d060b3;hp=672b505c7af0f1276eea7da0b8a691757e341332;hpb=bab707fe46b2ef69f391864f3bb08b4dca19634e;p=collectd.git diff --git a/src/powerdns.c b/src/powerdns.c index 672b505c..189c46fe 100644 --- a/src/powerdns.c +++ b/src/powerdns.c @@ -45,10 +45,10 @@ #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_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" @@ -402,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); @@ -411,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) { @@ -419,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; @@ -618,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 = */ " "); @@ -662,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) @@ -852,13 +859,6 @@ 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, sizeof (item->sockaddr.sun_path));