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:
parent
f669139c9e
commit
fa5bddc154
23
src/main.c
23
src/main.c
@ -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
|
#define MAX_COMMANDLINE_FLAGS 2
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
@ -124,10 +143,10 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
#ifndef IS_MAC
|
#ifndef IS_MAC
|
||||||
snprintf(buf, sizeof(buf), "LD_PRELOAD=%s/%s", prefix, dll_name);
|
snprintf(buf, sizeof(buf), "LD_PRELOAD=%s/%s", prefix, dll_name);
|
||||||
putenv(buf);
|
putenv_prepend(buf);
|
||||||
#else
|
#else
|
||||||
snprintf(buf, sizeof(buf), "DYLD_INSERT_LIBRARIES=%s/%s", prefix, dll_name);
|
snprintf(buf, sizeof(buf), "DYLD_INSERT_LIBRARIES=%s/%s", prefix, dll_name);
|
||||||
putenv(buf);
|
putenv_prepend(buf);
|
||||||
putenv("DYLD_FORCE_FLAT_NAMESPACE=1");
|
putenv("DYLD_FORCE_FLAT_NAMESPACE=1");
|
||||||
#endif
|
#endif
|
||||||
execvp(argv[start_argv], &argv[start_argv]);
|
execvp(argv[start_argv], &argv[start_argv]);
|
||||||
|
Loading…
Reference in New Issue
Block a user