version 1.38, 2002/06/27 19:49:08 |
version 1.39, 2002/07/06 01:01:26 |
|
|
static char * |
static char * |
Linebuf_getline(Linebuf * lb) |
Linebuf_getline(Linebuf * lb) |
{ |
{ |
|
u_int size; |
int n = 0; |
int n = 0; |
|
void *p; |
|
|
lb->lineno++; |
lb->lineno++; |
for (;;) { |
for (;;) { |
/* Read a line */ |
/* Read a line */ |
if (!fgets(&lb->buf[n], lb->size - n, lb->stream)) { |
if (!fgets(&lb->buf[n], lb->size - n, lb->stream)) { |
if (ferror(lb->stream) && lb->errfun) |
if (ferror(lb->stream) && lb->errfun) |
(*lb->errfun) ("%s: %s\n", lb->filename, |
(*lb->errfun)("%s: %s\n", lb->filename, |
strerror(errno)); |
strerror(errno)); |
return (NULL); |
return (NULL); |
} |
} |
|
|
} |
} |
if (n != lb->size - 1) { |
if (n != lb->size - 1) { |
if (lb->errfun) |
if (lb->errfun) |
(*lb->errfun) ("%s: skipping incomplete last line\n", |
(*lb->errfun)("%s: skipping incomplete last line\n", |
lb->filename); |
lb->filename); |
return (NULL); |
return (NULL); |
} |
} |
/* Double the buffer if we need more space */ |
/* Double the buffer if we need more space */ |
if (!(lb->buf = realloc(lb->buf, (lb->size *= 2)))) { |
lb->size *= 2; |
|
if ((p = realloc(lb->buf, lb->size)) == NULL) { |
|
lb->size /= 2; |
if (lb->errfun) |
if (lb->errfun) |
(*lb->errfun) ("linebuf (%s): realloc failed\n", |
(*lb->errfun)("linebuf (%s): realloc failed\n", |
lb->filename); |
lb->filename); |
return (NULL); |
return (NULL); |
} |
} |
|
lb->buf = p; |
} |
} |
} |
} |
|
|
|
|
fdlim_set(int lim) |
fdlim_set(int lim) |
{ |
{ |
struct rlimit rlfd; |
struct rlimit rlfd; |
|
|
if (lim <= 0) |
if (lim <= 0) |
return (-1); |
return (-1); |
if (getrlimit(RLIMIT_NOFILE, &rlfd) < 0) |
if (getrlimit(RLIMIT_NOFILE, &rlfd) < 0) |
|
|
static int |
static int |
conalloc(char *iname, char *oname, int keytype) |
conalloc(char *iname, char *oname, int keytype) |
{ |
{ |
int s; |
|
char *namebase, *name, *namelist; |
char *namebase, *name, *namelist; |
|
int s; |
|
|
namebase = namelist = xstrdup(iname); |
namebase = namelist = xstrdup(iname); |
|
|
|
|
static int |
static int |
conrecycle(int s) |
conrecycle(int s) |
{ |
{ |
int ret; |
|
con *c = &fdcon[s]; |
con *c = &fdcon[s]; |
|
int ret; |
|
|
ret = conalloc(c->c_namelist, c->c_output_name, c->c_keytype); |
ret = conalloc(c->c_namelist, c->c_output_name, c->c_keytype); |
confree(s); |
confree(s); |
|
|
static void |
static void |
congreet(int s) |
congreet(int s) |
{ |
{ |
|
int remote_major, remote_minor, n = 0; |
char buf[256], *cp; |
char buf[256], *cp; |
char remote_version[sizeof buf]; |
char remote_version[sizeof buf]; |
size_t bufsiz; |
size_t bufsiz; |
int remote_major, remote_minor, n = 0; |
|
con *c = &fdcon[s]; |
con *c = &fdcon[s]; |
|
|
bufsiz = sizeof(buf); |
bufsiz = sizeof(buf); |
|
|
static void |
static void |
conread(int s) |
conread(int s) |
{ |
{ |
int n; |
|
con *c = &fdcon[s]; |
con *c = &fdcon[s]; |
|
int n; |
|
|
if (c->c_status == CS_CON) { |
if (c->c_status == CS_CON) { |
congreet(s); |
congreet(s); |
|
|
static void |
static void |
conloop(void) |
conloop(void) |
{ |
{ |
fd_set *r, *e; |
|
struct timeval seltime, now; |
struct timeval seltime, now; |
int i; |
fd_set *r, *e; |
con *c; |
con *c; |
|
int i; |
|
|
gettimeofday(&now, NULL); |
gettimeofday(&now, NULL); |
c = TAILQ_FIRST(&tq); |
c = TAILQ_FIRST(&tq); |
|
|
fatal(const char *fmt,...) |
fatal(const char *fmt,...) |
{ |
{ |
va_list args; |
va_list args; |
|
|
va_start(args, fmt); |
va_start(args, fmt); |
do_log(SYSLOG_LEVEL_FATAL, fmt, args); |
do_log(SYSLOG_LEVEL_FATAL, fmt, args); |
va_end(args); |
va_end(args); |
|
|
static void |
static void |
usage(void) |
usage(void) |
{ |
{ |
fprintf(stderr, "Usage: %s [options] host ...\n", |
fprintf(stderr, "usage: %s [-v46] [-p port] [-T timeout] [-f file]\n" |
|
"\t\t [host | addrlist namelist] [...]\n", |
__progname); |
__progname); |
fprintf(stderr, "Options:\n"); |
|
fprintf(stderr, " -f file Read hosts or addresses from file.\n"); |
|
fprintf(stderr, " -p port Connect to the specified port.\n"); |
|
fprintf(stderr, " -t keytype Specify the host key type.\n"); |
|
fprintf(stderr, " -T timeout Set connection timeout.\n"); |
|
fprintf(stderr, " -v Verbose; display verbose debugging messages.\n"); |
|
fprintf(stderr, " -4 Use IPv4 only.\n"); |
|
fprintf(stderr, " -6 Use IPv6 only.\n"); |
|
exit(1); |
exit(1); |
} |
} |
|
|