version 1.11, 2015/07/20 00:54:01 |
version 1.12, 2015/07/20 00:57:53 |
|
|
char **envp; |
char **envp; |
const char **extra; |
const char **extra; |
int ei; |
int ei; |
int i, ii, j, jj; |
|
int nsafe, nbad; |
int nsafe, nbad; |
int nextras = 0; |
int nextras = 0; |
|
|
nbad = arraylen(badset); |
nbad = arraylen(badset); |
if ((rule->options & KEEPENV) && !rule->envlist) { |
if ((rule->options & KEEPENV) && !rule->envlist) { |
j = arraylen(oldenvp); |
size_t i, ii; |
envp = reallocarray(NULL, j + 1, sizeof(char *)); |
size_t oldlen = arraylen(oldenvp); |
|
envp = reallocarray(NULL, oldlen + 1, sizeof(char *)); |
if (!envp) |
if (!envp) |
err(1, "reallocarray"); |
err(1, "reallocarray"); |
for (ii = i = 0; i < j; i++) { |
for (ii = i = 0; i < oldlen; i++) { |
for (jj = 0; jj < nbad; jj++) { |
size_t j; |
size_t len = strlen(badset[jj]); |
for (j = 0; j < nbad; j++) { |
if (strncmp(oldenvp[i], badset[jj], len) == 0) { |
size_t len = strlen(badset[j]); |
|
if (strncmp(oldenvp[i], badset[j], len) == 0) { |
break; |
break; |
} |
} |
} |
} |
if (jj == nbad) { |
if (j == nbad) { |
if (!(envp[ii] = strdup(oldenvp[i]))) |
if (!(envp[ii] = strdup(oldenvp[i]))) |
err(1, "strdup"); |
err(1, "strdup"); |
ii++; |
ii++; |
|
|
|
|
nsafe = arraylen(safeset); |
nsafe = arraylen(safeset); |
if ((extra = rule->envlist)) { |
if ((extra = rule->envlist)) { |
|
size_t i; |
nextras = arraylen(extra); |
nextras = arraylen(extra); |
for (i = 0; i < nsafe; i++) { |
for (i = 0; i < nsafe; i++) { |
|
size_t j; |
for (j = 0; j < nextras; j++) { |
for (j = 0; j < nextras; j++) { |
if (strcmp(extra[j], safeset[i]) == 0) { |
if (strcmp(extra[j], safeset[i]) == 0) { |
extra[j--] = extra[nextras--]; |
extra[j--] = extra[nextras--]; |