diff options
Diffstat (limited to 'auth2-none.c')
-rw-r--r-- | auth2-none.c | 69 |
1 files changed, 3 insertions, 66 deletions
diff --git a/auth2-none.c b/auth2-none.c index 952b44824..10accfe55 100644 --- a/auth2-none.c +++ b/auth2-none.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: auth2-none.c,v 1.13 2006/08/05 07:52:52 dtucker Exp $ */ | 1 | /* $OpenBSD: auth2-none.c,v 1.15 2008/07/02 12:36:39 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2000 Markus Friedl. All rights reserved. | 3 | * Copyright (c) 2000 Markus Friedl. All rights reserved. |
4 | * | 4 | * |
@@ -31,8 +31,10 @@ | |||
31 | 31 | ||
32 | #include <fcntl.h> | 32 | #include <fcntl.h> |
33 | #include <stdarg.h> | 33 | #include <stdarg.h> |
34 | #include <string.h> | ||
34 | #include <unistd.h> | 35 | #include <unistd.h> |
35 | 36 | ||
37 | #include "atomicio.h" | ||
36 | #include "xmalloc.h" | 38 | #include "xmalloc.h" |
37 | #include "key.h" | 39 | #include "key.h" |
38 | #include "hostfile.h" | 40 | #include "hostfile.h" |
@@ -41,7 +43,6 @@ | |||
41 | #include "log.h" | 43 | #include "log.h" |
42 | #include "buffer.h" | 44 | #include "buffer.h" |
43 | #include "servconf.h" | 45 | #include "servconf.h" |
44 | #include "atomicio.h" | ||
45 | #include "compat.h" | 46 | #include "compat.h" |
46 | #include "ssh2.h" | 47 | #include "ssh2.h" |
47 | #ifdef GSSAPI | 48 | #ifdef GSSAPI |
@@ -55,75 +56,11 @@ extern ServerOptions options; | |||
55 | /* "none" is allowed only one time */ | 56 | /* "none" is allowed only one time */ |
56 | static int none_enabled = 1; | 57 | static int none_enabled = 1; |
57 | 58 | ||
58 | char * | ||
59 | auth2_read_banner(void) | ||
60 | { | ||
61 | struct stat st; | ||
62 | char *banner = NULL; | ||
63 | size_t len, n; | ||
64 | int fd; | ||
65 | |||
66 | if ((fd = open(options.banner, O_RDONLY)) == -1) | ||
67 | return (NULL); | ||
68 | if (fstat(fd, &st) == -1) { | ||
69 | close(fd); | ||
70 | return (NULL); | ||
71 | } | ||
72 | if (st.st_size > 1*1024*1024) { | ||
73 | close(fd); | ||
74 | return (NULL); | ||
75 | } | ||
76 | |||
77 | len = (size_t)st.st_size; /* truncate */ | ||
78 | banner = xmalloc(len + 1); | ||
79 | n = atomicio(read, fd, banner, len); | ||
80 | close(fd); | ||
81 | |||
82 | if (n != len) { | ||
83 | xfree(banner); | ||
84 | return (NULL); | ||
85 | } | ||
86 | banner[n] = '\0'; | ||
87 | |||
88 | return (banner); | ||
89 | } | ||
90 | |||
91 | void | ||
92 | userauth_send_banner(const char *msg) | ||
93 | { | ||
94 | if (datafellows & SSH_BUG_BANNER) | ||
95 | return; | ||
96 | |||
97 | packet_start(SSH2_MSG_USERAUTH_BANNER); | ||
98 | packet_put_cstring(msg); | ||
99 | packet_put_cstring(""); /* language, unused */ | ||
100 | packet_send(); | ||
101 | debug("%s: sent", __func__); | ||
102 | } | ||
103 | |||
104 | static void | ||
105 | userauth_banner(void) | ||
106 | { | ||
107 | char *banner = NULL; | ||
108 | |||
109 | if (options.banner == NULL || (datafellows & SSH_BUG_BANNER)) | ||
110 | return; | ||
111 | |||
112 | if ((banner = PRIVSEP(auth2_read_banner())) == NULL) | ||
113 | goto done; | ||
114 | userauth_send_banner(banner); | ||
115 | |||
116 | done: | ||
117 | if (banner) | ||
118 | xfree(banner); | ||
119 | } | ||
120 | |||
121 | static int | 59 | static int |
122 | userauth_none(Authctxt *authctxt) | 60 | userauth_none(Authctxt *authctxt) |
123 | { | 61 | { |
124 | none_enabled = 0; | 62 | none_enabled = 0; |
125 | packet_check_eom(); | 63 | packet_check_eom(); |
126 | userauth_banner(); | ||
127 | #ifdef HAVE_CYGWIN | 64 | #ifdef HAVE_CYGWIN |
128 | if (check_nt_auth(1, authctxt->pw) == 0) | 65 | if (check_nt_auth(1, authctxt->pw) == 0) |
129 | return (0); | 66 | return (0); |