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

Diff for /src/usr.bin/ssh/dh.c between version 1.63 and 1.64

version 1.63, 2018/02/07 02:06:50 version 1.64, 2018/06/06 18:29:18
Line 141 
Line 141 
 choose_dh(int min, int wantbits, int max)  choose_dh(int min, int wantbits, int max)
 {  {
         FILE *f;          FILE *f;
         char line[4096];          char *line = NULL;
         int best, bestcount, which;          size_t linesize = 0;
         int linenum;          int best, bestcount, which, linenum;
         struct dhgroup dhg;          struct dhgroup dhg;
   
         if ((f = fopen(_PATH_DH_MODULI, "r")) == NULL) {          if ((f = fopen(_PATH_DH_MODULI, "r")) == NULL) {
Line 154 
Line 154 
   
         linenum = 0;          linenum = 0;
         best = bestcount = 0;          best = bestcount = 0;
         while (fgets(line, sizeof(line), f)) {          while (getline(&line, &linesize, f) != -1) {
                 linenum++;                  linenum++;
                 if (!parse_prime(linenum, line, &dhg))                  if (!parse_prime(linenum, line, &dhg))
                         continue;                          continue;
Line 172 
Line 172 
                 if (dhg.size == best)                  if (dhg.size == best)
                         bestcount++;                          bestcount++;
         }          }
           free(line);
           line = NULL;
           linesize = 0;
         rewind(f);          rewind(f);
   
         if (bestcount == 0) {          if (bestcount == 0) {
Line 182 
Line 185 
   
         linenum = 0;          linenum = 0;
         which = arc4random_uniform(bestcount);          which = arc4random_uniform(bestcount);
         while (fgets(line, sizeof(line), f)) {          while (getline(&line, &linesize, f) != -1) {
                   linenum++;
                 if (!parse_prime(linenum, line, &dhg))                  if (!parse_prime(linenum, line, &dhg))
                         continue;                          continue;
                 if ((dhg.size > max || dhg.size < min) ||                  if ((dhg.size > max || dhg.size < min) ||
Line 194 
Line 198 
                 }                  }
                 break;                  break;
         }          }
           free(line);
           line = NULL;
         fclose(f);          fclose(f);
         if (linenum != which+1) {          if (linenum != which+1) {
                 logit("WARNING: line %d disappeared in %s, giving up",                  logit("WARNING: line %d disappeared in %s, giving up",

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.64