version 1.89, 2002/03/19 14:27:39 |
version 1.89.2.1, 2002/05/18 04:12:10 |
|
|
#include "canohost.h" |
#include "canohost.h" |
#include "match.h" |
#include "match.h" |
#include "monitor_wrap.h" |
#include "monitor_wrap.h" |
|
#include "atomicio.h" |
|
|
/* import */ |
/* import */ |
extern ServerOptions options; |
extern ServerOptions options; |
|
|
} |
} |
} |
} |
|
|
static void |
char * |
userauth_banner(void) |
auth2_read_banner(void) |
{ |
{ |
struct stat st; |
struct stat st; |
char *banner = NULL; |
char *banner = NULL; |
off_t len, n; |
off_t len, n; |
int fd; |
int fd; |
|
|
if (options.banner == NULL || (datafellows & SSH_BUG_BANNER)) |
if ((fd = open(options.banner, O_RDONLY)) == -1) |
return; |
return (NULL); |
if ((fd = open(options.banner, O_RDONLY)) < 0) |
if (fstat(fd, &st) == -1) { |
return; |
close(fd); |
if (fstat(fd, &st) < 0) |
return (NULL); |
goto done; |
} |
len = st.st_size; |
len = st.st_size; |
banner = xmalloc(len + 1); |
banner = xmalloc(len + 1); |
if ((n = read(fd, banner, len)) < 0) |
n = atomicio(read, fd, banner, len); |
goto done; |
close(fd); |
|
|
|
if (n != len) { |
|
free(banner); |
|
return (NULL); |
|
} |
banner[n] = '\0'; |
banner[n] = '\0'; |
|
|
|
return (banner); |
|
} |
|
|
|
static void |
|
userauth_banner(void) |
|
{ |
|
char *banner = NULL; |
|
|
|
if (options.banner == NULL || (datafellows & SSH_BUG_BANNER)) |
|
return; |
|
|
|
if ((banner = PRIVSEP(auth2_read_banner())) == NULL) |
|
goto done; |
|
|
packet_start(SSH2_MSG_USERAUTH_BANNER); |
packet_start(SSH2_MSG_USERAUTH_BANNER); |
packet_put_cstring(banner); |
packet_put_cstring(banner); |
packet_put_cstring(""); /* language, unused */ |
packet_put_cstring(""); /* language, unused */ |
|
|
done: |
done: |
if (banner) |
if (banner) |
xfree(banner); |
xfree(banner); |
close(fd); |
|
return; |
return; |
} |
} |
|
|