diff --git a/mongoose.c b/mongoose.c index 87eb6a7d..5caae4ab 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1331,6 +1331,8 @@ static int mg_stat(struct mg_connection *conn, const char *path, filep->size = st.st_size; filep->modification_time = st.st_mtime; filep->is_directory = S_ISDIR(st.st_mode); + } else { + filep->modification_time = (time_t) 0; } return filep->membuf != NULL || filep->modification_time != (time_t) 0; @@ -4461,7 +4463,11 @@ static void uninitialize_ssl(struct mg_context *ctx) { static int set_gpass_option(struct mg_context *ctx) { struct file file; const char *path = ctx->config[GLOBAL_PASSWORDS_FILE]; - return path == NULL || !mg_stat(fc(ctx), path, &file); + if (path != NULL && !mg_stat(fc(ctx), path, &file)) { + cry(fc(ctx), "Cannot open %s: %s", path, strerror(ERRNO)); + return 0; + } + return 1; } static int set_acl_option(struct mg_context *ctx) { diff --git a/test/unit_test.c b/test/unit_test.c index 070ba731..81a9c266 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -349,6 +349,13 @@ static void test_user_data(void) { call_user(fc(ctx), MG_NEW_REQUEST); } +static void test_mg_stat(void) { + static struct mg_context ctx; + struct file file; + memset(&file, 'A', sizeof(file)); + ASSERT(!mg_stat(fc(&ctx), " does not exist ", &file)); +} + int main(void) { test_base64_encode(); test_match_prefix(); @@ -360,6 +367,7 @@ int main(void) { test_set_throttle(); test_next_option(); test_user_data(); + test_mg_stat(); #ifdef USE_LUA test_lua(); #endif