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},
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -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, " \
|
||||
|
|
|
|||
Loading…
Reference in New Issue