X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_daemon.c;h=4c3d7ed4653d30256c35909a15cc7b1c7e2fb285;hp=6fda921be36cb754261ac7b06b88d9e21f8d9fd0;hb=cea28dc31a16fcc1f1b8b95aee3fada2fbd2aca0;hpb=3790ee46225952fe7410343ecc4b9702cf70e421 diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c index 6fda921..4c3d7ed 100644 --- a/src/rrd_daemon.c +++ b/src/rrd_daemon.c @@ -1476,13 +1476,11 @@ static int handle_request_update (HANDLER_PROTO) /* {{{ */ static int handle_request_fetch (HANDLER_PROTO) /* {{{ */ { - char *file; + char *file, file_tmp[PATH_MAX]; char *cf; char *start_str; char *end_str; - rrd_time_value_t start_tv; - rrd_time_value_t end_tv; time_t start_tm; time_t end_tm; @@ -1532,43 +1530,63 @@ static int handle_request_fetch (HANDLER_PROTO) /* {{{ */ if (status != 0) return (syntax_error(sock,cmd)); + get_abs_path(&file, file_tmp); + if (!check_file_access(file, sock)) return 0; + status = flush_file (file); if ((status != 0) && (status != ENOENT)) return (send_response (sock, RESP_ERR, "flush_file (%s) failed with status %i.\n", file, status)); + t = time (NULL); /* "now" */ + /* Parse start time */ if (start_str != NULL) { - const char *errmsg; + char *endptr; + long value; - errmsg = rrd_parsetime (start_str, &start_tv); - if (errmsg != NULL) + endptr = NULL; + errno = 0; + value = strtol (start_str, &endptr, /* base = */ 0); + if ((endptr == start_str) || (errno != 0)) return (send_response(sock, RESP_ERR, - "Cannot parse start time `%s': %s\n", start_str, errmsg)); + "Cannot parse start time `%s': Only simple integers are allowed.\n", + start_str)); + + if (value > 0) + start_tm = (time_t) value; + else + start_tm = (time_t) (t + value); } else - rrd_parsetime ("-86400", &start_tv); + { + start_tm = t - 86400; + } /* Parse end time */ if (end_str != NULL) { - const char *errmsg; + char *endptr; + long value; - errmsg = rrd_parsetime (end_str, &end_tv); - if (errmsg != NULL) + endptr = NULL; + errno = 0; + value = strtol (end_str, &endptr, /* base = */ 0); + if ((endptr == end_str) || (errno != 0)) return (send_response(sock, RESP_ERR, - "Cannot parse end time `%s': %s\n", end_str, errmsg)); + "Cannot parse end time `%s': Only simple integers are allowed.\n", + end_str)); + + if (value > 0) + end_tm = (time_t) value; + else + end_tm = (time_t) (t + value); } else - rrd_parsetime ("now", &end_tv); - - start_tm = 0; - end_tm = 0; - status = rrd_proc_start_end (&start_tv, &end_tv, &start_tm, &end_tm); - if (status != 0) - return (send_response(sock, RESP_ERR, - "rrd_proc_start_end failed: %s\n", rrd_get_error ())); + { + end_tm = t; + } step = -1; ds_cnt = 0; @@ -1613,7 +1631,9 @@ static int handle_request_fetch (HANDLER_PROTO) /* {{{ */ if (i > 0) SSTRCAT (linebuf, " ", linebuf_fill); SSTRCAT (linebuf, ds_namv[i], linebuf_fill); + rrd_freemem(ds_namv[i]); } + rrd_freemem(ds_namv); add_response_info (sock, "DSName: %s\n", linebuf); } @@ -1639,6 +1659,7 @@ static int handle_request_fetch (HANDLER_PROTO) /* {{{ */ add_response_info (sock, "%10lu:%s\n", (unsigned long) t, linebuf); } /* for (t) */ + rrd_freemem(data); return (send_response (sock, RESP_OK, "Success\n")); #undef SSTRCAT