add inited variable for run_by struct

support_rdma
YuQing 2023-10-18 17:20:14 +08:00
parent 7f6e7b12b4
commit c3f7254838
2 changed files with 54 additions and 46 deletions

View File

@ -40,8 +40,9 @@ SFGlobalVariables g_sf_global_vars = {
{{'/', 't', 'm', 'p', '\0'}, false},
true, true, false, DEFAULT_MAX_CONNECTONS,
SF_DEF_MAX_PACKAGE_SIZE, SF_DEF_MIN_BUFF_SIZE,
SF_DEF_MAX_BUFF_SIZE, 0, SF_DEF_THREAD_STACK_SIZE,
0, 0, 0, {'\0'}, {'\0'}, {SF_DEF_SYNC_LOG_BUFF_INTERVAL, false},
SF_DEF_MAX_BUFF_SIZE, 0, SF_DEF_THREAD_STACK_SIZE, 0,
{false, 0, 0, {'\0'}, {'\0'}},
{SF_DEF_SYNC_LOG_BUFF_INTERVAL, false},
{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);
pRunByUser = iniGetStrValue(NULL, "run_by_user", ini_ctx->context);
if (pRunByGroup == NULL) {
*g_sf_global_vars.run_by_group = '\0';
*g_sf_global_vars.run_by.group = '\0';
}
else {
snprintf(g_sf_global_vars.run_by_group,
sizeof(g_sf_global_vars.run_by_group),
snprintf(g_sf_global_vars.run_by.group,
sizeof(g_sf_global_vars.run_by.group),
"%s", pRunByGroup);
}
if (*(g_sf_global_vars.run_by_group) == '\0') {
g_sf_global_vars.run_by_gid = getegid();
if (*(g_sf_global_vars.run_by.group) == '\0') {
g_sf_global_vars.run_by.gid = getegid();
}
else {
struct group *pGroup;
pGroup = getgrnam(g_sf_global_vars.run_by_group);
pGroup = getgrnam(g_sf_global_vars.run_by.group);
if (pGroup == NULL) {
result = errno != 0 ? errno : ENOENT;
logError("file: "__FILE__", line: %d, "
@ -344,24 +345,24 @@ int sf_load_global_config_ex(const char *server_name,
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) {
*g_sf_global_vars.run_by_user = '\0';
*g_sf_global_vars.run_by.user = '\0';
}
else {
snprintf(g_sf_global_vars.run_by_user,
sizeof(g_sf_global_vars.run_by_user),
snprintf(g_sf_global_vars.run_by.user,
sizeof(g_sf_global_vars.run_by.user),
"%s", pRunByUser);
}
if (*(g_sf_global_vars.run_by_user) == '\0') {
g_sf_global_vars.run_by_uid = geteuid();
if (*(g_sf_global_vars.run_by.user) == '\0') {
g_sf_global_vars.run_by.uid = geteuid();
}
else {
struct passwd *pUser;
pUser = getpwnam(g_sf_global_vars.run_by_user);
pUser = getpwnam(g_sf_global_vars.run_by.user);
if (pUser == NULL) {
result = errno != 0 ? errno : ENOENT;
logError("file: "__FILE__", line: %d, "
@ -371,16 +372,17 @@ int sf_load_global_config_ex(const char *server_name,
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) {
SF_CHOWN_TO_RUNBY_RETURN_ON_ERROR(SF_G_BASE_PATH_STR);
}
if (need_set_run_by) {
if ((result=set_run_by(g_sf_global_vars.run_by_group,
g_sf_global_vars.run_by_user)) != 0)
if ((result=set_run_by(g_sf_global_vars.run_by.group,
g_sf_global_vars.run_by.user)) != 0)
{
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,
pkg_buff, g_sf_global_vars.tcp_quick_ack,
log_get_level_caption(),
g_sf_global_vars.run_by_group,
g_sf_global_vars.run_by_user
g_sf_global_vars.run_by.group,
g_sf_global_vars.run_by.user
);
sf_log_config_to_string(&g_sf_global_vars.error_log,

View File

@ -49,10 +49,13 @@ typedef struct sf_global_variables {
int thread_stack_size;
time_t up_time;
gid_t run_by_gid;
uid_t run_by_uid;
char run_by_group[32];
char run_by_user[32];
struct {
bool inited;
gid_t gid;
uid_t uid;
char group[32];
char user[32];
} run_by;
SFLogConfig error_log;
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_MAX_CONNECTIONS g_sf_global_vars.max_connections
#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 + \
SF_SOCKET_NETWORK_HANDLER_INDEX)
@ -113,11 +117,12 @@ extern SFContext g_sf_context;
#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 (g_sf_global_vars.run_by.inited && !(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) \
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, " \
@ -134,11 +139,12 @@ extern SFContext g_sf_context;
#define SF_FCHOWN_RETURN_ON_ERROR(fd, 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 (g_sf_global_vars.run_by.inited && !(g_sf_global_vars. \
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) \
if (fchown(fd, g_sf_global_vars.run_by.uid, \
g_sf_global_vars.run_by.gid) != 0) \
{ \
logError("file: "__FILE__", line: %d, " \
"fchown \"%s\" fail, " \