289 |
|
|
290 |
|
|
291 |
const char* |
const char* |
292 |
kserver_strerror( void ) |
kserver_strerror (void) |
293 |
{ |
{ |
294 |
if( hkp_err ) |
if (hkp_err) |
295 |
return hkp_errmsg; |
return hkp_errmsg; |
296 |
return NULL; |
return NULL; |
297 |
} /* kserver_strerror */ |
} /* kserver_strerror */ |
351 |
kserver_update_proxyuser (const char *proxy_user, const char *proxy_pass) |
kserver_update_proxyuser (const char *proxy_user, const char *proxy_pass) |
352 |
{ |
{ |
353 |
char t[257]; /* user:pass = 127+1+127+1 = 257 */ |
char t[257]; /* user:pass = 127+1+127+1 = 257 */ |
354 |
|
int n = 0; |
355 |
|
|
356 |
|
n = 4*strlen (proxy_user) / 3 + 32 + strlen (proxy_pass) + 2; |
357 |
free_if_alloc (proxy.base64_user); |
free_if_alloc (proxy.base64_user); |
358 |
proxy.base64_user = new char[4*strlen (proxy_user) / 3 + 32 + strlen (proxy_pass)]; |
proxy.base64_user = new char[n]; |
359 |
if (!proxy.base64_user) |
if (!proxy.base64_user) |
360 |
BUG (0); |
BUG (0); |
361 |
_snprintf (t, sizeof (t)-1, "%s:%s", proxy_user, proxy_pass); |
_snprintf (t, sizeof (t)-1, "%s:%s", proxy_user, proxy_pass); |
382 |
|
|
383 |
|
|
384 |
static int |
static int |
385 |
|
port_from_proto (int proto) |
386 |
|
{ |
387 |
|
switch (proto) { |
388 |
|
case KSPROTO_LDAP: return 0; |
389 |
|
case KSPROTO_FINGER: return FINGER_PORT; |
390 |
|
case KSPROTO_HTTP: return HKP_PORT; |
391 |
|
} |
392 |
|
return 0; |
393 |
|
} |
394 |
|
|
395 |
|
|
396 |
|
static int |
397 |
proto_from_URL (const char * buf) |
proto_from_URL (const char * buf) |
398 |
{ |
{ |
399 |
if (strstr( buf, "ldap")) |
if (strstr( buf, "ldap")) |
414 |
BUG (0); |
BUG (0); |
415 |
default_keyserver_port = port; |
default_keyserver_port = port; |
416 |
} |
} |
417 |
server[0].name = default_keyserver; |
server[0].name = m_strdup (default_keyserver); |
418 |
server[0].used = 1; |
server[0].used = 1; |
419 |
server[0].port = port; |
server[0].port = port; |
420 |
server[0].proto = proto_from_URL (default_keyserver); |
server[0].proto = proto_from_URL (default_keyserver); |
448 |
char buf[1024], * s, * p; |
char buf[1024], * s, * p; |
449 |
char *user = NULL, *pass = NULL; |
char *user = NULL, *pass = NULL; |
450 |
int pos, proxy_auth = 0; |
int pos, proxy_auth = 0; |
451 |
int no_config=0; |
int no_config=0, chk_pos=0; |
452 |
|
|
453 |
for (pos = 0; pos < MAX_KEYSERVERS; pos++) { |
for (pos = 0; pos < MAX_KEYSERVERS; pos++) { |
454 |
server[pos].used = 0; |
server[pos].used = 0; |
459 |
if (!fp) { |
if (!fp) { |
460 |
for (pos = 0; server_list[pos]; pos++) { |
for (pos = 0; server_list[pos]; pos++) { |
461 |
server[pos].used = 1; |
server[pos].used = 1; |
462 |
server[pos].name = (char *)server_list[pos]; |
server[pos].name = m_strdup (server_list[pos]); |
463 |
server[pos].proto = proto_from_URL( server_list[pos] ); |
server[pos].proto = proto_from_URL (server_list[pos]); |
464 |
} |
} |
465 |
no_config=1; |
no_config=1; |
466 |
} |
} |
502 |
_("Keyserver Error"), MB_ERR); |
_("Keyserver Error"), MB_ERR); |
503 |
continue; |
continue; |
504 |
} |
} |
505 |
p = strchr (s+6, ':'); |
chk_pos=6; |
506 |
|
if (strstr (s, "finger")) |
507 |
|
chk_pos = 10; |
508 |
|
p = strchr (s+chk_pos, ':'); |
509 |
server[pos].used = 1; |
server[pos].used = 1; |
510 |
server[pos].proto = proto_from_URL (s); |
server[pos].proto = proto_from_URL (s); |
511 |
|
server[pos].port = port_from_proto (server[pos].proto); |
512 |
if (!p) |
if (!p) |
513 |
server[pos].name = m_strdup (s); |
server[pos].name = m_strdup (s); |
514 |
else { |
else { |
629 |
|
|
630 |
|
|
631 |
static char* |
static char* |
632 |
kserver_urlencode (const char *pubkey, int octets, int *newlen) |
kserver_urlencode (const char *pubkey, size_t octets, size_t *newlen) |
633 |
{ |
{ |
634 |
char *p, numbuf[5]; |
char *p, numbuf[5]; |
635 |
size_t j = 0; |
size_t j = 0; |
636 |
int i, size; |
size_t i, size; |
637 |
|
|
638 |
p = new char [2*octets]; |
p = new char [2*octets]; |
639 |
if (!p) |
if (!p) |
640 |
BUG (0); |
BUG (0); |
641 |
|
|
642 |
for (size=0, i=0; i<octets; i++) { |
for (size=0, i=0; i < octets; i++) { |
643 |
if (isalnum (pubkey[i]) || pubkey[i] == '-') { |
if (isalnum (pubkey[i]) || pubkey[i] == '-') { |
644 |
p[size] = pubkey[i]; |
p[size] = pubkey[i]; |
645 |
size++; |
size++; |
669 |
kserver_send_request (const char *hostname, u16 port, const char *pubkey, int octets) |
kserver_send_request (const char *hostname, u16 port, const char *pubkey, int octets) |
670 |
{ |
{ |
671 |
char *request = NULL, *enc_pubkey = NULL; |
char *request = NULL, *enc_pubkey = NULL; |
672 |
int reqlen, enc_octets; |
int reqlen; |
673 |
|
size_t enc_octets; |
674 |
|
|
675 |
if (debug) |
if (debug) |
676 |
log_f ("kserver_send_request: %s:%d\n", hostname, port); |
log_f ("kserver_send_request: %s:%d\n", hostname, port); |
1261 |
rc = WPTERR_WINSOCK_RECVKEY; |
rc = WPTERR_WINSOCK_RECVKEY; |
1262 |
return rc; |
return rc; |
1263 |
} |
} |
1264 |
|
|
1265 |
|
|
1266 |
|
int |
1267 |
|
check_IP_or_hostname (const char *name) |
1268 |
|
{ |
1269 |
|
const char *not_allowed = "=!�$%&@#*~\\/}][{<>|,;:'"; |
1270 |
|
size_t i, j; |
1271 |
|
|
1272 |
|
for (i=0; i < strlen (name); i++) { |
1273 |
|
for (j =0; j < strlen (not_allowed); j++) { |
1274 |
|
if (name[i] == not_allowed[j]) |
1275 |
|
return -1; |
1276 |
|
} |
1277 |
|
} |
1278 |
|
return 0; |
1279 |
|
} |