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),
|
||||
"%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();
|
||||
}
|
||||
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),
|
||||
"%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();
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -57,12 +57,13 @@ typedef struct sf_global_variables {
|
|||
extern "C" {
|
||||
#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_CONTINUE_FLAG g_sf_global_vars.continue_flag
|
||||
#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_WORK_THREADS g_sf_global_vars.work_threads
|
||||
#define SF_G_THREAD_STACK_SIZE g_sf_global_vars.thread_stack_size
|
||||
|
||||
#define SF_SET_CUSTOM_CONFIG(cfg, prefix_name, port) \
|
||||
|
|
@ -71,6 +72,23 @@ extern SFGlobalVariables g_sf_global_vars;
|
|||
(cfg).default_port = port; \
|
||||
} 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,
|
||||
IniContext *pIniContext, const int default_inner_port,
|
||||
const int default_outer_port);
|
||||
|
|
|
|||
|
|
@ -68,7 +68,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
|||
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, "
|
||||
"init_pthread_attr fail, program exit!", __LINE__);
|
||||
return result;
|
||||
|
|
@ -83,8 +85,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
|||
alloc_conn_once = ALLOC_CONNECTIONS_ONCE / m;
|
||||
init_connections = 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,
|
||||
alloc_conn_once, g_sf_global_vars.min_buff_size, g_sf_global_vars.max_buff_size,
|
||||
if ((result=free_queue_init_ex(g_sf_global_vars.max_connections,
|
||||
init_connections, alloc_conn_once, g_sf_global_vars.
|
||||
min_buff_size, g_sf_global_vars.max_buff_size,
|
||||
task_arg_size)) != 0)
|
||||
{
|
||||
return result;
|
||||
|
|
@ -102,7 +105,9 @@ int sf_service_init(sf_alloc_thread_extra_data_callback
|
|||
|
||||
g_worker_thread_count = 0;
|
||||
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;
|
||||
if (alloc_thread_extra_data_callback != NULL) {
|
||||
pThreadData->arg = alloc_thread_extra_data_callback(
|
||||
|
|
@ -182,7 +187,9 @@ int sf_service_destroy()
|
|||
|
||||
free_queue_destroy();
|
||||
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);
|
||||
}
|
||||
free(g_sf_global_vars.thread_data);
|
||||
|
|
@ -224,27 +231,32 @@ int sf_socket_server()
|
|||
const char *bind_addr;
|
||||
|
||||
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 = "";
|
||||
return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
|
||||
} else if (strcmp(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.inner_bind_addr) == 0) {
|
||||
return _socket_server(bind_addr, g_sf_global_vars.outer_port,
|
||||
&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;
|
||||
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 {
|
||||
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,
|
||||
&g_server_outer_sock)) != 0)
|
||||
if ((result=_socket_server(g_sf_global_vars.outer_bind_addr,
|
||||
g_sf_global_vars.outer_port, &g_server_outer_sock)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr, g_sf_global_vars.inner_port,
|
||||
&g_server_inner_sock)) != 0)
|
||||
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr,
|
||||
g_sf_global_vars.inner_port, &g_server_inner_sock)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
|
@ -252,7 +264,7 @@ int sf_socket_server()
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void *accept_thread_entrance(void* arg)
|
||||
static void *accept_thread_entrance(void *arg)
|
||||
{
|
||||
int server_sock;
|
||||
int incomesock;
|
||||
|
|
@ -331,7 +343,9 @@ void _accept_loop(int server_sock, const int accept_threads)
|
|||
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, "
|
||||
"init_pthread_attr fail!", __LINE__);
|
||||
}
|
||||
|
|
@ -393,15 +407,15 @@ static void sigQuitHandler(int sig)
|
|||
if (!bTerminateFlag) {
|
||||
bTerminateFlag = true;
|
||||
g_sf_global_vars.continue_flag = false;
|
||||
logCrit("file: "__FILE__", line: %d, " \
|
||||
"catch signal %d, program exiting...", \
|
||||
logCrit("file: "__FILE__", line: %d, "
|
||||
"catch signal %d, program exiting...",
|
||||
__LINE__, sig);
|
||||
}
|
||||
}
|
||||
|
||||
static void sigHupHandler(int sig)
|
||||
{
|
||||
logInfo("file: "__FILE__", line: %d, " \
|
||||
logInfo("file: "__FILE__", line: %d, "
|
||||
"catch signal %d", __LINE__, sig);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue