Browse Source

Rename variable

pull/2259/head
Simon Shi 6 years ago
parent
commit
0c2bda940c
5 changed files with 27 additions and 23 deletions
  1. 2
      src/common.h
  2. 4
      src/jconf.c
  3. 2
      src/jconf.h
  4. 39
      src/manager.c
  5. 3
      src/manager.h

2
src/common.h

@ -70,7 +70,7 @@ enum {
GETOPT_VAL_KEY, GETOPT_VAL_KEY,
GETOPT_VAL_MANAGER_ADDRESS, GETOPT_VAL_MANAGER_ADDRESS,
GETOPT_VAL_EXECUTABLE, GETOPT_VAL_EXECUTABLE,
GETOPT_VAL_HOMEDIR,
GETOPT_VAL_WORKDIR,
}; };
#endif // _COMMON_H #endif // _COMMON_H

4
src/jconf.c

@ -328,8 +328,8 @@ read_jconf(const char *file)
value, json_boolean, value, json_boolean,
"invalid config file: option 'no_delay' must be a boolean"); "invalid config file: option 'no_delay' must be a boolean");
conf.no_delay = value->u.boolean; conf.no_delay = value->u.boolean;
} else if (strcmp(name, "homedir") == 0) {
conf.homedir = to_string(value);
} else if (strcmp(name, "workdir") == 0) {
conf.workdir = to_string(value);
} }
} }
} else { } else {

2
src/jconf.h

@ -85,7 +85,7 @@ typedef struct {
int mptcp; int mptcp;
int ipv6_first; int ipv6_first;
int no_delay; int no_delay;
char *homedir;
char *workdir;
} jconf_t; } jconf_t;
jconf_t *read_jconf(const char *file); jconf_t *read_jconf(const char *file);

39
src/manager.c

@ -212,10 +212,10 @@ construct_command_line(struct manager_ctx *manager, struct server *server)
int len = strlen(cmd); int len = strlen(cmd);
snprintf(cmd + len, BUF_SIZE - len, " -d \"%s\"", manager->nameservers); snprintf(cmd + len, BUF_SIZE - len, " -d \"%s\"", manager->nameservers);
} }
if (manager->homedir)
if (manager->workdir)
{ {
int len = strlen(cmd); int len = strlen(cmd);
snprintf(cmd + len, BUF_SIZE - len, " -D \"%s\"", manager->homedir);
snprintf(cmd + len, BUF_SIZE - len, " -D \"%s\"", manager->workdir);
} }
for (i = 0; i < manager->host_num; i++) { for (i = 0; i < manager->host_num; i++) {
int len = strlen(cmd); int len = strlen(cmd);
@ -861,7 +861,7 @@ main(int argc, char **argv)
char *manager_address = NULL; char *manager_address = NULL;
char *plugin = NULL; char *plugin = NULL;
char *plugin_opts = NULL; char *plugin_opts = NULL;
char *homedir = NULL;
char *workdir = NULL;
int fast_open = 0; int fast_open = 0;
int no_delay = 0; int no_delay = 0;
@ -894,7 +894,7 @@ main(int argc, char **argv)
{ "plugin", required_argument, NULL, GETOPT_VAL_PLUGIN }, { "plugin", required_argument, NULL, GETOPT_VAL_PLUGIN },
{ "plugin-opts", required_argument, NULL, GETOPT_VAL_PLUGIN_OPTS }, { "plugin-opts", required_argument, NULL, GETOPT_VAL_PLUGIN_OPTS },
{ "password", required_argument, NULL, GETOPT_VAL_PASSWORD }, { "password", required_argument, NULL, GETOPT_VAL_PASSWORD },
{ "homedir", required_argument, NULL, GETOPT_VAL_HOMEDIR },
{ "workdir", required_argument, NULL, GETOPT_VAL_WORKDIR },
{ "help", no_argument, NULL, GETOPT_VAL_HELP }, { "help", no_argument, NULL, GETOPT_VAL_HELP },
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
@ -973,9 +973,9 @@ main(int argc, char **argv)
case '6': case '6':
ipv6first = 1; ipv6first = 1;
break; break;
case GETOPT_VAL_HOMEDIR:
case GETOPT_VAL_WORKDIR:
case 'D': case 'D':
homedir = optarg;
workdir = optarg;
break; break;
case 'v': case 'v':
verbose = 1; verbose = 1;
@ -1050,9 +1050,9 @@ main(int argc, char **argv)
if (ipv6first == 0) { if (ipv6first == 0) {
ipv6first = conf->ipv6_first; ipv6first = conf->ipv6_first;
} }
if (homedir == NULL)
if (workdir == NULL)
{ {
homedir = conf->homedir;
workdir = conf->workdir;
} }
#ifdef HAVE_SETRLIMIT #ifdef HAVE_SETRLIMIT
if (nofile == 0) { if (nofile == 0) {
@ -1134,7 +1134,7 @@ main(int argc, char **argv)
manager.plugin = plugin; manager.plugin = plugin;
manager.plugin_opts = plugin_opts; manager.plugin_opts = plugin_opts;
manager.ipv6first = ipv6first; manager.ipv6first = ipv6first;
manager.homedir = homedir;
manager.workdir = workdir;
#ifdef HAVE_SETRLIMIT #ifdef HAVE_SETRLIMIT
manager.nofile = nofile; manager.nofile = nofile;
#endif #endif
@ -1155,17 +1155,22 @@ main(int argc, char **argv)
struct passwd *pw = getpwuid(getuid()); struct passwd *pw = getpwuid(getuid());
if (homedir == NULL || strlen(homedir) == 0) {
homedir = pw->pw_dir;
if (workdir == NULL || strlen(workdir) == 0) {
workdir = pw->pw_dir;
// If home dir is still not defined or set to nologin/nonexistent, fall back to /tmp // If home dir is still not defined or set to nologin/nonexistent, fall back to /tmp
if (strstr(homedir, "nologin") || strstr(homedir, "nonexistent") || homedir == NULL || strlen(homedir) == 0) {
homedir = "/tmp";
if (strstr(workdir, "nologin") || strstr(workdir, "nonexistent") || workdir == NULL || strlen(workdir) == 0) {
workdir = "/tmp";
} }
LOGI("working directory points to %s", homedir);
working_dir_size = strlen(workdir) + 15;
working_dir = ss_malloc(working_dir_size);
snprintf(working_dir, working_dir_size, "%s/.shadowsocks", workdir);
} else {
working_dir_size = strlen(workdir) + 2;
working_dir = ss_malloc(working_dir_size);
snprintf(working_dir, working_dir_size, "%s", workdir);
} }
working_dir_size = strlen(homedir) + 15;
working_dir = ss_malloc(working_dir_size);
snprintf(working_dir, working_dir_size, "%s/.shadowsocks", homedir);
LOGI("working directory points to %s", working_dir);
int err = mkdir(working_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); int err = mkdir(working_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (err != 0 && errno != EEXIST) { if (err != 0 && errno != EEXIST) {

3
src/manager.h

@ -59,7 +59,7 @@ struct manager_ctx {
char *nameservers; char *nameservers;
int mtu; int mtu;
int ipv6first; int ipv6first;
char *homedir;
char *workdir;
#ifdef HAVE_SETRLIMIT #ifdef HAVE_SETRLIMIT
int nofile; int nofile;
#endif #endif
@ -74,7 +74,6 @@ struct server {
char *method; char *method;
char *plugin; char *plugin;
char *plugin_opts; char *plugin_opts;
char *homedir;
uint64_t traffic; uint64_t traffic;
}; };

Loading…
Cancel
Save