add macro SF_CHOWN_RETURN_ON_ERROR
parent
01d16a3611
commit
5825a64e72
|
|
@ -210,7 +210,7 @@ int sf_load_config_ex(const char *server_name, const char *filename,
|
||||||
sizeof(g_sf_global_vars.run_by_group),
|
sizeof(g_sf_global_vars.run_by_group),
|
||||||
"%s", pRunByGroup);
|
"%s", pRunByGroup);
|
||||||
}
|
}
|
||||||
if (*g_sf_global_vars.run_by_group == '\0') {
|
if (*(g_sf_global_vars.run_by_group) == '\0') {
|
||||||
g_sf_global_vars.run_by_gid = getegid();
|
g_sf_global_vars.run_by_gid = getegid();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -237,7 +237,7 @@ int sf_load_config_ex(const char *server_name, const char *filename,
|
||||||
sizeof(g_sf_global_vars.run_by_user),
|
sizeof(g_sf_global_vars.run_by_user),
|
||||||
"%s", pRunByUser);
|
"%s", pRunByUser);
|
||||||
}
|
}
|
||||||
if (*g_sf_global_vars.run_by_user == '\0') {
|
if (*(g_sf_global_vars.run_by_user) == '\0') {
|
||||||
g_sf_global_vars.run_by_uid = geteuid();
|
g_sf_global_vars.run_by_uid = geteuid();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
||||||
|
|
@ -57,12 +57,13 @@ typedef struct sf_global_variables {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern SFGlobalVariables g_sf_global_vars;
|
extern SFGlobalVariables g_sf_global_vars;
|
||||||
|
|
||||||
#define SF_G_BASE_PATH g_sf_global_vars.base_path
|
#define SF_G_BASE_PATH g_sf_global_vars.base_path
|
||||||
#define SF_G_CONTINUE_FLAG g_sf_global_vars.continue_flag
|
#define SF_G_CONTINUE_FLAG g_sf_global_vars.continue_flag
|
||||||
#define SF_G_CONNECT_TIMEOUT g_sf_global_vars.connect_timeout
|
#define SF_G_CONNECT_TIMEOUT g_sf_global_vars.connect_timeout
|
||||||
#define SF_G_NETWORK_TIMEOUT g_sf_global_vars.network_timeout
|
#define SF_G_NETWORK_TIMEOUT g_sf_global_vars.network_timeout
|
||||||
|
#define SF_G_WORK_THREADS g_sf_global_vars.work_threads
|
||||||
#define SF_G_THREAD_STACK_SIZE g_sf_global_vars.thread_stack_size
|
#define SF_G_THREAD_STACK_SIZE g_sf_global_vars.thread_stack_size
|
||||||
|
|
||||||
#define SF_SET_CUSTOM_CONFIG(cfg, prefix_name, port) \
|
#define SF_SET_CUSTOM_CONFIG(cfg, prefix_name, port) \
|
||||||
|
|
@ -71,6 +72,23 @@ extern SFGlobalVariables g_sf_global_vars;
|
||||||
(cfg).default_port = port; \
|
(cfg).default_port = port; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define SF_CHOWN_RETURN_ON_ERROR(path, current_uid, current_gid) \
|
||||||
|
do { \
|
||||||
|
if (!(g_sf_global_vars.run_by_gid == current_gid && \
|
||||||
|
g_sf_global_vars.run_by_uid == current_uid)) \
|
||||||
|
{ \
|
||||||
|
if (chown(path, g_sf_global_vars.run_by_uid, \
|
||||||
|
g_sf_global_vars.run_by_gid) != 0) \
|
||||||
|
{ \
|
||||||
|
logError("file: "__FILE__", line: %d, " \
|
||||||
|
"chown \"%s\" fail, " \
|
||||||
|
"errno: %d, error info: %s", \
|
||||||
|
__LINE__, path, errno, STRERROR(errno)); \
|
||||||
|
return errno != 0 ? errno : EPERM; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
int sf_load_config(const char *server_name, const char *filename,
|
int sf_load_config(const char *server_name, const char *filename,
|
||||||
IniContext *pIniContext, const int default_inner_port,
|
IniContext *pIniContext, const int default_inner_port,
|
||||||
const int default_outer_port);
|
const int default_outer_port);
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.thread_stack_size)) != 0) {
|
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.
|
||||||
|
thread_stack_size)) != 0)
|
||||||
|
{
|
||||||
logError("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"init_pthread_attr fail, program exit!", __LINE__);
|
"init_pthread_attr fail, program exit!", __LINE__);
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -83,8 +85,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
||||||
alloc_conn_once = ALLOC_CONNECTIONS_ONCE / m;
|
alloc_conn_once = ALLOC_CONNECTIONS_ONCE / m;
|
||||||
init_connections = g_sf_global_vars.max_connections < alloc_conn_once ?
|
init_connections = g_sf_global_vars.max_connections < alloc_conn_once ?
|
||||||
g_sf_global_vars.max_connections : alloc_conn_once;
|
g_sf_global_vars.max_connections : alloc_conn_once;
|
||||||
if ((result=free_queue_init_ex(g_sf_global_vars.max_connections, init_connections,
|
if ((result=free_queue_init_ex(g_sf_global_vars.max_connections,
|
||||||
alloc_conn_once, g_sf_global_vars.min_buff_size, g_sf_global_vars.max_buff_size,
|
init_connections, alloc_conn_once, g_sf_global_vars.
|
||||||
|
min_buff_size, g_sf_global_vars.max_buff_size,
|
||||||
task_arg_size)) != 0)
|
task_arg_size)) != 0)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -102,7 +105,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
||||||
|
|
||||||
g_worker_thread_count = 0;
|
g_worker_thread_count = 0;
|
||||||
pDataEnd = g_sf_global_vars.thread_data + g_sf_global_vars.work_threads;
|
pDataEnd = g_sf_global_vars.thread_data + g_sf_global_vars.work_threads;
|
||||||
for (pThreadData=g_sf_global_vars.thread_data; pThreadData<pDataEnd; pThreadData++) {
|
for (pThreadData=g_sf_global_vars.thread_data; pThreadData<pDataEnd;
|
||||||
|
pThreadData++)
|
||||||
|
{
|
||||||
pThreadData->thread_loop_callback = thread_loop_callback;
|
pThreadData->thread_loop_callback = thread_loop_callback;
|
||||||
if (alloc_thread_extra_data_callback != NULL) {
|
if (alloc_thread_extra_data_callback != NULL) {
|
||||||
pThreadData->arg = alloc_thread_extra_data_callback(
|
pThreadData->arg = alloc_thread_extra_data_callback(
|
||||||
|
|
@ -182,7 +187,9 @@ int sf_service_destroy()
|
||||||
|
|
||||||
free_queue_destroy();
|
free_queue_destroy();
|
||||||
pDataEnd = g_sf_global_vars.thread_data + g_sf_global_vars.work_threads;
|
pDataEnd = g_sf_global_vars.thread_data + g_sf_global_vars.work_threads;
|
||||||
for (pThreadData=g_sf_global_vars.thread_data; pThreadData<pDataEnd; pThreadData++) {
|
for (pThreadData=g_sf_global_vars.thread_data; pThreadData<pDataEnd;
|
||||||
|
pThreadData++)
|
||||||
|
{
|
||||||
fast_timer_destroy(&pThreadData->timer);
|
fast_timer_destroy(&pThreadData->timer);
|
||||||
}
|
}
|
||||||
free(g_sf_global_vars.thread_data);
|
free(g_sf_global_vars.thread_data);
|
||||||
|
|
@ -224,27 +231,32 @@ int sf_socket_server()
|
||||||
const char *bind_addr;
|
const char *bind_addr;
|
||||||
|
|
||||||
if (g_sf_global_vars.outer_port == g_sf_global_vars.inner_port) {
|
if (g_sf_global_vars.outer_port == g_sf_global_vars.inner_port) {
|
||||||
if (*g_sf_global_vars.outer_bind_addr == '\0' || *g_sf_global_vars.inner_bind_addr == '\0') {
|
if (*g_sf_global_vars.outer_bind_addr == '\0' ||
|
||||||
|
*g_sf_global_vars.inner_bind_addr == '\0') {
|
||||||
bind_addr = "";
|
bind_addr = "";
|
||||||
return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
|
return _socket_server(bind_addr, g_sf_global_vars.outer_port,
|
||||||
} else if (strcmp(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.inner_bind_addr) == 0) {
|
&g_server_outer_sock);
|
||||||
|
} else if (strcmp(g_sf_global_vars.outer_bind_addr,
|
||||||
|
g_sf_global_vars.inner_bind_addr) == 0) {
|
||||||
bind_addr = g_sf_global_vars.outer_bind_addr;
|
bind_addr = g_sf_global_vars.outer_bind_addr;
|
||||||
if (is_private_ip(bind_addr)) {
|
if (is_private_ip(bind_addr)) {
|
||||||
return _socket_server(bind_addr, g_sf_global_vars.inner_port, &g_server_inner_sock);
|
return _socket_server(bind_addr, g_sf_global_vars.
|
||||||
|
inner_port, &g_server_inner_sock);
|
||||||
} else {
|
} else {
|
||||||
return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
|
return _socket_server(bind_addr, g_sf_global_vars.
|
||||||
|
outer_port, &g_server_outer_sock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result=_socket_server(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.outer_port,
|
if ((result=_socket_server(g_sf_global_vars.outer_bind_addr,
|
||||||
&g_server_outer_sock)) != 0)
|
g_sf_global_vars.outer_port, &g_server_outer_sock)) != 0)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr, g_sf_global_vars.inner_port,
|
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr,
|
||||||
&g_server_inner_sock)) != 0)
|
g_sf_global_vars.inner_port, &g_server_inner_sock)) != 0)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -252,7 +264,7 @@ int sf_socket_server()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *accept_thread_entrance(void* arg)
|
static void *accept_thread_entrance(void *arg)
|
||||||
{
|
{
|
||||||
int server_sock;
|
int server_sock;
|
||||||
int incomesock;
|
int incomesock;
|
||||||
|
|
@ -331,7 +343,9 @@ void _accept_loop(int server_sock, const int accept_threads)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.thread_stack_size)) != 0) {
|
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.
|
||||||
|
thread_stack_size)) != 0)
|
||||||
|
{
|
||||||
logWarning("file: "__FILE__", line: %d, "
|
logWarning("file: "__FILE__", line: %d, "
|
||||||
"init_pthread_attr fail!", __LINE__);
|
"init_pthread_attr fail!", __LINE__);
|
||||||
}
|
}
|
||||||
|
|
@ -393,15 +407,15 @@ static void sigQuitHandler(int sig)
|
||||||
if (!bTerminateFlag) {
|
if (!bTerminateFlag) {
|
||||||
bTerminateFlag = true;
|
bTerminateFlag = true;
|
||||||
g_sf_global_vars.continue_flag = false;
|
g_sf_global_vars.continue_flag = false;
|
||||||
logCrit("file: "__FILE__", line: %d, " \
|
logCrit("file: "__FILE__", line: %d, "
|
||||||
"catch signal %d, program exiting...", \
|
"catch signal %d, program exiting...",
|
||||||
__LINE__, sig);
|
__LINE__, sig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sigHupHandler(int sig)
|
static void sigHupHandler(int sig)
|
||||||
{
|
{
|
||||||
logInfo("file: "__FILE__", line: %d, " \
|
logInfo("file: "__FILE__", line: %d, "
|
||||||
"catch signal %d", __LINE__, sig);
|
"catch signal %d", __LINE__, sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue