[BACK]Return to auth-options.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/auth-options.c between version 1.95 and 1.96

version 1.95, 2021/04/03 06:18:40 version 1.96, 2021/07/23 03:57:20
Line 321 
Line 321 
         struct sshauthopt *ret = NULL;          struct sshauthopt *ret = NULL;
         const char *errstr = "unknown error";          const char *errstr = "unknown error";
         uint64_t valid_before;          uint64_t valid_before;
           size_t i, l;
   
         if (errstrp != NULL)          if (errstrp != NULL)
                 *errstrp = NULL;                  *errstrp = NULL;
Line 394 
Line 395 
                             valid_before < ret->valid_before)                              valid_before < ret->valid_before)
                                 ret->valid_before = valid_before;                                  ret->valid_before = valid_before;
                 } else if (opt_match(&opts, "environment")) {                  } else if (opt_match(&opts, "environment")) {
                         if (ret->nenv > INT_MAX) {                          if (ret->nenv > SSH_AUTHOPT_ENV_MAX) {
                                 errstr = "too many environment strings";                                  errstr = "too many environment strings";
                                 goto fail;                                  goto fail;
                         }                          }
Line 408 
Line 409 
                         }                          }
                         if ((cp = strdup(opt)) == NULL)                          if ((cp = strdup(opt)) == NULL)
                                 goto alloc_fail;                                  goto alloc_fail;
                         cp[tmp - opt] = '\0'; /* truncate at '=' */                          l = (size_t)(tmp - opt);
                           cp[l] = '\0'; /* truncate at '=' */
                         if (!valid_env_name(cp)) {                          if (!valid_env_name(cp)) {
                                 free(cp);                                  free(cp);
                                 free(opt);                                  free(opt);
                                 errstr = "invalid environment string";                                  errstr = "invalid environment string";
                                 goto fail;                                  goto fail;
                         }                          }
                           /* Check for duplicates; XXX O(n*log(n)) */
                           for (i = 0; i < ret->nenv; i++) {
                                   if (strncmp(ret->env[i], cp, l) == 0 &&
                                       ret->env[i][l] == '=')
                                           break;
                           }
                         free(cp);                          free(cp);
                         /* Append it. */                          /* First match wins */
                         oarray = ret->env;                          if (i >= ret->nenv) {
                         if ((ret->env = recallocarray(ret->env, ret->nenv,                                  /* Append it. */
                             ret->nenv + 1, sizeof(*ret->env))) == NULL) {                                  oarray = ret->env;
                                 free(opt);                                  if ((ret->env = recallocarray(ret->env,
                                 ret->env = oarray; /* put it back for cleanup */                                      ret->nenv, ret->nenv + 1,
                                 goto alloc_fail;                                      sizeof(*ret->env))) == NULL) {
                                           free(opt);
                                           /* put it back for cleanup */
                                           ret->env = oarray;
                                           goto alloc_fail;
                                   }
                                   ret->env[ret->nenv++] = opt;
                         }                          }
                         ret->env[ret->nenv++] = opt;  
                 } else if (opt_match(&opts, "permitopen")) {                  } else if (opt_match(&opts, "permitopen")) {
                         if (handle_permit(&opts, 0, &ret->permitopen,                          if (handle_permit(&opts, 0, &ret->permitopen,
                             &ret->npermitopen, &errstr) != 0)                              &ret->npermitopen, &errstr) != 0)

Legend:
Removed from v.1.95  
changed lines
  Added in v.1.96