projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
redis plugin: Fixed bug of Timeout option
[collectd.git]
/
src
/
unixsock.c
diff --git
a/src/unixsock.c
b/src/unixsock.c
index
00b930e
..
8c08e18
100644
(file)
--- 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);
"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;
/* 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 int sock_perms = S_IRWXU | S_IRWXG;
-static
_Bool delete_socket = 0
;
+static
bool delete_socket
;
static pthread_t listen_thread = (pthread_t)0;
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) {
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;
}
return -1;
}
@@
-91,9
+89,8
@@
static int us_open_socket(void) {
errno = 0;
status = unlink(sa.sun_path);
if ((status != 0) && (errno != ENOENT)) {
errno = 0;
status = unlink(sa.sun_path);
if ((status != 0) && (errno != ENOENT)) {
- char errbuf[1024];
WARNING("unixsock plugin: Deleting socket file \"%s\" failed: %s",
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);
} 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) {
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;
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) {
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;
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) {
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;
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;
const char *grpname;
struct group *g;
struct group sg;
- char grbuf[4096];
+
+ 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) {
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,
WARNING("unixsock plugin: getgrnam_r (%s) failed: %s", grpname,
-
sstrerror(status, errbuf, sizeof(errbuf)
));
+
STRERROR(status
));
break;
}
if (g == NULL) {
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) {
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,
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);
}
} while (0);
@@
-176,18
+171,14
@@
static void *us_handle_client(void *arg) {
fdout = dup(fdin);
if (fdout < 0) {
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) {
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);
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) {
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);
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) {
/* 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);
fclose(fhin);
fclose(fhout);
pthread_exit((void *)1);
@@
-221,7
+208,6
@@
static void *us_handle_client(void *arg) {
char buffer_copy[1024];
char *fields[128];
int fields_num;
char buffer_copy[1024];
char *fields[128];
int fields_num;
- int len;
errno = 0;
if (fgets(buffer, sizeof(buffer), fhin) == NULL) {
errno = 0;
if (fgets(buffer, sizeof(buffer), fhin) == NULL) {
@@
-229,14
+215,13
@@
static void *us_handle_client(void *arg) {
continue;
if (errno != 0) {
continue;
if (errno != 0) {
- char errbuf[1024];
WARNING("unixsock plugin: failed to read from socket #%i: %s",
WARNING("unixsock plugin: failed to read from socket #%i: %s",
- fileno(fhin),
sstrerror(errno, errbuf, sizeof(errbuf))
);
+ fileno(fhin),
STRERRNO
);
}
break;
}
}
break;
}
- len = strlen(buffer);
+
size_t
len = strlen(buffer);
while ((len > 0) &&
((buffer[len - 1] == '\n') || (buffer[len - 1] == '\r')))
buffer[--len] = '\0';
while ((len > 0) &&
((buffer[len - 1] == '\n') || (buffer[len - 1] == '\r')))
buffer[--len] = '\0';
@@
-270,9
+255,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) {
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",
WARNING("unixsock plugin: failed to write to socket #%i: %s",
- fileno(fhout),
sstrerror(errno, errbuf, sizeof(errbuf))
);
+ fileno(fhout),
STRERRNO
);
break;
}
}
break;
}
}
@@
-302,13
+286,11
@@
static void *us_server_thread(void __attribute__((unused)) * arg) {
DEBUG("unixsock plugin: Calling accept..");
status = accept(sock_fd, NULL, NULL);
if (status < 0) {
DEBUG("unixsock plugin: Calling accept..");
status = accept(sock_fd, NULL, NULL);
if (status < 0) {
- char errbuf[1024];
if (errno == EINTR)
continue;
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);
close(sock_fd);
sock_fd = -1;
pthread_attr_destroy(&th_attr);
@@
-317,9
+299,7
@@
static void *us_server_thread(void __attribute__((unused)) * arg) {
remote_fd = malloc(sizeof(*remote_fd));
if (remote_fd == NULL) {
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;
}
close(status);
continue;
}
@@
-330,9
+310,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) {
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;
close(*remote_fd);
free(remote_fd);
continue;
@@
-345,10
+323,8
@@
static void *us_server_thread(void __attribute__((unused)) * arg) {
status = unlink((sock_file != NULL) ? sock_file : US_DEFAULT_PATH);
if (status != 0) {
status = unlink((sock_file != NULL) ? sock_file : US_DEFAULT_PATH);
if (status != 0) {
- char errbuf[1024];
NOTICE("unixsock plugin: unlink (%s) failed: %s",
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;
}
return (void *)0;
@@
-373,9
+349,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))
sock_perms = (int)strtol(val, NULL, 8);
} else if (strcasecmp(key, "DeleteSocket") == 0) {
if (IS_TRUE(val))
- delete_socket =
1
;
+ delete_socket =
true
;
else
else
- delete_socket =
0
;
+ delete_socket =
false
;
} else {
return -1;
}
} else {
return -1;
}
@@
-384,7
+360,7
@@
static int us_config(const char *key, const char *val) {
} /* int us_config */
static int us_init(void) {
} /* int us_config */
static int us_init(void) {
- static int have_init
= 0
;
+ static int have_init;
int status;
int status;
@@
-398,9
+374,7
@@
static int us_init(void) {
status = plugin_thread_create(&listen_thread, NULL, us_server_thread, NULL,
"unixsock listen");
if (status != 0) {
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;
}
return -1;
}