/*
- * Copyright (C) 2010-2014 jeanfi@gmail.com
+ * Copyright (C) 2010-2016 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
"Page not found - Go to <a href='/'>Main page</a></p></body>"))
static struct option long_options[] = {
- {"version", no_argument, 0, 'v'},
- {"help", no_argument, 0, 'h'},
- {"port", required_argument, 0, 'p'},
- {"wdir", required_argument, 0, 'w'},
- {"debug", required_argument, 0, 'd'},
- {"log-file", required_argument, 0, 'l'},
- {"sensor-log-file", required_argument, 0, 0},
- {"sensor-log-interval", required_argument, 0, 0},
- {0, 0, 0, 0}
+ {"version", no_argument, NULL, 'v'},
+ {"help", no_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"wdir", required_argument, NULL, 'w'},
+ {"debug", required_argument, NULL, 'd'},
+ {"log-file", required_argument, NULL, 'l'},
+ {"sensor-log-file", required_argument, NULL, 0},
+ {"sensor-log-interval", required_argument, NULL, 0},
+ {NULL, 0, NULL, 0}
};
static struct server_data server_data;
static int server_stop_requested;
-static void print_version()
+static void print_version(void)
{
printf("psensor-server %s\n", VERSION);
printf(_("Copyright (C) %s jeanfi@gmail.com\n"
"2010-2012");
}
-static void print_help()
+static void print_help(void)
{
printf(_("Usage: %s [OPTION]...\n"), program_name);
return NULL;
}
+static int is_access_allowed(char *path)
+{
+ char *rpath;
+ int n, ret;
+
+ rpath = realpath(path, NULL);
+ if (rpath) {
+ n = strlen(server_data.www_dir);
+ if (!strncmp(server_data.www_dir, rpath, n)
+ || !strcmp(rpath,
+ "/usr/share/javascript/jquery/jquery.js")) {
+ ret = 1;
+ } else {
+ ret = 0;
+
+ log_err(_("Resource access refused %s real path is %s"),
+ path,
+ rpath);
+ }
+
+ free(rpath);
+ } else {
+ log_err(_("Cannot get real path of %s"), path);
+
+ ret = 0;
+ }
+
+ return ret;
+}
+
static struct MHD_Response *
create_response(const char *nurl, const char *method, unsigned int *rp_code)
{
- char *page, *fpath, *rpath;
+ char *page, *fpath;
struct MHD_Response *resp = NULL;
- int n;
if (!strncmp(nurl, URL_BASE_API_1_1, strlen(URL_BASE_API_1_1))) {
resp = create_response_api(nurl, method, rp_code);
} else {
fpath = get_path(nurl, server_data.www_dir);
- rpath = realpath(fpath, NULL);
- if (rpath) {
- n = strlen(server_data.www_dir);
- if (!strncmp(server_data.www_dir, rpath, n))
- resp = create_response_file(nurl,
- method,
- rp_code,
- fpath);
- free(rpath);
- }
+ if (is_access_allowed(fpath))
+ resp = create_response_file(nurl,
+ method,
+ rp_code,
+ fpath);
free(fpath);
}
const char *method,
const char *version,
const char *upload_data,
- size_t *upload_data_size, void **ptr)
+ size_t *upload_data_size,
+ void **ptr)
{
static int dummy;
struct MHD_Response *response;
if (&dummy != *ptr) {
/* The first time only the headers are valid, do not
- respond in the first round... */
+ * respond in the first round...
+ */
*ptr = &dummy;
return MHD_YES;
}
server_data.cpu_usage = create_cpu_usage_sensor(600);
#endif
- if (!*server_data.sensors)
+ if (!server_data.sensors || !*server_data.sensors)
log_err(_("No sensors detected."));
d = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION,
psensor_free(server_data.cpu_usage);
#endif
free(server_data.www_dir);
- sensors_cleanup();
+ lmsensor_cleanup();
#ifdef HAVE_GTOP
sysinfo_cleanup();