diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ssh-keyscan.c | 32 |
2 files changed, 22 insertions, 15 deletions
@@ -121,6 +121,9 @@ | |||
121 | scp.c serverloop.c session.c sftp-server.8 sftp.1 ssh-add.1 ssh-add.c | 121 | scp.c serverloop.c session.c sftp-server.8 sftp.1 ssh-add.1 ssh-add.c |
122 | ssh-agent.1 ssh-agent.c ssh-keygen.1 ssh.1 sshd.8] | 122 | ssh-agent.1 ssh-agent.c ssh-keygen.1 ssh.1 sshd.8] |
123 | make copyright lines the same format | 123 | make copyright lines the same format |
124 | - deraadt@cvs.openbsd.org 2001/03/03 06:53:12 | ||
125 | [ssh-keyscan.c] | ||
126 | standard theo sweep | ||
124 | 127 | ||
125 | 20010304 | 128 | 20010304 |
126 | - (bal) Remove make-ssh-known-hosts.1 since it's no longer valid. | 129 | - (bal) Remove make-ssh-known-hosts.1 since it's no longer valid. |
@@ -4313,4 +4316,4 @@ | |||
4313 | - Wrote replacements for strlcpy and mkdtemp | 4316 | - Wrote replacements for strlcpy and mkdtemp |
4314 | - Released 1.0pre1 | 4317 | - Released 1.0pre1 |
4315 | 4318 | ||
4316 | $Id: ChangeLog,v 1.888 2001/03/05 06:59:27 mouring Exp $ | 4319 | $Id: ChangeLog,v 1.889 2001/03/05 07:01:18 mouring Exp $ |
diff --git a/ssh-keyscan.c b/ssh-keyscan.c index a8fb028d8..fe03c145c 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c | |||
@@ -8,7 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include "includes.h" | 10 | #include "includes.h" |
11 | RCSID("$OpenBSD: ssh-keyscan.c,v 1.17 2001/02/21 07:37:04 deraadt Exp $"); | 11 | RCSID("$OpenBSD: ssh-keyscan.c,v 1.18 2001/03/03 06:53:12 deraadt Exp $"); |
12 | 12 | ||
13 | #if defined(HAVE_SYS_QUEUE_H) && !defined(HAVE_BOGUS_SYS_QUEUE_H) | 13 | #if defined(HAVE_SYS_QUEUE_H) && !defined(HAVE_BOGUS_SYS_QUEUE_H) |
14 | #include <sys/queue.h> | 14 | #include <sys/queue.h> |
@@ -26,6 +26,7 @@ RCSID("$OpenBSD: ssh-keyscan.c,v 1.17 2001/02/21 07:37:04 deraadt Exp $"); | |||
26 | #include "buffer.h" | 26 | #include "buffer.h" |
27 | #include "bufaux.h" | 27 | #include "bufaux.h" |
28 | #include "log.h" | 28 | #include "log.h" |
29 | #include "atomicio.h" | ||
29 | 30 | ||
30 | static int argno = 1; /* Number of argument currently being parsed */ | 31 | static int argno = 1; /* Number of argument currently being parsed */ |
31 | 32 | ||
@@ -37,7 +38,7 @@ int family = AF_UNSPEC; /* IPv4, IPv6 or both */ | |||
37 | int timeout = 5; | 38 | int timeout = 5; |
38 | 39 | ||
39 | int maxfd; | 40 | int maxfd; |
40 | #define maxcon (maxfd - 10) | 41 | #define MAXCON (maxfd - 10) |
41 | 42 | ||
42 | #ifdef HAVE___PROGNAME | 43 | #ifdef HAVE___PROGNAME |
43 | extern char *__progname; | 44 | extern char *__progname; |
@@ -368,9 +369,9 @@ conalloc(char *iname, char *oname) | |||
368 | void | 369 | void |
369 | confree(int s) | 370 | confree(int s) |
370 | { | 371 | { |
371 | close(s); | ||
372 | if (s >= maxfd || fdcon[s].c_status == CS_UNUSED) | 372 | if (s >= maxfd || fdcon[s].c_status == CS_UNUSED) |
373 | fatal("confree: attempt to free bad fdno %d", s); | 373 | fatal("confree: attempt to free bad fdno %d", s); |
374 | close(s); | ||
374 | xfree(fdcon[s].c_namebase); | 375 | xfree(fdcon[s].c_namebase); |
375 | xfree(fdcon[s].c_output_name); | 376 | xfree(fdcon[s].c_output_name); |
376 | if (fdcon[s].c_status == CS_KEYS) | 377 | if (fdcon[s].c_status == CS_KEYS) |
@@ -428,7 +429,7 @@ congreet(int s) | |||
428 | buf[n - 1] = '\0'; | 429 | buf[n - 1] = '\0'; |
429 | fprintf(stderr, "# %s %s\n", c->c_name, buf); | 430 | fprintf(stderr, "# %s %s\n", c->c_name, buf); |
430 | n = snprintf(buf, sizeof buf, "SSH-1.5-OpenSSH-keyscan\r\n"); | 431 | n = snprintf(buf, sizeof buf, "SSH-1.5-OpenSSH-keyscan\r\n"); |
431 | if (write(s, buf, n) != n) { | 432 | if (atomicio(write, s, buf, n) != n) { |
432 | error("write (%s): %s", c->c_name, strerror(errno)); | 433 | error("write (%s): %s", c->c_name, strerror(errno)); |
433 | confree(s); | 434 | confree(s); |
434 | return; | 435 | return; |
@@ -488,9 +489,8 @@ conloop(void) | |||
488 | gettimeofday(&now, NULL); | 489 | gettimeofday(&now, NULL); |
489 | c = tq.tqh_first; | 490 | c = tq.tqh_first; |
490 | 491 | ||
491 | if (c && | 492 | if (c && (c->c_tv.tv_sec > now.tv_sec || |
492 | (c->c_tv.tv_sec > now.tv_sec || | 493 | (c->c_tv.tv_sec == now.tv_sec && c->c_tv.tv_usec > now.tv_usec))) { |
493 | (c->c_tv.tv_sec == now.tv_sec && c->c_tv.tv_usec > now.tv_usec))) { | ||
494 | seltime = c->c_tv; | 494 | seltime = c->c_tv; |
495 | seltime.tv_sec -= now.tv_sec; | 495 | seltime.tv_sec -= now.tv_sec; |
496 | seltime.tv_usec -= now.tv_usec; | 496 | seltime.tv_usec -= now.tv_usec; |
@@ -506,18 +506,19 @@ conloop(void) | |||
506 | (errno == EAGAIN || errno == EINTR)) | 506 | (errno == EAGAIN || errno == EINTR)) |
507 | ; | 507 | ; |
508 | 508 | ||
509 | for (i = 0; i < maxfd; i++) | 509 | for (i = 0; i < maxfd; i++) { |
510 | if (FD_ISSET(i, &e)) { | 510 | if (FD_ISSET(i, &e)) { |
511 | error("%s: exception!", fdcon[i].c_name); | 511 | error("%s: exception!", fdcon[i].c_name); |
512 | confree(i); | 512 | confree(i); |
513 | } else if (FD_ISSET(i, &r)) | 513 | } else if (FD_ISSET(i, &r)) |
514 | conread(i); | 514 | conread(i); |
515 | } | ||
515 | 516 | ||
516 | c = tq.tqh_first; | 517 | c = tq.tqh_first; |
517 | while (c && | 518 | while (c && (c->c_tv.tv_sec < now.tv_sec || |
518 | (c->c_tv.tv_sec < now.tv_sec || | 519 | (c->c_tv.tv_sec == now.tv_sec && c->c_tv.tv_usec < now.tv_usec))) { |
519 | (c->c_tv.tv_sec == now.tv_sec && c->c_tv.tv_usec < now.tv_usec))) { | ||
520 | int s = c->c_fd; | 520 | int s = c->c_fd; |
521 | |||
521 | c = c->c_link.tqe_next; | 522 | c = c->c_link.tqe_next; |
522 | conrecycle(s); | 523 | conrecycle(s); |
523 | } | 524 | } |
@@ -540,6 +541,7 @@ nexthost(int argc, char **argv) | |||
540 | return (argv[argno++]); | 541 | return (argv[argno++]); |
541 | } else if (!strncmp(argv[argno], "-f", 2)) { | 542 | } else if (!strncmp(argv[argno], "-f", 2)) { |
542 | char *fname; | 543 | char *fname; |
544 | |||
543 | if (argv[argno][2]) | 545 | if (argv[argno][2]) |
544 | fname = &argv[argno++][2]; | 546 | fname = &argv[argno++][2]; |
545 | else if (++argno >= argc) { | 547 | else if (++argno >= argc) { |
@@ -551,9 +553,11 @@ nexthost(int argc, char **argv) | |||
551 | fname = NULL; | 553 | fname = NULL; |
552 | lb = Linebuf_alloc(fname, error); | 554 | lb = Linebuf_alloc(fname, error); |
553 | } else | 555 | } else |
554 | error("ignoring invalid/misplaced option `%s'", argv[argno++]); | 556 | error("ignoring invalid/misplaced option `%s'", |
557 | argv[argno++]); | ||
555 | } else { | 558 | } else { |
556 | char *line; | 559 | char *line; |
560 | |||
557 | line = Linebuf_getline(lb); | 561 | line = Linebuf_getline(lb); |
558 | if (line) | 562 | if (line) |
559 | return (line); | 563 | return (line); |
@@ -601,7 +605,7 @@ main(int argc, char **argv) | |||
601 | fatal("%s: fdlim_get: bad value", __progname); | 605 | fatal("%s: fdlim_get: bad value", __progname); |
602 | if (maxfd > MAXMAXFD) | 606 | if (maxfd > MAXMAXFD) |
603 | maxfd = MAXMAXFD; | 607 | maxfd = MAXMAXFD; |
604 | if (maxcon <= 0) | 608 | if (MAXCON <= 0) |
605 | fatal("%s: not enough file descriptors", __progname); | 609 | fatal("%s: not enough file descriptors", __progname); |
606 | if (maxfd > fdlim_get(0)) | 610 | if (maxfd > fdlim_get(0)) |
607 | fdlim_set(maxfd); | 611 | fdlim_set(maxfd); |
@@ -609,7 +613,7 @@ main(int argc, char **argv) | |||
609 | memset(fdcon, 0, maxfd * sizeof(con)); | 613 | memset(fdcon, 0, maxfd * sizeof(con)); |
610 | 614 | ||
611 | do { | 615 | do { |
612 | while (ncon < maxcon) { | 616 | while (ncon < MAXCON) { |
613 | char *name; | 617 | char *name; |
614 | 618 | ||
615 | host = nexthost(argc, argv); | 619 | host = nexthost(argc, argv); |