1 |
bertl |
209251 |
diff -NurpP --minimal --exclude '*.orig' rrdcollect-0.2.4/include/rrdcollect.h rrdcollect-0.2.4-socket/include/rrdcollect.h |
2 |
|
|
--- rrdcollect-0.2.4/include/rrdcollect.h 2009-02-25 15:40:37.000000000 +0100 |
3 |
|
|
+++ rrdcollect-0.2.4-socket/include/rrdcollect.h 2009-05-18 19:13:33.000000000 +0200 |
4 |
|
|
@@ -148,6 +148,7 @@ struct uri_t { |
5 |
|
|
RRDCOLLECT_SNMP |
6 |
|
|
} |
7 |
|
|
*/ |
8 |
|
|
+ unsigned port; |
9 |
|
|
const char *host; |
10 |
|
|
const char *path; |
11 |
|
|
}; |
12 |
|
|
diff -NurpP --minimal --exclude '*.orig' rrdcollect-0.2.4/src/counters.c rrdcollect-0.2.4-socket/src/counters.c |
13 |
|
|
--- rrdcollect-0.2.4/src/counters.c 2009-02-25 15:40:37.000000000 +0100 |
14 |
|
|
+++ rrdcollect-0.2.4-socket/src/counters.c 2009-05-18 19:17:23.000000000 +0200 |
15 |
|
|
@@ -20,6 +20,9 @@ |
16 |
|
|
|
17 |
|
|
#include "rrdcollect.h" |
18 |
|
|
|
19 |
|
|
+#include <netinet/in.h> |
20 |
|
|
+#include <netdb.h> |
21 |
|
|
+ |
22 |
|
|
struct rrd_t **rrd = NULL; |
23 |
|
|
int rrd_count = 0; |
24 |
|
|
|
25 |
|
|
@@ -111,14 +114,29 @@ void perform_tests() |
26 |
|
|
{ |
27 |
|
|
int i; |
28 |
|
|
for (i = 0; i < test_count; i++) { |
29 |
|
|
- FILE *input; |
30 |
|
|
+ FILE *input = NULL; |
31 |
|
|
int n; |
32 |
|
|
int line = 0; |
33 |
|
|
|
34 |
|
|
#ifdef ENABLE_EXEC |
35 |
|
|
/* Horribly ugly and shameful code... */ |
36 |
|
|
- if (*(test[i]->uri->domain) == 'e') { /* exec */ |
37 |
|
|
+ if (strcmp(test[i]->uri->domain, "exec") == 0) { |
38 |
|
|
input = popen(test[i]->uri->path, "r"); |
39 |
|
|
+ } else if (strcmp(test[i]->uri->domain, "socket") == 0) { |
40 |
|
|
+ int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); |
41 |
|
|
+ struct sockaddr_in server; |
42 |
|
|
+ struct hostent *host; |
43 |
|
|
+ |
44 |
|
|
+ server.sin_family = AF_INET; |
45 |
|
|
+ server.sin_port = htons(test[i]->uri->port); |
46 |
|
|
+ server.sin_addr.s_addr = htonl(INADDR_LOOPBACK); |
47 |
|
|
+ |
48 |
|
|
+ host = gethostbyname(test[i]->uri->host); |
49 |
|
|
+ if (host) |
50 |
|
|
+ server.sin_addr.s_addr = *(uint32_t *)host->h_addr_list[0]; |
51 |
|
|
+ |
52 |
|
|
+ if (connect(sock, (struct sockaddr *)&server, sizeof(server)) >= 0) |
53 |
|
|
+ input = fdopen(sock, "r"); |
54 |
|
|
} else { /* file */ |
55 |
|
|
#endif /* ENABLE_EXEC */ |
56 |
|
|
input = fopen(test[i]->uri->path, "r"); |
57 |
|
|
@@ -127,7 +145,7 @@ void perform_tests() |
58 |
|
|
#endif /* ENABLE_EXEC */ |
59 |
|
|
|
60 |
|
|
if (!input) { |
61 |
|
|
- send_log(LOG_ERR, "Cannot open file %s: %s\n", test[i]->uri->path, strerror(errno)); |
62 |
|
|
+ send_log(LOG_ERR, "Cannot open %s: %s\n", test[i]->uri->path, strerror(errno)); |
63 |
|
|
errno = 0; |
64 |
|
|
continue; /* FIXME: more intelligent error handling! */ |
65 |
|
|
} |
66 |
|
|
@@ -157,7 +175,7 @@ void perform_tests() |
67 |
|
|
} |
68 |
|
|
|
69 |
|
|
#ifdef ENABLE_EXEC |
70 |
|
|
- if (*(test[i]->uri->domain) == 'e') { /* exec */ |
71 |
|
|
+ if (strcmp(test[i]->uri->domain, "exec") == 0) { |
72 |
|
|
pclose(input); |
73 |
|
|
} else { |
74 |
|
|
#endif /* ENABLE_EXEC */ |
75 |
|
|
diff -NurpP --minimal --exclude '*.orig' rrdcollect-0.2.4/src/parse.c rrdcollect-0.2.4-socket/src/parse.c |
76 |
|
|
--- rrdcollect-0.2.4/src/parse.c 2009-02-25 15:41:24.000000000 +0100 |
77 |
|
|
+++ rrdcollect-0.2.4-socket/src/parse.c 2009-05-18 19:20:23.000000000 +0200 |
78 |
|
|
@@ -164,28 +164,39 @@ static char *find_host_end(char *line) |
79 |
|
|
static int get_uri(char *domain, struct uri_t *uri) |
80 |
|
|
{ |
81 |
|
|
char *dend, *host, *path; |
82 |
|
|
+ char *port; |
83 |
|
|
|
84 |
|
|
if (!(dend = find_domain_end(domain))) |
85 |
|
|
return 1; |
86 |
|
|
|
87 |
|
|
- host = dend+2; |
88 |
|
|
+ host = dend + 3; |
89 |
|
|
|
90 |
|
|
if (!(path = find_host_end(host))) |
91 |
|
|
return 2; |
92 |
|
|
|
93 |
|
|
- /* FIXME: smarted domain handling!!! */ |
94 |
|
|
+ /* FIXME: smarter domain handling!!! */ |
95 |
|
|
if (strncmp(domain, "file", dend-domain) |
96 |
|
|
#ifdef ENABLE_EXEC |
97 |
|
|
- && strncmp(domain, "exec", dend-domain) |
98 |
|
|
+ && strncmp(domain, "exec", dend-domain) |
99 |
|
|
#endif /* ENABLE_EXEC*/ |
100 |
|
|
+ && strncmp(domain, "socket", dend-domain) |
101 |
|
|
) { |
102 |
|
|
return 3; |
103 |
|
|
} |
104 |
|
|
|
105 |
|
|
+ uri->path = strdup(path); |
106 |
|
|
+ |
107 |
|
|
/* Now we can modify the line */ |
108 |
|
|
- *(path++) = '\0'; |
109 |
|
|
+ *path = '\0'; |
110 |
|
|
*dend = '\0'; |
111 |
|
|
|
112 |
|
|
+ /* check for port */ |
113 |
|
|
+ if ((port = index(host, ':'))) { |
114 |
|
|
+ uri->port = atoi(port + 1); |
115 |
|
|
+ *port = '\0'; |
116 |
|
|
+ } else |
117 |
|
|
+ uri->port = 0; |
118 |
|
|
+ |
119 |
|
|
#ifdef ENABLE_EXEC |
120 |
|
|
if(strcmp(domain,"exec")==0) { |
121 |
|
|
if(path[0]!='/') { |
122 |
|
|
@@ -199,7 +210,6 @@ static int get_uri(char *domain, struct |
123 |
|
|
|
124 |
|
|
uri->domain = strdup(domain); |
125 |
|
|
uri->host = strdup(host); |
126 |
|
|
- uri->path = strdup(path); |
127 |
|
|
|
128 |
|
|
return 0; |
129 |
|
|
} |
130 |
|
|
diff -NurpP --minimal --exclude '*.orig' rrdcollect-0.2.4/src/scan.c rrdcollect-0.2.4-socket/src/scan.c |
131 |
|
|
--- rrdcollect-0.2.4/src/scan.c 2007-07-28 18:42:49.000000000 +0200 |
132 |
|
|
+++ rrdcollect-0.2.4-socket/src/scan.c 2009-05-18 19:24:15.000000000 +0200 |
133 |
|
|
@@ -185,8 +185,13 @@ int scan(const char *buf, const char *fm |
134 |
|
|
fmt++; |
135 |
|
|
break; |
136 |
|
|
|
137 |
|
|
- case ' ': |
138 |
|
|
case '\t': |
139 |
|
|
+ /* match zero spaces too */ |
140 |
|
|
+ if(!isspace(*(buf))) { |
141 |
|
|
+ fmt++; |
142 |
|
|
+ break; |
143 |
|
|
+ } |
144 |
|
|
+ case ' ': |
145 |
|
|
case '\n': |
146 |
|
|
case '\r': |
147 |
|
|
case '\f': |