X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Funixsock.c;h=522271c6627e52913d454b656dbaf6d983bf229c;hp=8ccde80b9342e1c4aac0f6af4d24a1e6dbc1db34;hb=d486225f89ea52d8ed2b4242eba2ad94c409f837;hpb=6026e3162e522b133d10596710527d24c2921b55 diff --git a/src/unixsock.c b/src/unixsock.c index 8ccde80b..522271c6 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -55,14 +55,14 @@ static const char *config_keys[] = {"SocketFile", "SocketGroup", "SocketPerms", "DeleteSocket"}; static int config_keys_num = STATIC_ARRAY_SIZE(config_keys); -static int loop = 0; +static int loop; /* socket configuration */ static int sock_fd = -1; -static char *sock_file = NULL; -static char *sock_group = NULL; +static char *sock_file; +static char *sock_group; static int sock_perms = S_IRWXU | S_IRWXG; -static _Bool delete_socket = 0; +static bool delete_socket; static pthread_t listen_thread = (pthread_t)0; @@ -75,9 +75,7 @@ static int us_open_socket(void) { sock_fd = socket(PF_UNIX, SOCK_STREAM, 0); if (sock_fd < 0) { - char errbuf[1024]; - ERROR("unixsock plugin: socket failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: socket failed: %s", STRERRNO); return -1; } @@ -91,9 +89,8 @@ static int us_open_socket(void) { errno = 0; status = unlink(sa.sun_path); if ((status != 0) && (errno != ENOENT)) { - char errbuf[1024]; WARNING("unixsock plugin: Deleting socket file \"%s\" failed: %s", - sa.sun_path, sstrerror(errno, errbuf, sizeof(errbuf))); + sa.sun_path, STRERRNO); } else if (status == 0) { INFO("unixsock plugin: Successfully deleted socket file \"%s\".", sa.sun_path); @@ -102,9 +99,7 @@ static int us_open_socket(void) { status = bind(sock_fd, (struct sockaddr *)&sa, sizeof(sa)); if (status != 0) { - char errbuf[1024]; - sstrerror(errno, errbuf, sizeof(errbuf)); - ERROR("unixsock plugin: bind failed: %s", errbuf); + ERROR("unixsock plugin: bind failed: %s", STRERRNO); close(sock_fd); sock_fd = -1; return -1; @@ -112,9 +107,7 @@ static int us_open_socket(void) { status = chmod(sa.sun_path, sock_perms); if (status == -1) { - char errbuf[1024]; - ERROR("unixsock plugin: chmod failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: chmod failed: %s", STRERRNO); close(sock_fd); sock_fd = -1; return -1; @@ -122,9 +115,7 @@ static int us_open_socket(void) { status = listen(sock_fd, 8); if (status != 0) { - char errbuf[1024]; - ERROR("unixsock plugin: listen failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: listen failed: %s", STRERRNO); close(sock_fd); sock_fd = -1; return -1; @@ -134,16 +125,21 @@ static int us_open_socket(void) { const char *grpname; struct group *g; struct group sg; - char grbuf[2048]; + + long int grbuf_size = sysconf(_SC_GETGR_R_SIZE_MAX); + if (grbuf_size <= 0) + grbuf_size = sysconf(_SC_PAGESIZE); + if (grbuf_size <= 0) + grbuf_size = 4096; + char grbuf[grbuf_size]; grpname = (sock_group != NULL) ? sock_group : COLLECTD_GRP_NAME; g = NULL; status = getgrnam_r(grpname, &sg, grbuf, sizeof(grbuf), &g); if (status != 0) { - char errbuf[1024]; WARNING("unixsock plugin: getgrnam_r (%s) failed: %s", grpname, - sstrerror(errno, errbuf, sizeof(errbuf))); + STRERROR(status)); break; } if (g == NULL) { @@ -153,10 +149,9 @@ static int us_open_socket(void) { if (chown((sock_file != NULL) ? sock_file : US_DEFAULT_PATH, (uid_t)-1, g->gr_gid) != 0) { - char errbuf[1024]; WARNING("unixsock plugin: chown (%s, -1, %i) failed: %s", (sock_file != NULL) ? sock_file : US_DEFAULT_PATH, (int)g->gr_gid, - sstrerror(errno, errbuf, sizeof(errbuf))); + STRERRNO); } } while (0); @@ -176,18 +171,14 @@ static void *us_handle_client(void *arg) { fdout = dup(fdin); if (fdout < 0) { - char errbuf[1024]; - ERROR("unixsock plugin: dup failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: dup failed: %s", STRERRNO); close(fdin); pthread_exit((void *)1); } fhin = fdopen(fdin, "r"); if (fhin == NULL) { - char errbuf[1024]; - ERROR("unixsock plugin: fdopen failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: fdopen failed: %s", STRERRNO); close(fdin); close(fdout); pthread_exit((void *)1); @@ -196,9 +187,7 @@ static void *us_handle_client(void *arg) { fhout = fdopen(fdout, "w"); if (fhout == NULL) { - char errbuf[1024]; - ERROR("unixsock plugin: fdopen failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: fdopen failed: %s", STRERRNO); fclose(fhin); /* this closes fdin as well */ close(fdout); pthread_exit((void *)1); @@ -207,9 +196,7 @@ static void *us_handle_client(void *arg) { /* change output buffer to line buffered mode */ if (setvbuf(fhout, NULL, _IOLBF, 0) != 0) { - char errbuf[1024]; - ERROR("unixsock plugin: setvbuf failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: setvbuf failed: %s", STRERRNO); fclose(fhin); fclose(fhout); pthread_exit((void *)1); @@ -229,9 +216,8 @@ static void *us_handle_client(void *arg) { continue; if (errno != 0) { - char errbuf[1024]; WARNING("unixsock plugin: failed to read from socket #%i: %s", - fileno(fhin), sstrerror(errno, errbuf, sizeof(errbuf))); + fileno(fhin), STRERRNO); } break; } @@ -270,9 +256,8 @@ static void *us_handle_client(void *arg) { cmd_handle_flush(fhout, buffer); } else { if (fprintf(fhout, "-1 Unknown command: %s\n", fields[0]) < 0) { - char errbuf[1024]; WARNING("unixsock plugin: failed to write to socket #%i: %s", - fileno(fhout), sstrerror(errno, errbuf, sizeof(errbuf))); + fileno(fhout), STRERRNO); break; } } @@ -302,13 +287,11 @@ static void *us_server_thread(void __attribute__((unused)) * arg) { DEBUG("unixsock plugin: Calling accept.."); status = accept(sock_fd, NULL, NULL); if (status < 0) { - char errbuf[1024]; if (errno == EINTR) continue; - ERROR("unixsock plugin: accept failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: accept failed: %s", STRERRNO); close(sock_fd); sock_fd = -1; pthread_attr_destroy(&th_attr); @@ -317,9 +300,7 @@ static void *us_server_thread(void __attribute__((unused)) * arg) { remote_fd = malloc(sizeof(*remote_fd)); if (remote_fd == NULL) { - char errbuf[1024]; - WARNING("unixsock plugin: malloc failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + WARNING("unixsock plugin: malloc failed: %s", STRERRNO); close(status); continue; } @@ -330,9 +311,7 @@ static void *us_server_thread(void __attribute__((unused)) * arg) { status = plugin_thread_create(&th, &th_attr, us_handle_client, (void *)remote_fd, "unixsock conn"); if (status != 0) { - char errbuf[1024]; - WARNING("unixsock plugin: pthread_create failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + WARNING("unixsock plugin: pthread_create failed: %s", STRERRNO); close(*remote_fd); free(remote_fd); continue; @@ -345,10 +324,8 @@ static void *us_server_thread(void __attribute__((unused)) * arg) { status = unlink((sock_file != NULL) ? sock_file : US_DEFAULT_PATH); if (status != 0) { - char errbuf[1024]; NOTICE("unixsock plugin: unlink (%s) failed: %s", - (sock_file != NULL) ? sock_file : US_DEFAULT_PATH, - sstrerror(errno, errbuf, sizeof(errbuf))); + (sock_file != NULL) ? sock_file : US_DEFAULT_PATH, STRERRNO); } return (void *)0; @@ -373,9 +350,9 @@ static int us_config(const char *key, const char *val) { sock_perms = (int)strtol(val, NULL, 8); } else if (strcasecmp(key, "DeleteSocket") == 0) { if (IS_TRUE(val)) - delete_socket = 1; + delete_socket = true; else - delete_socket = 0; + delete_socket = false; } else { return -1; } @@ -384,7 +361,7 @@ static int us_config(const char *key, const char *val) { } /* int us_config */ static int us_init(void) { - static int have_init = 0; + static int have_init; int status; @@ -398,9 +375,7 @@ static int us_init(void) { status = plugin_thread_create(&listen_thread, NULL, us_server_thread, NULL, "unixsock listen"); if (status != 0) { - char errbuf[1024]; - ERROR("unixsock plugin: pthread_create failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("unixsock plugin: pthread_create failed: %s", STRERRNO); return -1; }