mirror of
https://github.com/cesanta/mongoose.git
synced 2025-08-06 05:26:15 +08:00
Checking path existence
This commit is contained in:
parent
8ae0400b0d
commit
83a9a726d3
@ -77,6 +77,8 @@ static int exit_flag;
|
|||||||
static char server_name[50]; // Set by init_server_name()
|
static char server_name[50]; // Set by init_server_name()
|
||||||
static char config_file[PATH_MAX]; // Set by process_command_line_arguments()
|
static char config_file[PATH_MAX]; // Set by process_command_line_arguments()
|
||||||
static struct mg_server *server; // Set by start_mongoose()
|
static struct mg_server *server; // Set by start_mongoose()
|
||||||
|
static const char *s_default_document_root = ".";
|
||||||
|
static const char *s_default_listening_port = "8080";
|
||||||
|
|
||||||
#if !defined(CONFIG_FILE)
|
#if !defined(CONFIG_FILE)
|
||||||
#define CONFIG_FILE "mongoose.conf"
|
#define CONFIG_FILE "mongoose.conf"
|
||||||
@ -263,16 +265,18 @@ static char *get_option(char **options, const char *option_name) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void verify_existence(char **options, const char *option_name,
|
static int path_exists(const char *path, int is_dir) {
|
||||||
int must_be_dir) {
|
|
||||||
file_stat_t st;
|
file_stat_t st;
|
||||||
const char *path = get_option(options, option_name);
|
return path == NULL || (stat(path, &st) == 0 &&
|
||||||
|
((S_ISDIR(st.st_mode) ? 1 : 0) == is_dir));
|
||||||
|
}
|
||||||
|
|
||||||
if (path != NULL && (stat(path, &st) != 0 ||
|
static void verify_existence(char **options, const char *name, int is_dir) {
|
||||||
((S_ISDIR(st.st_mode) ? 1 : 0) != must_be_dir))) {
|
const char *path = get_option(options, name);
|
||||||
|
if (!path_exists(path, is_dir)) {
|
||||||
notify("Invalid path for %s: [%s]: (%s). Make sure that path is either "
|
notify("Invalid path for %s: [%s]: (%s). Make sure that path is either "
|
||||||
"absolute, or it is relative to mongoose executable.",
|
"absolute, or it is relative to mongoose executable.",
|
||||||
option_name, path, strerror(errno));
|
name, path, strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,8 +400,8 @@ static void start_mongoose(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
options[0] = NULL;
|
options[0] = NULL;
|
||||||
set_option(options, "document_root", ".");
|
set_option(options, "document_root", s_default_document_root);
|
||||||
set_option(options, "listening_port", "8080");
|
set_option(options, "listening_port", s_default_listening_port);
|
||||||
|
|
||||||
// Update config based on command line arguments
|
// Update config based on command line arguments
|
||||||
process_command_line_arguments(argv, options);
|
process_command_line_arguments(argv, options);
|
||||||
@ -405,13 +409,19 @@ static void start_mongoose(int argc, char *argv[]) {
|
|||||||
// Make sure we have absolute paths for files and directories
|
// Make sure we have absolute paths for files and directories
|
||||||
// https://github.com/valenok/mongoose/issues/181
|
// https://github.com/valenok/mongoose/issues/181
|
||||||
set_absolute_path(options, "document_root", argv[0]);
|
set_absolute_path(options, "document_root", argv[0]);
|
||||||
set_absolute_path(options, "put_delete_auth_file", argv[0]);
|
set_absolute_path(options, "dav_auth_file", argv[0]);
|
||||||
set_absolute_path(options, "cgi_interpreter", argv[0]);
|
set_absolute_path(options, "cgi_interpreter", argv[0]);
|
||||||
set_absolute_path(options, "access_log_file", argv[0]);
|
set_absolute_path(options, "access_log_file", argv[0]);
|
||||||
set_absolute_path(options, "error_log_file", argv[0]);
|
|
||||||
set_absolute_path(options, "global_auth_file", argv[0]);
|
set_absolute_path(options, "global_auth_file", argv[0]);
|
||||||
set_absolute_path(options, "ssl_certificate", argv[0]);
|
set_absolute_path(options, "ssl_certificate", argv[0]);
|
||||||
|
|
||||||
|
if (!path_exists(get_option(options, "document_root"), 1)) {
|
||||||
|
set_option(options, "document_root", s_default_document_root);
|
||||||
|
set_absolute_path(options, "document_root", argv[0]);
|
||||||
|
notify("Setting document_root to [%s]",
|
||||||
|
mg_get_option(server, "document_root"));
|
||||||
|
}
|
||||||
|
|
||||||
// Make extra verification for certain options
|
// Make extra verification for certain options
|
||||||
verify_existence(options, "document_root", 1);
|
verify_existence(options, "document_root", 1);
|
||||||
verify_existence(options, "cgi_interpreter", 0);
|
verify_existence(options, "cgi_interpreter", 0);
|
||||||
@ -420,7 +430,12 @@ static void start_mongoose(int argc, char *argv[]) {
|
|||||||
for (i = 0; options[i] != NULL; i += 2) {
|
for (i = 0; options[i] != NULL; i += 2) {
|
||||||
const char *msg = mg_set_option(server, options[i], options[i + 1]);
|
const char *msg = mg_set_option(server, options[i], options[i + 1]);
|
||||||
if (msg != NULL) {
|
if (msg != NULL) {
|
||||||
notify("Failed to set option [%s]: %s", options[i], msg);
|
notify("Failed to set option [%s] to [%s]: %s",
|
||||||
|
options[i], options[i + 1], msg);
|
||||||
|
if (!strcmp(options[i], "listening_port")) {
|
||||||
|
mg_set_option(server, "listening_port", s_default_listening_port);
|
||||||
|
notify("Setting %s to [%s]", options[i], s_default_listening_port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(options[i]);
|
free(options[i]);
|
||||||
free(options[i + 1]);
|
free(options[i + 1]);
|
||||||
|
Loading…
Reference in New Issue
Block a user