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

Diff for /src/usr.bin/ssh/misc.c between version 1.141 and 1.142

version 1.141, 2019/09/03 08:29:58 version 1.142, 2019/09/03 08:32:11
Line 2051 
Line 2051 
                 ;                  ;
         *cpp = cp;          *cpp = cp;
 }  }
   
   /* authorized_key-style options parsing helpers */
   
   /*
    * Match flag 'opt' in *optsp, and if allow_negate is set then also match
    * 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0
    * if negated option matches.
    * If the option or negated option matches, then *optsp is updated to
    * point to the first character after the option.
    */
   int
   opt_flag(const char *opt, int allow_negate, const char **optsp)
   {
           size_t opt_len = strlen(opt);
           const char *opts = *optsp;
           int negate = 0;
   
           if (allow_negate && strncasecmp(opts, "no-", 3) == 0) {
                   opts += 3;
                   negate = 1;
           }
           if (strncasecmp(opts, opt, opt_len) == 0) {
                   *optsp = opts + opt_len;
                   return negate ? 0 : 1;
           }
           return -1;
   }
   
   char *
   opt_dequote(const char **sp, const char **errstrp)
   {
           const char *s = *sp;
           char *ret;
           size_t i;
   
           *errstrp = NULL;
           if (*s != '"') {
                   *errstrp = "missing start quote";
                   return NULL;
           }
           s++;
           if ((ret = malloc(strlen((s)) + 1)) == NULL) {
                   *errstrp = "memory allocation failed";
                   return NULL;
           }
           for (i = 0; *s != '\0' && *s != '"';) {
                   if (s[0] == '\\' && s[1] == '"')
                           s++;
                   ret[i++] = *s++;
           }
           if (*s == '\0') {
                   *errstrp = "missing end quote";
                   free(ret);
                   return NULL;
           }
           ret[i] = '\0';
           s++;
           *sp = s;
           return ret;
   }
   
   int
   opt_match(const char **opts, const char *term)
   {
           if (strncasecmp((*opts), term, strlen(term)) == 0 &&
               (*opts)[strlen(term)] == '=') {
                   *opts += strlen(term) + 1;
                   return 1;
           }
           return 0;
   }
   

Legend:
Removed from v.1.141  
changed lines
  Added in v.1.142