/[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 5 by twoaday, Mon Mar 7 13:21:36 2005 UTC revision 13 by twoaday, Mon Apr 25 07:15:30 2005 UTC
# Line 353  kserver_update_proxyuser (const char *pr Line 353  kserver_update_proxyuser (const char *pr
353      char t[257]; /* user:pass = 127+1+127+1 = 257 */      char t[257]; /* user:pass = 127+1+127+1 = 257 */
354    
355      free_if_alloc (proxy.base64_user);      free_if_alloc (proxy.base64_user);
356      proxy.base64_user = new char[4*strlen( proxy_user ) / 3 + 32];      proxy.base64_user = new char[4*strlen (proxy_user) / 3 + 32 + strlen (proxy_pass)];
357      if( !proxy.base64_user )      if (!proxy.base64_user)
358          BUG (0);          BUG (0);
359      _snprintf (t, sizeof (t)-1, "%s:%s", proxy_user, proxy_pass);      _snprintf (t, sizeof (t)-1, "%s:%s", proxy_user, proxy_pass);
360      base64_encode (t, proxy.base64_user, 257);      base64_encode (t, proxy.base64_user, 257);
# Line 370  check_URL (const char * buf) Line 370  check_URL (const char * buf)
370  {  {
371      if (strlen (buf) < 7)      if (strlen (buf) < 7)
372          return -1;          return -1;
373      if( !strstr (buf, "ldap://")      if (!strstr (buf, "ldap://")
374          && !strstr (buf, "http://")          && !strstr (buf, "http://")
375          && !strstr (buf, "finger://")          && !strstr (buf, "finger://")
376          && !strstr (buf, "hkp://"))          && !strstr (buf, "hkp://"))
# Line 443  kserver_load_conf (const char * conf) Line 443  kserver_load_conf (const char * conf)
443            
444      fp = fopen (conf, "rb");      fp = fopen (conf, "rb");
445      if (!fp) {      if (!fp) {
446          for( pos = 0; server_list[pos]; pos++ ) {          for (pos = 0; server_list[pos]; pos++) {
447              server[pos].used = 1;              server[pos].used = 1;
448              server[pos].name = (char *)server_list[pos];              server[pos].name = (char *)server_list[pos];
449              server[pos].proto = proto_from_URL( server_list[pos] );              server[pos].proto = proto_from_URL( server_list[pos] );
450          }          }
451          no_config=1;          no_config=1;
452      }      }
453      get_reg_proxy_prefs( &proxy.host, &proxy.port, &user, &pass );      get_reg_proxy_prefs (&proxy.host, &proxy.port, &user, &pass);
454      if( user && pass )      if (user && pass)
455          kserver_update_proxyuser( user, pass );          kserver_update_proxyuser (user, pass);  
456      else if( user && !pass || !user && pass ) {      else if (user && !pass || !user && pass) {
457          msg_box( NULL, _("Invalid proxy configuration."          msg_box( NULL, _("Invalid proxy configuration."
458                           "You need to set a user and a password"                           "You need to set a user and a password"
459                           "to use proxy authentication!"), _("Proxy Error"), MB_ERR );                           "to use proxy authentication!"), _("Proxy Error"), MB_ERR );
# Line 529  kserver_load_conf (const char * conf) Line 529  kserver_load_conf (const char * conf)
529  const char *  const char *
530  kserver_get_proxy (int * r_port)  kserver_get_proxy (int * r_port)
531  {  {
532      if (proxy.host)      if (proxy.host) {
     {  
533          if (r_port)          if (r_port)
534              *r_port = proxy.port;              *r_port = proxy.port;
535          return proxy.host;          return proxy.host;
# Line 540  kserver_get_proxy (int * r_port) Line 539  kserver_get_proxy (int * r_port)
539    
540    
541  const char *  const char *
542  kserver_get_proxy_info( int id )  kserver_get_proxy_info (int id)
543  {  {
544      switch( id ) {        switch (id) {  
545      case PROXY_USER: return proxy.user;      case PROXY_USER: return proxy.user;
546      case PROXY_PASS: return proxy.pass;      case PROXY_PASS: return proxy.pass;
547      }      }
# Line 582  kserver_connect (const char *hostname, u Line 581  kserver_connect (const char *hostname, u
581      if ((iaddr = inet_addr (host)) != INADDR_NONE)      if ((iaddr = inet_addr (host)) != INADDR_NONE)
582          memcpy (&sock.sin_addr, &iaddr, sizeof (iaddr));          memcpy (&sock.sin_addr, &iaddr, sizeof (iaddr));
583      else if ((hp = gethostbyname (host))) {      else if ((hp = gethostbyname (host))) {
584          if (hp->h_addrtype != AF_INET)          if (hp->h_addrtype != AF_INET || hp->h_length != 4) {
585              return WPTERR_WINSOCK_RESOLVE;              log_f ("gethostbyname: unknown address type.\r\n");
         else if (hp->h_length != 4)  
586              return WPTERR_WINSOCK_RESOLVE;              return WPTERR_WINSOCK_RESOLVE;
587            }
588          memcpy (&sock.sin_addr, hp->h_addr, hp->h_length);          memcpy (&sock.sin_addr, hp->h_addr, hp->h_length);
589      }      }
590      else {      else {
# Line 600  kserver_connect (const char *hostname, u Line 599  kserver_connect (const char *hostname, u
599      if (rc == SOCKET_ERROR) {      if (rc == SOCKET_ERROR) {
600          if (debug)          if (debug)
601              log_f ("connect: failed.\r\n");              log_f ("connect: failed.\r\n");
602          closesocket(fd);          closesocket (fd);
603          return WPTERR_WINSOCK_CONNECT;          return WPTERR_WINSOCK_CONNECT;
604      }      }
605    
606      if (conn_fd)      if (conn_fd)
607          *conn_fd = fd;          *conn_fd = fd;
608      WSASetLastError(0);      WSASetLastError (0);
609      return 0;      return 0;
610  } /* kserver_connect */  } /* kserver_connect */
611    
# Line 698  kserver_send_request (const char *hostna Line 697  kserver_send_request (const char *hostna
697      }      }
698      free_if_alloc (enc_pubkey);      free_if_alloc (enc_pubkey);
699      if (debug)      if (debug)
700          log_f("%s\n", request);          log_f ("%s\n", request);
701      return request;      return request;
702  } /* kserver_send_request */  } /* kserver_send_request */
703    
# Line 740  kserver_recvkey (const char *hostname, u Line 739  kserver_recvkey (const char *hostname, u
739              "GET /pks/lookup?op=get&search=%s HTTP/1.0\r\n\r\n", keyid);              "GET /pks/lookup?op=get&search=%s HTTP/1.0\r\n\r\n", keyid);
740      }        }  
741      if (debug)      if (debug)
742          log_f ("%s\n", request);          log_f ("%s\r\n", request);
743            
744      rc = sock_write (conn_fd, request, strlen (request));      rc = sock_write (conn_fd, request, strlen (request));
745      if (rc == SOCKET_ERROR) {      if (rc == SOCKET_ERROR) {
# Line 754  kserver_recvkey (const char *hostname, u Line 753  kserver_recvkey (const char *hostname, u
753          goto leave;          goto leave;
754      }      }
755            
756      if( debug )      if (debug)
757          log_f("%s\n", key);          log_f("%s\r\n", key);
758            rc = check_hkp_response (key, 1);
759      rc = check_hkp_response( key, 1 );      if (rc)
     if( rc )  
760          goto leave;          goto leave;
761            
762      WSASetLastError( 0 );      WSASetLastError (0);
763            
764  leave:  leave:
765      closesocket( conn_fd );      closesocket (conn_fd);
766      free_if_alloc( request );      free_if_alloc (request);
767      return rc;      return rc;
768  } /* kserver_recvkey */  } /* kserver_recvkey */
769    
# Line 787  kserver_sendkey (const char *hostname, u Line 785  kserver_sendkey (const char *hostname, u
785          goto leave;          goto leave;
786            
787      request = kserver_send_request (hostname, port, pubkey, len);      request = kserver_send_request (hostname, port, pubkey, len);
788      if( request == NULL ) {      if (request == NULL) {
789          rc = WPTERR_GENERAL;          rc = WPTERR_GENERAL;
790          goto leave;              goto leave;    
791      }      }
# Line 804  kserver_sendkey (const char *hostname, u Line 802  kserver_sendkey (const char *hostname, u
802          goto leave;          goto leave;
803      }      }
804      if (debug)      if (debug)
805          log_f("%s\n", log);          log_f ("kserver_sendkey:\r\n%s\r\n", log);
806            
807      rc = check_hkp_response( log, 0 );      rc = check_hkp_response (log, 0);
808      if( rc )      if( rc )
809          goto leave;          goto leave;
810            
811      WSASetLastError( 0 );      WSASetLastError (0);
812            
813  leave:  leave:
814      closesocket( conn_fd );      closesocket (conn_fd);
815      free_if_alloc( request );      free_if_alloc (request);
816      return rc;      return rc;
817  } /* kserver_sendkey */  } /* kserver_sendkey */
818    
# Line 823  int Line 821  int
821  kserver_search_init (const char * hostname, u16 port, const char * keyid, int * conn_fd)  kserver_search_init (const char * hostname, u16 port, const char * keyid, int * conn_fd)
822  {  {
823      int rc, sock_fd;      int rc, sock_fd;
824        int n=0;
825      char * request = NULL;      char * request = NULL;
826            
827      rc = kserver_connect (hostname, port, &sock_fd);      rc = kserver_connect (hostname, port, &sock_fd);
# Line 831  kserver_search_init (const char * hostna Line 830  kserver_search_init (const char * hostna
830          goto leave;          goto leave;
831      }      }
832            
833      request = new char[300+1];      n=300;
834        request = new char[n+1];
835      if (!request)      if (!request)
836          BUG (0);          BUG (0);
837            
838      if (proxy.host && proxy.user) {      if (proxy.host && proxy.user) {
839          _snprintf (request, 300,          _snprintf (request, n,
840              "GET http://%s:%d/pks/lookup?op=index&search=%s HTTP/1.0\r\n"              "GET http://%s:%d/pks/lookup?op=index&search=%s HTTP/1.0\r\n"
841              "Proxy-Authorization: Basic %s\r\n\r\n",              "Proxy-Authorization: Basic %s\r\n\r\n",
842              skip_type_prefix (hostname), port, keyid, proxy.base64_user);              skip_type_prefix (hostname), port, keyid, proxy.base64_user);
843      }          }    
844      else if (proxy.host) {      else if (proxy.host) {
845          _snprintf (request, 300,          _snprintf (request, n,
846              "GET http://%s:%d/pks/lookup?op=index&search=%s HTTP/1.0\r\n\r\n",              "GET http://%s:%d/pks/lookup?op=index&search=%s HTTP/1.0\r\n\r\n",
847              skip_type_prefix (hostname), port, keyid);              skip_type_prefix (hostname), port, keyid);
848      }      }
849      else {      else {
850          _snprintf (request, 300,          _snprintf (request, n,
851                     "GET /pks/lookup?op=index&search=%s HTTP/1.0\r\n\r\n", keyid);                     "GET /pks/lookup?op=index&search=%s HTTP/1.0\r\n\r\n", keyid);
852      }      }
853            
854      if (debug)      if (debug)
855          log_f("%s\n", request);          log_f ("kserver_search_init:\r\n%s\r\n", request);
856            
857      if (sock_write (sock_fd, request, strlen (request)) == SOCKET_ERROR) {      if (sock_write (sock_fd, request, strlen (request)) == SOCKET_ERROR) {
858          rc = WPTERR_GENERAL;          rc = WPTERR_GENERAL;
# Line 872  kserver_search_chkresp (int fd) Line 872  kserver_search_chkresp (int fd)
872  {  {
873      char buf[128];      char buf[128];
874      int n=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 (debug)
880            log_f ("kserver_search_chkpresp: %s\r\n", buf);
881      if (strncmp (buf, "HTTP/1.", 7))      if (strncmp (buf, "HTTP/1.", 7))
882          return WPTERR_KEYSERVER_NOTFOUND;          return WPTERR_KEYSERVER_NOTFOUND;
883      if (strncmp (buf+(8+1), "200", 3))      if (strncmp (buf+(8+1), "200", 3))
# Line 900  kserver_search (int fd, keyserver_key * Line 902  kserver_search (int fd, keyserver_key *
902          log_f ("%s\n", buf);          log_f ("%s\n", buf);
903            
904      if (!strncmp (buf, "pub", 3)) {      if (!strncmp (buf, "pub", 3)) {
905            int revoked = strstr (buf, "KEY REVOKED") != NULL? 1 : 0;
906          key->bits = atol (buf+3);          key->bits = atol (buf+3);
907          p = strchr (buf, '>');          p = strchr (buf, '>');
908          if (!p)          if (!p)
# Line 913  kserver_search (int fd, keyserver_key * Line 916  kserver_search (int fd, keyserver_key *
916          pos = p - buf + 5;          pos = p - buf + 5;
917          memcpy (key->date, buf + pos, 10);          memcpy (key->date, buf + pos, 10);
918          key->date[10] = '\0';          key->date[10] = '\0';
919            if (revoked) {
920                strcpy (key->uid, "KEY REVOKED: not checked");
921                return 0;
922            }
923          pos += 10;          pos += 10;
924          p = buf + pos + 1;          p = buf + pos + 1;
925          while (p && *p != '>')          while (p && *p != '>')

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26