diff --git a/src/common.c b/src/common.c index 8c4b993..f76f7fc 100644 --- a/src/common.c +++ b/src/common.c @@ -9,10 +9,15 @@ static int check_path(char *path) { return access(path, R_OK) != -1; } -char *get_config_path(char* pbuf, size_t bufsize) { +char *get_config_path(char* default_path, char* pbuf, size_t bufsize) { char buf[512]; + // top priority: user defined path + char *path = default_path; + if(check_path(path)) + goto have; + // priority 1: env var PROXYCHAINS_CONF_FILE - char *path = getenv(PROXYCHAINS_CONF_FILE_ENV_VAR); + getenv(PROXYCHAINS_CONF_FILE_ENV_VAR); if(check_path(path)) goto have; @@ -40,6 +45,9 @@ char *get_config_path(char* pbuf, size_t bufsize) { if(check_path(path)) goto have; + perror("couldnt find configuration file"); + exit(1); + return NULL; have: return path; diff --git a/src/common.h b/src/common.h index f4fd841..156ef45 100644 --- a/src/common.h +++ b/src/common.h @@ -5,4 +5,4 @@ #include -char *get_config_path(char* pbuf, size_t bufsize); \ No newline at end of file +char *get_config_path(char* default_path, char* pbuf, size_t bufsize); \ No newline at end of file diff --git a/src/libproxychains.c b/src/libproxychains.c index c690b16..b2f2d91 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -150,17 +150,9 @@ static void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_typ tcp_read_time_out = 4 * 1000; tcp_connect_time_out = 10 * 1000; *ct = DYNAMIC_TYPE; - - /* Get path to configuration file from env. - * this file has priority if it's defined. */ - env = getenv(PROXYCHAINS_CONF_FILE_ENV_VAR); - if(!env) env = get_config_path(buff, sizeof(buff)); - if(env) file = fopen(env, "r"); - if(!file) { - perror("Can't locate proxychains.conf"); - exit(1); - } + env = get_config_path(getenv(PROXYCHAINS_CONF_FILE_ENV_VAR), buff, sizeof(buff)); + file = fopen(env, "r"); env = getenv(PROXYCHAINS_QUIET_MODE_ENV_VAR); if(env && *env == '1') diff --git a/src/main.c b/src/main.c index 6a21c37..795899c 100644 --- a/src/main.c +++ b/src/main.c @@ -95,11 +95,7 @@ int main(int argc, char *argv[]) { return usage(argv); /* check if path of config file has not been passed via command line */ - if(!path) path = get_config_path(pbuf, sizeof(pbuf)); - if(!path) { - perror("couldnt find configuration file"); - return 1; - } + path = get_config_path(path, pbuf, sizeof(pbuf)); if(!quiet) fprintf(stderr, LOG_PREFIX "config file found: %s\n", path);