1
0
mirror of https://github.com/rofl0r/proxychains-ng synced 2025-02-02 18:12:54 +08:00

Preserve old environment variable values when preloading

This commit is contained in:
Hexchain Tong 2014-07-09 18:14:52 +08:00
parent f669139c9e
commit fa5bddc154

View File

@ -55,6 +55,25 @@ static void set_own_dir(const char *argv0) {
}
}
static int putenv_prepend(char* string) {
char *value;
char *vbuf = NULL;
size_t length;
char orig[256];
strncpy(orig, string, sizeof(orig));
value = getenv(strtok(orig, "="));
if(NULL == value)
return putenv(string);
length = strlen(string) + strlen(value) + 2; // separator and trailing \0
vbuf = (char*) calloc(length, sizeof(char));
snprintf(vbuf, length, "%s:%s", string, value);
return putenv(vbuf);
}
#define MAX_COMMANDLINE_FLAGS 2
int main(int argc, char *argv[]) {
@ -124,10 +143,10 @@ int main(int argc, char *argv[]) {
#ifndef IS_MAC
snprintf(buf, sizeof(buf), "LD_PRELOAD=%s/%s", prefix, dll_name);
putenv(buf);
putenv_prepend(buf);
#else
snprintf(buf, sizeof(buf), "DYLD_INSERT_LIBRARIES=%s/%s", prefix, dll_name);
putenv(buf);
putenv_prepend(buf);
putenv("DYLD_FORCE_FLAT_NAMESPACE=1");
#endif
execvp(argv[start_argv], &argv[start_argv]);