@cryptotaxi247 / netdata-1 / commits / c297ed5af

properly escape names before sending them to backends

Costa Tsaousis (ktsaou) committed Jul 8, 2017 at 01:18 UTC c297ed5afbdc928483ab09d9cae5933c48a3c25d
1 file changed +42 -8
src/backends.c
+42 -8
@@ -31,6 +31,20 @@ int backend_send_names = 1;
31 // ----------------------------------------------------------------------------
32 // helper functions for backends
33
34 +static inline size_t backend_name_copy(char *d, const char *s, size_t usable) {
35 + size_t n;
36 +
37 + for(n = 0; *s && n < usable ; d++, s++, n++) {
38 + char c = *s;
39 +
40 + if(!isalnum(c)) *d = '_';
41 + else *d = c;
42 + }
43 + *d = '\0';
44 +
45 + return n;
46 +}
47 +
48 // calculate the SUM or AVERAGE of a dimension, for any timeframe
49 // may return NAN if the database does not have any value in the give timeframe
50
@@ -157,13 +171,18 @@ static inline int format_dimension_collected_graphite_plaintext(
171 (void)before;
172 (void)options;
173
174 + char chart_name[RRD_ID_LENGTH_MAX + 1];
175 + char dimension_name[RRD_ID_LENGTH_MAX + 1];
176 + backend_name_copy(chart_name, (backend_send_names && st->name)?st->name:st->id, RRD_ID_LENGTH_MAX);
177 + backend_name_copy(dimension_name, (backend_send_names && rd->name)?rd->name:rd->id, RRD_ID_LENGTH_MAX);
178 +
179 buffer_sprintf(
180 b
181 , "%s.%s.%s.%s " COLLECTED_NUMBER_FORMAT " %u\n"
182 , prefix
183 , hostname
165 - , (backend_send_names && st->name)?st->name:st->id
166 - , (backend_send_names && rd->name)?rd->name:rd->id
184 + , chart_name
185 + , dimension_name
186 , rd->last_collected_value
187 , (uint32_t)rd->last_collected_time.tv_sec
188 );
@@ -184,6 +203,11 @@ static inline int format_dimension_stored_graphite_plaintext(
203 ) {
204 (void)host;
205
206 + char chart_name[RRD_ID_LENGTH_MAX + 1];
207 + char dimension_name[RRD_ID_LENGTH_MAX + 1];
208 + backend_name_copy(chart_name, (backend_send_names && st->name)?st->name:st->id, RRD_ID_LENGTH_MAX);
209 + backend_name_copy(dimension_name, (backend_send_names && rd->name)?rd->name:rd->id, RRD_ID_LENGTH_MAX);
210 +
211 calculated_number value = backend_calculate_value_from_stored_data(st, rd, after, before, options);
212
213 if(!isnan(value)) {
@@ -193,8 +217,8 @@ static inline int format_dimension_stored_graphite_plaintext(
217 , "%s.%s.%s.%s " CALCULATED_NUMBER_FORMAT " %u\n"
218 , prefix
219 , hostname
196 - , (backend_send_names && st->name)?st->name:st->id
197 - , (backend_send_names && rd->name)?rd->name:rd->id
220 + , chart_name
221 + , dimension_name
222 , value
223 , (uint32_t) before
224 );
@@ -228,12 +252,17 @@ static inline int format_dimension_collected_opentsdb_telnet(
252 (void)before;
253 (void)options;
254
255 + char chart_name[RRD_ID_LENGTH_MAX + 1];
256 + char dimension_name[RRD_ID_LENGTH_MAX + 1];
257 + backend_name_copy(chart_name, (backend_send_names && st->name)?st->name:st->id, RRD_ID_LENGTH_MAX);
258 + backend_name_copy(dimension_name, (backend_send_names && rd->name)?rd->name:rd->id, RRD_ID_LENGTH_MAX);
259 +
260 buffer_sprintf(
261 b
262 , "put %s.%s.%s %u " COLLECTED_NUMBER_FORMAT " host=%s%s%s\n"
263 , prefix
235 - , (backend_send_names && st->name)?st->name:st->id
236 - , (backend_send_names && rd->name)?rd->name:rd->id
264 + , chart_name
265 + , dimension_name
266 , (uint32_t)rd->last_collected_time.tv_sec
267 , rd->last_collected_value
268 , hostname
@@ -259,14 +288,19 @@ static inline int format_dimension_stored_opentsdb_telnet(
288
289 calculated_number value = backend_calculate_value_from_stored_data(st, rd, after, before, options);
290
291 + char chart_name[RRD_ID_LENGTH_MAX + 1];
292 + char dimension_name[RRD_ID_LENGTH_MAX + 1];
293 + backend_name_copy(chart_name, (backend_send_names && st->name)?st->name:st->id, RRD_ID_LENGTH_MAX);
294 + backend_name_copy(dimension_name, (backend_send_names && rd->name)?rd->name:rd->id, RRD_ID_LENGTH_MAX);
295 +
296 if(!isnan(value)) {
297
298 buffer_sprintf(
299 b
300 , "put %s.%s.%s %u " CALCULATED_NUMBER_FORMAT " host=%s%s%s\n"
301 , prefix
268 - , (backend_send_names && st->name)?st->name:st->id
269 - , (backend_send_names && rd->name)?rd->name:rd->id
302 + , chart_name
303 + , dimension_name
304 , (uint32_t) before
305 , value
306 , hostname