static void start_mongoose(int argc, char *argv[]) { char *options[MAX_OPTIONS]; int i; if ((server = mg_create_server(NULL)) == NULL) { die("%s", "Failed to start Mongoose."); } // Edit passwords file if -A option is specified if (argc > 1 && !strcmp(argv[1], "-A")) { if (argc != 6) { show_usage_and_exit(); } exit(modify_passwords_file(argv[2], argv[3], argv[4], argv[5]) ? EXIT_SUCCESS : EXIT_FAILURE); } // Show usage if -h or --help options are specified if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { show_usage_and_exit(); } options[0] = NULL; set_option(options, "document_root", "."); set_option(options, "listening_port", "8080"); // Update config based on command line arguments process_command_line_arguments(argv, options); // Make sure we have absolute paths for files and directories // https://github.com/valenok/mongoose/issues/181 set_absolute_path(options, "document_root", argv[0]); set_absolute_path(options, "put_delete_auth_file", argv[0]); set_absolute_path(options, "cgi_interpreter", 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, "ssl_certificate", argv[0]); // Make extra verification for certain options verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); for (i = 0; options[i] != NULL; i += 2) { const char *msg = mg_set_option(server, options[i], options[i + 1]); if (msg != NULL) die("Failed to set option [%s]: %s", options[i], msg); free(options[i]); free(options[i + 1]); } // Setup signal handler: quit on Ctrl-C signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); #ifndef _WIN32 signal(SIGCHLD, signal_handler); #endif }
static void start_squeasel(int argc, char *argv[]) { struct sq_callbacks callbacks; char *options[MAX_OPTIONS]; int i; // Edit passwords file if -A option is specified if (argc > 1 && !strcmp(argv[1], "-A")) { if (argc != 6) { show_usage_and_exit(); } exit(sq_modify_passwords_file(argv[2], argv[3], argv[4], argv[5]) ? EXIT_SUCCESS : EXIT_FAILURE); } // Show usage if -h or --help options are specified if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { show_usage_and_exit(); } options[0] = NULL; set_option(options, "document_root", "."); // Update config based on command line arguments process_command_line_arguments(argv, options); // Make sure we have absolute paths for files and directories // https://github.com/cloudera/squeasel/issues/181 set_absolute_path(options, "document_root", argv[0]); set_absolute_path(options, "put_delete_auth_file", argv[0]); set_absolute_path(options, "cgi_interpreter", 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, "ssl_certificate", argv[0]); // Make extra verification for certain options verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); // Setup signal handler: quit on Ctrl-C signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); // Start Squeasel memset(&callbacks, 0, sizeof(callbacks)); callbacks.log_message = &log_message; ctx = sq_start(&callbacks, NULL, (const char **) options); for (i = 0; options[i] != NULL; i++) { free(options[i]); } if (ctx == NULL) { die("%s", "Failed to start Squeasel."); } }
static void process_instructions_from_snis_server(struct starsystem_info *ss) { uint8_t opcode; int rc; rc = snis_readsocket(ss->socket, &opcode, 1); if (rc < 0) goto bad_client; switch (opcode) { case SNISMV_OPCODE_NOOP: break; case SNISMV_OPCODE_LOOKUP_BRIDGE: rc = lookup_bridge(); if (rc) goto bad_client; break; case SNISMV_OPCODE_UPDATE_BRIDGE: rc = update_bridge(ss); if (rc) goto bad_client; break; case SNISMV_OPCODE_VERIFY_CREATE: rc = verify_existence(ss, 0); if (rc) goto bad_client; break; case SNISMV_OPCODE_VERIFY_EXISTS: rc = verify_existence(ss, 1); if (rc) goto bad_client; break; default: fprintf(stderr, "snis_multiverse: unknown opcode %hhu from socket %d\n", opcode, ss->socket); goto bad_client; } return; bad_client: fprintf(stderr, "snis_multiverse: bad client, disconnecting socket %d\n", ss->socket); shutdown(ss->socket, SHUT_RDWR); close(ss->socket); ss->socket = -1; }
static void set_options(char *argv[]) { char *options[MAX_OPTIONS]; int i; options[0] = NULL; set_option(options, "document_root", s_default_document_root); set_option(options, "listening_port", s_default_listening_port); // Update config based on command line arguments process_command_line_arguments(argv, options); // Make sure we have absolute paths for files and directories // https://github.com/valenok/mongoose/issues/181 set_absolute_path(options, "document_root"); set_absolute_path(options, "dav_auth_file"); set_absolute_path(options, "cgi_interpreter"); set_absolute_path(options, "access_log_file"); set_absolute_path(options, "global_auth_file"); set_absolute_path(options, "ssl_certificate"); if (!path_exists(get_option(options, "document_root"), 1)) { set_option(options, "document_root", s_default_document_root); set_absolute_path(options, "document_root"); notify("Setting document_root to [%s]", mg_get_option(server, "document_root")); } // Make extra verification for certain options verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); for (i = 0; options[i] != NULL; i += 2) { const char *msg = mg_set_option(server, options[i], options[i + 1]); if (msg != NULL) { notify("Failed to set option [%s] to [%s]: %s", options[i], options[i + 1], msg); exit(EXIT_FAILURE); /*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 + 1]); } // Change current working directory to document root. This way, // scripts can use relative paths. chdir(mg_get_option(server, "document_root")); #if 0 // Add an ability to pass listening socket to mongoose { const char *env = getenv("MONGOOSE_LISTENING_SOCKET"); if (env != NULL && atoi(env) > 0 ) { mg_set_listening_socket(server, atoi(env)); } } #endif // Setup signal handler: quit on Ctrl-C signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); #ifndef _WIN32 signal(SIGCHLD, signal_handler); #endif }
static void start_umserver(int argc, char *argv[]) { char *options[MAX_OPTIONS]; int i; if ((server = ht_create_server(NULL, EV_HANDLER)) == NULL) { } options[0] = NULL; // Improvisation if (argc >= 2) { set_option(options, "document_root", argv[1]); } else { set_option(options, "document_root", s_default_document_root); } if (argc >= 3) { set_option(options, "server_port", argv[2]); } else { set_option(options, "server_port", s_default_server_port); } if (argc >= 4) { set_option(options, "cgi_interpreter", argv[3]); } // end of improvisation // Update config based on command line arguments //process_command_line_arguments(argv, options); // Make sure we have absolute paths for files and directories // https://github.com/valenok/mongoose/issues/181 set_absolute_path(options, "document_root"); set_absolute_path(options, "dav_auth_file"); set_absolute_path(options, "cgi_interpreter"); set_absolute_path(options, "access_log_file"); set_absolute_path(options, "global_auth_file"); set_absolute_path(options, "ssl_certificate"); if (!path_exists(get_option(options, "document_root"), 1)) { set_option(options, "document_root", s_default_document_root); set_absolute_path(options, "document_root"); notify("Setting document_root to [%s]", ht_get_option(server, "document_root")); } // Make extra verification for certain options verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); for (i = 0; options[i] != NULL; i += 2) { const char *msg = ht_set_option(server, options[i], options[i + 1]); if (msg != NULL) { notify("Failed to set option [%s] to [%s]: %s", options[i], options[i + 1], msg); if (!strcmp(options[i], "server_port")) { ht_set_option(server, "server_port", s_default_server_port); notify("Setting %s to [%s]", options[i], s_default_server_port); } } free(options[i]); free(options[i + 1]); } // Change current working directory to document root. This way, // scripts can use relative paths. chdir(ht_get_option(server, "document_root")); // Add an ability to pass listening socket to mongoose { const char *env = getenv("UMSERVER_LISTENING_SOCKET"); if (env != NULL && atoi(env) > 0 ) { ht_set_listening_socket(server, atoi(env)); } } // Setup signal handler: quit on Ctrl-C signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); #ifndef _WIN32 signal(SIGCHLD, signal_handler); #endif }
static void start_mongoose(int argc, char *argv[]) { char *options[MAX_OPTIONS]; int i; if ((server = mg_create_server(NULL, NULL)) == NULL) { die("%s", "Failed to start Mongoose."); } #ifndef MONGOOSE_NO_AUTH // Edit passwords file if -A option is specified if (argc > 1 && !strcmp(argv[1], "-A")) { if (argc != 6) { show_usage_and_exit(); } exit(modify_passwords_file(argv[2], argv[3], argv[4], argv[5]) ? EXIT_SUCCESS : EXIT_FAILURE); } #endif // Show usage if -h or --help options are specified if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { show_usage_and_exit(); } options[0] = NULL; set_option(options, "document_root", s_default_document_root); set_option(options, "listening_port", s_default_listening_port); // Update config based on command line arguments process_command_line_arguments(argv, options); // Make sure we have absolute paths for files and directories // https://github.com/valenok/mongoose/issues/181 set_absolute_path(options, "document_root", argv[0]); set_absolute_path(options, "dav_auth_file", argv[0]); set_absolute_path(options, "cgi_interpreter", argv[0]); set_absolute_path(options, "access_log_file", argv[0]); set_absolute_path(options, "global_auth_file", 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 verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); for (i = 0; options[i] != NULL; i += 2) { const char *msg = mg_set_option(server, options[i], options[i + 1]); if (msg != NULL) { 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 + 1]); } // Change current working directory to document root. This way, // scripts can use relative paths. chdir(mg_get_option(server, "document_root")); // Add an ability to pass listening socket to mongoose { const char *env = getenv("MONGOOSE_LISTENING_SOCKET"); if (env != NULL && atoi(env) > 0 ) { mg_set_listening_socket(server, atoi(env)); } } // Setup signal handler: quit on Ctrl-C signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); #ifndef _WIN32 signal(SIGCHLD, signal_handler); #endif }
static void start_civetweb(int argc, char *argv[]) { struct mg_callbacks callbacks; char *options[MAX_OPTIONS]; int i; /* Edit passwords file if -A option is specified */ if (argc > 1 && !strcmp(argv[1], "-A")) { if (argc != 6) { show_usage_and_exit(); } exit(mg_modify_passwords_file(argv[2], argv[3], argv[4], argv[5]) ? EXIT_SUCCESS : EXIT_FAILURE); } /* Show usage if -h or --help options are specified */ if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { show_usage_and_exit(); } options[0] = NULL; set_option(options, "document_root", "."); /* Update config based on command line arguments */ process_command_line_arguments(argv, options); /* Make sure we have absolute paths for files and directories */ set_absolute_path(options, "document_root", argv[0]); set_absolute_path(options, "put_delete_auth_file", argv[0]); set_absolute_path(options, "cgi_interpreter", 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]); #ifdef USE_LUA set_absolute_path(options, "lua_preload_file", argv[0]); #endif set_absolute_path(options, "ssl_certificate", argv[0]); /* Make extra verification for certain options */ verify_existence(options, "document_root", 1); verify_existence(options, "cgi_interpreter", 0); verify_existence(options, "ssl_certificate", 0); #ifdef USE_LUA verify_existence(options, "lua_preload_file", 0); #endif /* Setup signal handler: quit on Ctrl-C */ signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); /* Start Civetweb */ memset(&callbacks, 0, sizeof(callbacks)); callbacks.log_message = &log_message; ctx = mg_start(&callbacks, NULL, (const char **) options); for (i = 0; options[i] != NULL; i++) { free(options[i]); } if (ctx == NULL) { die("%s", "Failed to start Civetweb."); } }