forked from mirrors/kore
make sure we can still run normal apps even with PYTHON=1
This commit is contained in:
parent
f725ca228c
commit
0d72f11902
|
@ -85,6 +85,10 @@ extern int daemon(int, int);
|
||||||
#define KORE_PIDFILE_DEFAULT "kore.pid"
|
#define KORE_PIDFILE_DEFAULT "kore.pid"
|
||||||
#define KORE_DEFAULT_CIPHER_LIST "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!kRSA:!kDSA"
|
#define KORE_DEFAULT_CIPHER_LIST "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!kRSA:!kDSA"
|
||||||
|
|
||||||
|
#define KORE_CONFIG_HOOK "kore_parent_configure"
|
||||||
|
#define KORE_TEARDOWN_HOOK "kore_parent_teardown"
|
||||||
|
#define KORE_DAEMONIZED_HOOK "kore_parent_daemonized"
|
||||||
|
|
||||||
#if defined(KORE_DEBUG)
|
#if defined(KORE_DEBUG)
|
||||||
#define kore_debug(...) \
|
#define kore_debug(...) \
|
||||||
if (kore_debug) \
|
if (kore_debug) \
|
||||||
|
|
|
@ -42,4 +42,8 @@ extern const char *kore_pymodule;
|
||||||
extern struct kore_module_functions kore_python_module;
|
extern struct kore_module_functions kore_python_module;
|
||||||
extern struct kore_runtime kore_python_runtime;
|
extern struct kore_runtime kore_python_runtime;
|
||||||
|
|
||||||
|
#define KORE_PYTHON_TEARDOWN_HOOK "koreapp.cleanup"
|
||||||
|
#define KORE_PYTHON_CONFIG_HOOK "koreapp.configure"
|
||||||
|
#define KORE_PYTHON_DAEMONIZED_HOOK "koreapp.daemonized"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
97
src/kore.c
97
src/kore.c
|
@ -75,23 +75,17 @@ static void kore_write_kore_pid(void);
|
||||||
static void kore_proctitle_setup(void);
|
static void kore_proctitle_setup(void);
|
||||||
static void kore_server_sslstart(void);
|
static void kore_server_sslstart(void);
|
||||||
static void kore_server_start(int, char *[]);
|
static void kore_server_start(int, char *[]);
|
||||||
|
static void kore_call_parent_configure(int, char **);
|
||||||
|
|
||||||
#if !defined(KORE_SINGLE_BINARY) && defined(KORE_USE_PYTHON)
|
#if !defined(KORE_SINGLE_BINARY) && defined(KORE_USE_PYTHON)
|
||||||
#define KORE_PARENT_CONFIG_METHOD "koreapp.configure"
|
static const char *parent_config_hook = KORE_PYTHON_CONFIG_HOOK;
|
||||||
#define KORE_PARENT_TEARDOWN_METHOD "koreapp.cleanup"
|
static const char *parent_teardown_hook = KORE_PYTHON_TEARDOWN_HOOK;
|
||||||
#define KORE_PARENT_DAEMONIZED_METHOD "koreapp.daemonized"
|
#else
|
||||||
|
static const char *parent_config_hook = KORE_CONFIG_HOOK;
|
||||||
|
static const char *parent_teardown_hook = KORE_TEARDOWN_HOOK;
|
||||||
|
#if defined(KORE_SINGLE_BINARY)
|
||||||
|
static const char *parent_daemonized_hook = KORE_DAEMONIZED_HOOK;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(KORE_PARENT_CONFIG_METHOD)
|
|
||||||
#define KORE_PARENT_CONFIG_METHOD "kore_parent_configure"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(KORE_PARENT_TEARDOWN_METHOD)
|
|
||||||
#define KORE_PARENT_TEARDOWN_METHOD "kore_parent_teardown"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(KORE_PARENT_DAEMONIZED_METHOD)
|
|
||||||
#define KORE_PARENT_DAEMONIZED_METHOD "kore_parent_daemonized"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -228,14 +222,19 @@ main(int argc, char *argv[])
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
} else {
|
} else {
|
||||||
usage();
|
kore_pymodule = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lstat(kore_pymodule, &st) == -1)
|
if (kore_pymodule) {
|
||||||
fatal("failed to stat '%s': %s", kore_pymodule, errno_s);
|
if (lstat(kore_pymodule, &st) == -1) {
|
||||||
|
fatal("failed to stat '%s': %s",
|
||||||
|
kore_pymodule, errno_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode))
|
||||||
|
fatal("%s: not a directory or file", kore_pymodule);
|
||||||
|
}
|
||||||
|
|
||||||
if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode))
|
|
||||||
fatal("%s: not a directory or file", kore_pymodule);
|
|
||||||
#elif !defined(KORE_SINGLE_BINARY)
|
#elif !defined(KORE_SINGLE_BINARY)
|
||||||
if (argc > 0)
|
if (argc > 0)
|
||||||
fatal("did you mean to run `kodev' instead?");
|
fatal("did you mean to run `kodev' instead?");
|
||||||
|
@ -272,21 +271,32 @@ main(int argc, char *argv[])
|
||||||
#if defined(KORE_USE_PYTHON)
|
#if defined(KORE_USE_PYTHON)
|
||||||
kore_python_init();
|
kore_python_init();
|
||||||
#if !defined(KORE_SINGLE_BINARY)
|
#if !defined(KORE_SINGLE_BINARY)
|
||||||
kore_module_load(kore_pymodule, NULL, KORE_MODULE_PYTHON);
|
if (kore_pymodule) {
|
||||||
if (S_ISDIR(st.st_mode) && chdir(kore_pymodule) == -1)
|
kore_module_load(kore_pymodule, NULL, KORE_MODULE_PYTHON);
|
||||||
fatal("chdir(%s): %s", kore_pymodule, errno_s);
|
if (S_ISDIR(st.st_mode) && chdir(kore_pymodule) == -1)
|
||||||
#endif
|
fatal("chdir(%s): %s", kore_pymodule, errno_s);
|
||||||
#endif
|
} else {
|
||||||
#if defined(KORE_SINGLE_BINARY) || defined(KORE_USE_PYTHON)
|
/* swap back to non-python hooks. */
|
||||||
rcall = kore_runtime_getcall(KORE_PARENT_CONFIG_METHOD);
|
parent_config_hook = KORE_CONFIG_HOOK;
|
||||||
if (rcall != NULL) {
|
parent_teardown_hook = KORE_TEARDOWN_HOOK;
|
||||||
kore_runtime_configure(rcall, argc, argv);
|
|
||||||
kore_free(rcall);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(KORE_SINGLE_BINARY)
|
||||||
|
kore_call_parent_configure(argc, argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(KORE_USE_PYTHON) && !defined(KORE_SINGLE_BINARY)
|
||||||
|
if (kore_pymodule)
|
||||||
|
kore_call_parent_configure(argc, argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
kore_parse_config();
|
kore_parse_config();
|
||||||
|
|
||||||
|
#if !defined(KORE_SINGLE_BINARY)
|
||||||
free(config_file);
|
free(config_file);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(KORE_NO_HTTP)
|
#if !defined(KORE_NO_HTTP)
|
||||||
if (http_body_disk_offload > 0) {
|
if (http_body_disk_offload > 0) {
|
||||||
|
@ -306,7 +316,7 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
kore_worker_shutdown();
|
kore_worker_shutdown();
|
||||||
|
|
||||||
rcall = kore_runtime_getcall(KORE_PARENT_TEARDOWN_METHOD);
|
rcall = kore_runtime_getcall(parent_teardown_hook);
|
||||||
if (rcall != NULL) {
|
if (rcall != NULL) {
|
||||||
kore_runtime_execute(rcall);
|
kore_runtime_execute(rcall);
|
||||||
kore_free(rcall);
|
kore_free(rcall);
|
||||||
|
@ -707,7 +717,7 @@ kore_server_start(int argc, char *argv[])
|
||||||
u_int32_t tmp;
|
u_int32_t tmp;
|
||||||
u_int64_t netwait;
|
u_int64_t netwait;
|
||||||
int quit, last_sig;
|
int quit, last_sig;
|
||||||
#if defined(KORE_SINGLE_BINARY) || !defined(KORE_USE_PYTHON)
|
#if defined(KORE_SINGLE_BINARY)
|
||||||
struct kore_runtime_call *rcall;
|
struct kore_runtime_call *rcall;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -715,7 +725,7 @@ kore_server_start(int argc, char *argv[])
|
||||||
if (daemon(1, 0) == -1)
|
if (daemon(1, 0) == -1)
|
||||||
fatal("cannot daemon(): %s", errno_s);
|
fatal("cannot daemon(): %s", errno_s);
|
||||||
#if defined(KORE_SINGLE_BINARY)
|
#if defined(KORE_SINGLE_BINARY)
|
||||||
rcall = kore_runtime_getcall(KORE_PARENT_DAEMONIZED_METHOD);
|
rcall = kore_runtime_getcall(parent_daemonized_hook);
|
||||||
if (rcall != NULL) {
|
if (rcall != NULL) {
|
||||||
kore_runtime_execute(rcall);
|
kore_runtime_execute(rcall);
|
||||||
kore_free(rcall);
|
kore_free(rcall);
|
||||||
|
@ -743,11 +753,12 @@ kore_server_start(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(KORE_SINGLE_BINARY) && !defined(KORE_USE_PYTHON)
|
#if !defined(KORE_SINGLE_BINARY) && !defined(KORE_USE_PYTHON)
|
||||||
rcall = kore_runtime_getcall(KORE_PARENT_CONFIG_METHOD);
|
kore_call_parent_configure(argc, argv);
|
||||||
if (rcall != NULL) {
|
#endif
|
||||||
kore_runtime_configure(rcall, argc, argv);
|
|
||||||
kore_free(rcall);
|
#if defined(KORE_USE_PYTHON) && !defined(KORE_SINGLE_BINARY)
|
||||||
}
|
if (kore_pymodule == NULL)
|
||||||
|
kore_call_parent_configure(argc, argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
kore_platform_proctitle("[parent]");
|
kore_platform_proctitle("[parent]");
|
||||||
|
@ -831,3 +842,15 @@ kore_write_kore_pid(void)
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
kore_call_parent_configure(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct kore_runtime_call *rcall;
|
||||||
|
|
||||||
|
rcall = kore_runtime_getcall(parent_config_hook);
|
||||||
|
if (rcall != NULL) {
|
||||||
|
kore_runtime_configure(rcall, argc, argv);
|
||||||
|
kore_free(rcall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue