add inited variable for run_by struct
parent
7f6e7b12b4
commit
c3f7254838
|
|
@ -40,8 +40,9 @@ SFGlobalVariables g_sf_global_vars = {
|
||||||
{{'/', 't', 'm', 'p', '\0'}, false},
|
{{'/', 't', 'm', 'p', '\0'}, false},
|
||||||
true, true, false, DEFAULT_MAX_CONNECTONS,
|
true, true, false, DEFAULT_MAX_CONNECTONS,
|
||||||
SF_DEF_MAX_PACKAGE_SIZE, SF_DEF_MIN_BUFF_SIZE,
|
SF_DEF_MAX_PACKAGE_SIZE, SF_DEF_MIN_BUFF_SIZE,
|
||||||
SF_DEF_MAX_BUFF_SIZE, 0, SF_DEF_THREAD_STACK_SIZE,
|
SF_DEF_MAX_BUFF_SIZE, 0, SF_DEF_THREAD_STACK_SIZE, 0,
|
||||||
0, 0, 0, {'\0'}, {'\0'}, {SF_DEF_SYNC_LOG_BUFF_INTERVAL, false},
|
{false, 0, 0, {'\0'}, {'\0'}},
|
||||||
|
{SF_DEF_SYNC_LOG_BUFF_INTERVAL, false},
|
||||||
{0, 0}, NULL, {NULL, 0}
|
{0, 0}, NULL, {NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -321,20 +322,20 @@ int sf_load_global_config_ex(const char *server_name,
|
||||||
pRunByGroup = iniGetStrValue(NULL, "run_by_group", ini_ctx->context);
|
pRunByGroup = iniGetStrValue(NULL, "run_by_group", ini_ctx->context);
|
||||||
pRunByUser = iniGetStrValue(NULL, "run_by_user", ini_ctx->context);
|
pRunByUser = iniGetStrValue(NULL, "run_by_user", ini_ctx->context);
|
||||||
if (pRunByGroup == NULL) {
|
if (pRunByGroup == NULL) {
|
||||||
*g_sf_global_vars.run_by_group = '\0';
|
*g_sf_global_vars.run_by.group = '\0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
snprintf(g_sf_global_vars.run_by_group,
|
snprintf(g_sf_global_vars.run_by.group,
|
||||||
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 {
|
||||||
struct group *pGroup;
|
struct group *pGroup;
|
||||||
|
|
||||||
pGroup = getgrnam(g_sf_global_vars.run_by_group);
|
pGroup = getgrnam(g_sf_global_vars.run_by.group);
|
||||||
if (pGroup == NULL) {
|
if (pGroup == NULL) {
|
||||||
result = errno != 0 ? errno : ENOENT;
|
result = errno != 0 ? errno : ENOENT;
|
||||||
logError("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
|
|
@ -344,24 +345,24 @@ int sf_load_global_config_ex(const char *server_name,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_sf_global_vars.run_by_gid = pGroup->gr_gid;
|
g_sf_global_vars.run_by.gid = pGroup->gr_gid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRunByUser == NULL) {
|
if (pRunByUser == NULL) {
|
||||||
*g_sf_global_vars.run_by_user = '\0';
|
*g_sf_global_vars.run_by.user = '\0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
snprintf(g_sf_global_vars.run_by_user,
|
snprintf(g_sf_global_vars.run_by.user,
|
||||||
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 {
|
||||||
struct passwd *pUser;
|
struct passwd *pUser;
|
||||||
|
|
||||||
pUser = getpwnam(g_sf_global_vars.run_by_user);
|
pUser = getpwnam(g_sf_global_vars.run_by.user);
|
||||||
if (pUser == NULL) {
|
if (pUser == NULL) {
|
||||||
result = errno != 0 ? errno : ENOENT;
|
result = errno != 0 ? errno : ENOENT;
|
||||||
logError("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
|
|
@ -371,16 +372,17 @@ int sf_load_global_config_ex(const char *server_name,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_sf_global_vars.run_by_uid = pUser->pw_uid;
|
g_sf_global_vars.run_by.uid = pUser->pw_uid;
|
||||||
}
|
}
|
||||||
|
g_sf_global_vars.run_by.inited = true;
|
||||||
|
|
||||||
if (SF_G_BASE_PATH_CREATED) {
|
if (SF_G_BASE_PATH_CREATED) {
|
||||||
SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(SF_G_BASE_PATH_STR);
|
SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(SF_G_BASE_PATH_STR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_set_run_by) {
|
if (need_set_run_by) {
|
||||||
if ((result=set_run_by(g_sf_global_vars.run_by_group,
|
if ((result=set_run_by(g_sf_global_vars.run_by.group,
|
||||||
g_sf_global_vars.run_by_user)) != 0)
|
g_sf_global_vars.run_by.user)) != 0)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -740,8 +742,8 @@ void sf_global_config_to_string_ex(const char *max_pkg_size_item_nm,
|
||||||
g_sf_global_vars.thread_stack_size / 1024,
|
g_sf_global_vars.thread_stack_size / 1024,
|
||||||
pkg_buff, g_sf_global_vars.tcp_quick_ack,
|
pkg_buff, g_sf_global_vars.tcp_quick_ack,
|
||||||
log_get_level_caption(),
|
log_get_level_caption(),
|
||||||
g_sf_global_vars.run_by_group,
|
g_sf_global_vars.run_by.group,
|
||||||
g_sf_global_vars.run_by_user
|
g_sf_global_vars.run_by.user
|
||||||
);
|
);
|
||||||
|
|
||||||
sf_log_config_to_string(&g_sf_global_vars.error_log,
|
sf_log_config_to_string(&g_sf_global_vars.error_log,
|
||||||
|
|
|
||||||
|
|
@ -49,10 +49,13 @@ typedef struct sf_global_variables {
|
||||||
int thread_stack_size;
|
int thread_stack_size;
|
||||||
|
|
||||||
time_t up_time;
|
time_t up_time;
|
||||||
gid_t run_by_gid;
|
struct {
|
||||||
uid_t run_by_uid;
|
bool inited;
|
||||||
char run_by_group[32];
|
gid_t gid;
|
||||||
char run_by_user[32];
|
uid_t uid;
|
||||||
|
char group[32];
|
||||||
|
char user[32];
|
||||||
|
} run_by;
|
||||||
|
|
||||||
SFLogConfig error_log;
|
SFLogConfig error_log;
|
||||||
SFConnectionStat connection_stat;
|
SFConnectionStat connection_stat;
|
||||||
|
|
@ -85,6 +88,7 @@ extern SFContext g_sf_context;
|
||||||
#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_MAX_CONNECTIONS g_sf_global_vars.max_connections
|
#define SF_G_MAX_CONNECTIONS g_sf_global_vars.max_connections
|
||||||
#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_G_UP_TIME g_sf_global_vars.up_time
|
||||||
|
|
||||||
#define SF_G_SOCK_HANDLER (g_sf_context.handlers + \
|
#define SF_G_SOCK_HANDLER (g_sf_context.handlers + \
|
||||||
SF_SOCKET_NETWORK_HANDLER_INDEX)
|
SF_SOCKET_NETWORK_HANDLER_INDEX)
|
||||||
|
|
@ -113,19 +117,20 @@ extern SFContext g_sf_context;
|
||||||
|
|
||||||
#define SF_CHOWN_RETURN_ON_ERROR(path, current_uid, current_gid) \
|
#define SF_CHOWN_RETURN_ON_ERROR(path, current_uid, current_gid) \
|
||||||
do { \
|
do { \
|
||||||
if (!(g_sf_global_vars.run_by_gid == current_gid && \
|
if (g_sf_global_vars.run_by.inited && !(g_sf_global_vars. \
|
||||||
g_sf_global_vars.run_by_uid == current_uid)) \
|
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, " \
|
if (chown(path, g_sf_global_vars.run_by.uid, \
|
||||||
"chown \"%s\" fail, " \
|
g_sf_global_vars.run_by.gid) != 0) \
|
||||||
"errno: %d, error info: %s", \
|
{ \
|
||||||
__LINE__, path, errno, STRERROR(errno)); \
|
logError("file: "__FILE__", line: %d, " \
|
||||||
return errno != 0 ? errno : EPERM; \
|
"chown \"%s\" fail, " \
|
||||||
|
"errno: %d, error info: %s", \
|
||||||
|
__LINE__, path, errno, STRERROR(errno)); \
|
||||||
|
return errno != 0 ? errno : EPERM; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(path) \
|
#define SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(path) \
|
||||||
|
|
@ -134,19 +139,20 @@ extern SFContext g_sf_context;
|
||||||
|
|
||||||
#define SF_FCHOWN_RETURN_ON_ERROR(fd, path, current_uid, current_gid) \
|
#define SF_FCHOWN_RETURN_ON_ERROR(fd, path, current_uid, current_gid) \
|
||||||
do { \
|
do { \
|
||||||
if (!(g_sf_global_vars.run_by_gid == current_gid && \
|
if (g_sf_global_vars.run_by.inited && !(g_sf_global_vars. \
|
||||||
g_sf_global_vars.run_by_uid == current_uid)) \
|
run_by.gid == current_gid && g_sf_global_vars. \
|
||||||
{ \
|
run_by.uid == current_uid)) \
|
||||||
if (fchown(fd, g_sf_global_vars.run_by_uid, \
|
|
||||||
g_sf_global_vars.run_by_gid) != 0) \
|
|
||||||
{ \
|
{ \
|
||||||
logError("file: "__FILE__", line: %d, " \
|
if (fchown(fd, g_sf_global_vars.run_by.uid, \
|
||||||
"fchown \"%s\" fail, " \
|
g_sf_global_vars.run_by.gid) != 0) \
|
||||||
"errno: %d, error info: %s", \
|
{ \
|
||||||
__LINE__, path, errno, STRERROR(errno)); \
|
logError("file: "__FILE__", line: %d, " \
|
||||||
return errno != 0 ? errno : EPERM; \
|
"fchown \"%s\" fail, " \
|
||||||
|
"errno: %d, error info: %s", \
|
||||||
|
__LINE__, path, errno, STRERROR(errno)); \
|
||||||
|
return errno != 0 ? errno : EPERM; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SF_FCHOWN_TO_RUNBY_RETURN_ON_ERROR(fd, path) \
|
#define SF_FCHOWN_TO_RUNBY_RETURN_ON_ERROR(fd, path) \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue