/[winpt]/trunk/Src/wptKeyserver.cpp
ViewVC logotype

Diff of /trunk/Src/wptKeyserver.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 5 by twoaday, Mon Mar 7 13:21:36 2005 UTC
# Line 115  check_hkp_response (const char *resp, in Line 115  check_hkp_response (const char *resp, in
115      char *p, * end;      char *p, * end;
116    
117      ec = recv ? WPTERR_WINSOCK_RECVKEY : WPTERR_WINSOCK_SENDKEY;      ec = recv ? WPTERR_WINSOCK_RECVKEY : WPTERR_WINSOCK_SENDKEY;
118      if (!strstr (resp, "HTTP/1.0 200 OK")) /* http error */      if (!strstr (resp, "HTTP/1.0 200 OK") &&
119            !strstr (resp, "HTTP/1.1 200 OK")) /* http error */
120          return ec;          return ec;
121      if (strstr (resp, "Public Key Server -- Error")      if (strstr (resp, "Public Key Server -- Error")
122          || strstr (resp, "Public Key Server -- Error")          || strstr (resp, "Public Key Server -- Error")
# Line 158  sock_getline (int fd, char *buf, int buf Line 159  sock_getline (int fd, char *buf, int buf
159    
160    
161  static int  static int
162  sock_select( int fd )  sock_select (int fd)
163  {  {
164      FD_SET rfd;      FD_SET rfd;
165      timeval tv = {1, 0};      timeval tv = {1, 0};
166    
167      FD_ZERO( &rfd );      FD_ZERO (&rfd);
168      FD_SET( fd, &rfd );      FD_SET (fd, &rfd);
169      if( select( fd + 1, &rfd, NULL, NULL, &tv ) == SOCKET_ERROR )      if (select (fd + 1, &rfd, NULL, NULL, &tv) == SOCKET_ERROR)
170          return SOCKET_ERROR;          return SOCKET_ERROR;
171      if( FD_ISSET( fd, &rfd ) )      if (FD_ISSET (fd, &rfd))
172          return 1;          return 1;
173      return 0;      return 0;
174  } /* sock_select */  } /* sock_select */
# Line 870  int Line 871  int
871  kserver_search_chkresp (int fd)  kserver_search_chkresp (int fd)
872  {  {
873      char buf[128];      char buf[128];
874      int n=0, i=0;      int n=0;
875    
876      /* parse response 'HTTP/1.0 500 OK' */      /* parse response 'HTTP/1.0 500 OK' */
877      if (sock_getline (fd, buf, 127, &n))      if (sock_getline (fd, buf, 127, &n))
878          return WPTERR_KEYSERVER_NOTFOUND;          return WPTERR_KEYSERVER_NOTFOUND;
879      if (strncmp (buf, "HTTP/1.", 7))      if (strncmp (buf, "HTTP/1.", 7))
880          return WPTERR_KEYSERVER_NOTFOUND;          return WPTERR_KEYSERVER_NOTFOUND;
881      i = 8+1;      if (strncmp (buf+(8+1), "200", 3))
     if (strncmp (buf+i, "200", 3))  
882          return WPTERR_KEYSERVER_NOTFOUND;          return WPTERR_KEYSERVER_NOTFOUND;
883      return 0;      return 0;
884  } /* kserver_search_chkresp */  } /* kserver_search_chkresp */
# Line 888  int Line 888  int
888  kserver_search (int fd, keyserver_key * key)  kserver_search (int fd, keyserver_key * key)
889  {  {
890      char buf[1024], *p;      char buf[1024], *p;
891      int uid_len, nbytes, pos = 0;      int uidlen, nbytes, pos = 0;
892            
893      if (debug)      if (debug)
894          log_f ("keyserver_search:\n");          log_f ("keyserver_search:\n");
895            
896      if (sock_getline (fd, buf, sizeof (buf), &nbytes))          if (sock_getline (fd, buf, sizeof (buf) - 1, &nbytes))
897          return WPTERR_GENERAL;          return WPTERR_GENERAL;
898            
899      if (debug)      if (debug)
# Line 902  kserver_search (int fd, keyserver_key * Line 902  kserver_search (int fd, keyserver_key *
902      if (!strncmp (buf, "pub", 3)) {      if (!strncmp (buf, "pub", 3)) {
903          key->bits = atol (buf+3);          key->bits = atol (buf+3);
904          p = strchr (buf, '>');          p = strchr (buf, '>');
905          if (p)          if (!p)
906              pos = p-buf+1;              goto fail;
907          memcpy (key->keyid, buf+pos, 8);          pos = p - buf + 1;
908            memcpy (key->keyid, buf + pos, 8);
909          key->keyid[8] = '\0';          key->keyid[8] = '\0';
910          p = strstr (buf, "</a>");          p = strstr (buf, "</a>");
911          if (p)          if (!p)
912              pos = p-buf+5;              goto fail;
913          memcpy (key->date, buf+pos, 10);          pos = p - buf + 5;
914            memcpy (key->date, buf + pos, 10);
915          key->date[10] = '\0';          key->date[10] = '\0';
916          pos += 10;          pos += 10;
917          p = buf+pos+1;          p = buf + pos + 1;
918          while (p && *p != '>')          while (p && *p != '>')
919              p++;              p++;
920          p++;          p++;
921          uid_len = strlen (p) - 10;          uidlen = strlen (p) - 10;
922          memcpy (key->uid, p, uid_len);          memcpy (key->uid, p, uidlen);
923          key->uid[uid_len] = '\0';          key->uid[uidlen] = '\0';
924          strcat (key->uid, ">");          strcat (key->uid, ">");
925          p = strchr (key->uid, '&');          p = strchr (key->uid, '&');
926          if (p) {          if (p) {
927              key->uid[(p-key->uid)] = '<';              key->uid[(p-key->uid)] = '<';
928              memmove (key->uid+(p-key->uid)+1, key->uid+(p-key->uid)+4, strlen (key->uid)-3);              memmove (key->uid+(p-key->uid)+1, key->uid+(p-key->uid)+4, strlen (key->uid)-3);
929          }          }
930            return 0;
931      }      }
932      else {  
933          key->bits = 0;  fail:
934          memset (key, 0, sizeof *key);      key->bits = 0;
935      }      memset (key, 0, sizeof *key);
       
936      return 0;      return 0;
937  } /* kserver_search */  } /* kserver_search */
938    

Legend:
Removed from v.4  
changed lines
  Added in v.5

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26