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

Diff for /src/usr.bin/ssh/compat.c between version 1.23 and 1.24

version 1.23, 2000/09/07 21:13:37 version 1.24, 2000/10/10 20:20:45
Line 29 
Line 29 
 #include "packet.h"  #include "packet.h"
 #include "xmalloc.h"  #include "xmalloc.h"
 #include "compat.h"  #include "compat.h"
   #include <regex.h>
   
 int compat13 = 0;  int compat13 = 0;
 int compat20 = 0;  int compat20 = 0;
Line 50 
Line 51 
 void  void
 compat_datafellows(const char *version)  compat_datafellows(const char *version)
 {  {
         int i;          int i, ret;
         size_t len;          char ebuf[1024];
         struct {          regex_t reg;
                 char    *version;          static struct {
                   char    *pat;
                 int     bugs;                  int     bugs;
         } check[] = {          } check[] = {
                 {"2.1.0",       SSH_BUG_SIGBLOB|SSH_BUG_HMAC},                  {"^.*MindTerm",         0},
                 {"2.0.1",       SSH_BUG_SIGBLOB|SSH_BUG_HMAC|SSH_BUG_PUBKEYAUTH|SSH_BUG_X11FWD},                  {"^2\\.1\\.0 ",         SSH_BUG_SIGBLOB|SSH_BUG_HMAC},
                 {"2.",          SSH_BUG_HMAC|SSH_COMPAT_SESSIONID_ENCODING},                  {"^2\\.0\\.",           SSH_BUG_SIGBLOB|SSH_BUG_HMAC|SSH_BUG_PUBKEYAUTH|SSH_BUG_X11FWD},
                 {NULL,          0}                  {"^2\\.[23]\\.0 ",      SSH_BUG_HMAC|SSH_COMPAT_SESSIONID_ENCODING},
                   {"^2\\.[2-9]\\.",       SSH_COMPAT_SESSIONID_ENCODING},
                   {"^2\\.",               SSH_BUG_HMAC|SSH_COMPAT_SESSIONID_ENCODING},
                   {NULL,                  0}
         };          };
         /* process table, return first match */          /* process table, return first match */
         for (i = 0; check[i].version; i++) {          for (i = 0; check[i].pat; i++) {
                 len = strlen(check[i].version);                  ret = regcomp(&reg, check[i].pat, REG_EXTENDED|REG_NOSUB);
                 if (strlen(version) >= len &&                  if (ret != 0) {
                    (strncmp(version, check[i].version, len) == 0)) {                          regerror(ret, &reg, ebuf, sizeof(ebuf));
                         verbose("datafellows: %.200s", version);                          ebuf[sizeof(ebuf)-1] = '\0';
                           error("regerror: %s", ebuf);
                           continue;
                   }
                   ret = regexec(&reg, version, 0, NULL, 0);
                   regfree(&reg);
                   if (ret == 0) {
                           debug("match: %s pat %s\n", version, check[i].pat);
                         datafellows = check[i].bugs;                          datafellows = check[i].bugs;
                         return;                          return;
                 }                  }
         }          }
           debug("no match: %s", version);
 }  }
   
 #define SEP     ","  #define SEP     ","

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.24