[BACK]Return to doas.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / doas

Diff for /src/usr.bin/doas/doas.c between version 1.53 and 1.54

version 1.53, 2016/06/05 00:46:34 version 1.54, 2016/06/07 14:11:16
Line 193 
Line 193 
   
         for (i = 0; i < nsafe; i++) {          for (i = 0; i < nsafe; i++) {
                 const char **oe = oldenvp;                  const char **oe = oldenvp;
                   if (strchr(safeset[i], '='))
                           continue;
                 while (*oe) {                  while (*oe) {
                         size_t len = strlen(safeset[i]);                          size_t len = strlen(safeset[i]);
                         if (strncmp(*oe, safeset[i], len) == 0 &&                          if (strncmp(*oe, safeset[i], len) == 0 &&
Line 297 
Line 299 
         return -1;          return -1;
 }  }
   
 /* merge rule->setenvlist into environment list; frees oldenvp */  /* merge rule->envlist into environment list; frees oldenvp */
 static char **  static char **
 dosetenv(char **oldenvp, struct rule *rule)  dosetenv(char **oldenvp, struct rule *rule)
 {  {
Line 308 
Line 310 
         if (!(rule->options & SETENV))          if (!(rule->options & SETENV))
                 return oldenvp;                  return oldenvp;
   
         nset = arraylen(rule->setenvlist);          nset = arraylen(rule->envlist);
         nold = arraylen((const char**)oldenvp);          nold = arraylen((const char**)oldenvp);
   
         /* insert new variables */          /* insert new variables */
         n = 0;          n = 0;
         envp = NULL;          envp = NULL;
         for (i = 0; i < nset; i++) {          for (i = 0; i < nset; i++) {
                 if ((cp = strchr(rule->setenvlist[i], '=')) == NULL)                  if ((cp = strchr(rule->envlist[i], '=')) == NULL)
                         errx(1, "invalid setenv"); /* shouldn't happen */                          continue;
                 if (cp[1] == '\0' || cp - rule->setenvlist[i] > INT_MAX)                  if (cp[1] == '\0' || cp - rule->envlist[i] > INT_MAX)
                         continue; /* skip variables with empty values */                          continue; /* skip variables with empty values */
                 if ((envp = reallocarray(envp, n + 2, sizeof(*envp))) == NULL)                  if ((envp = reallocarray(envp, n + 2, sizeof(*envp))) == NULL)
                         errx(1, "reallocarray failed");                          errx(1, "reallocarray failed");
Line 326 
Line 328 
                         if ((cp2 = getenv(cp + 2)) == NULL)                          if ((cp2 = getenv(cp + 2)) == NULL)
                                 continue; /* not found; skip */                                  continue; /* not found; skip */
                         if (asprintf(&(envp[n++]), "%.*s=%s",                          if (asprintf(&(envp[n++]), "%.*s=%s",
                             (int)(cp - rule->setenvlist[i]),                              (int)(cp - rule->envlist[i]),
                             rule->setenvlist[i], cp2) == -1)                              rule->envlist[i], cp2) == -1)
                                 errx(1, "asprintf failed");                                  errx(1, "asprintf failed");
                         continue;                          continue;
                 } else {                  } else {
                         /* plain setenv */                          /* plain setenv */
                         if ((envp[n++] = strdup(rule->setenvlist[i])) == NULL)                          if ((envp[n++] = strdup(rule->envlist[i])) == NULL)
                                 errx(1, "strdup failed");                                  errx(1, "strdup failed");
                 }                  }
         }          }
Line 340 
Line 342 
         for (i = 0; i < nold; i++) {          for (i = 0; i < nold; i++) {
                 if ((cp = strchr(oldenvp[i], '=')) == NULL)                  if ((cp = strchr(oldenvp[i], '=')) == NULL)
                         errx(1, "invalid env"); /* shouldn't happen */                          errx(1, "invalid env"); /* shouldn't happen */
                 found = findenv(rule->setenvlist, oldenvp[i], cp - oldenvp[i]);                  found = findenv(rule->envlist, oldenvp[i], cp - oldenvp[i]);
                 if (found != -1)                  if (found != -1)
                         free(oldenvp[i]); /* discard */                          free(oldenvp[i]); /* discard */
                 else {                  else {

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.54