]> andersk Git - openssh.git/blob - auth2-none.c
- djm@cvs.openbsd.org 2006/03/25 01:13:23
[openssh.git] / auth2-none.c
1 /*
2  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #include "includes.h"
26
27 #include <sys/types.h>
28 #include <sys/stat.h>
29
30 #include "auth.h"
31 #include "xmalloc.h"
32 #include "packet.h"
33 #include "log.h"
34 #include "servconf.h"
35 #include "atomicio.h"
36 #include "compat.h"
37 #include "ssh2.h"
38 #include "monitor_wrap.h"
39
40 /* import */
41 extern ServerOptions options;
42
43 /* "none" is allowed only one time */
44 static int none_enabled = 1;
45
46 char *
47 auth2_read_banner(void)
48 {
49         struct stat st;
50         char *banner = NULL;
51         size_t len, n;
52         int fd;
53
54         if ((fd = open(options.banner, O_RDONLY)) == -1)
55                 return (NULL);
56         if (fstat(fd, &st) == -1) {
57                 close(fd);
58                 return (NULL);
59         }
60         if (st.st_size > 1*1024*1024) {
61                 close(fd);
62                 return (NULL);
63         }
64
65         len = (size_t)st.st_size;               /* truncate */
66         banner = xmalloc(len + 1);
67         n = atomicio(read, fd, banner, len);
68         close(fd);
69
70         if (n != len) {
71                 xfree(banner);
72                 return (NULL);
73         }
74         banner[n] = '\0';
75
76         return (banner);
77 }
78
79 void
80 userauth_send_banner(const char *msg)
81 {
82         if (datafellows & SSH_BUG_BANNER)
83                 return;
84
85         packet_start(SSH2_MSG_USERAUTH_BANNER);
86         packet_put_cstring(msg);
87         packet_put_cstring("");         /* language, unused */
88         packet_send();
89         debug("%s: sent", __func__);
90 }
91
92 static void
93 userauth_banner(void)
94 {
95         char *banner = NULL;
96
97         if (options.banner == NULL || (datafellows & SSH_BUG_BANNER))
98                 return;
99
100         if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
101                 goto done;
102         userauth_send_banner(banner);
103
104 done:
105         if (banner)
106                 xfree(banner);
107 }
108
109 static int
110 userauth_none(Authctxt *authctxt)
111 {
112         none_enabled = 0;
113         packet_check_eom();
114         userauth_banner();
115 #ifdef HAVE_CYGWIN
116         if (check_nt_auth(1, authctxt->pw) == 0)
117                 return (0);
118 #endif
119         if (options.password_authentication)
120                 return (PRIVSEP(auth_password(authctxt, "")));
121         return (0);
122 }
123
124 Authmethod method_none = {
125         "none",
126         userauth_none,
127         &none_enabled
128 };
This page took 0.046324 seconds and 5 git commands to generate.