]> andersk Git - openssh.git/blob - auth.h
- markus@cvs.openbsd.org 2001/06/23 00:20:57
[openssh.git] / auth.h
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  * $OpenBSD: auth.h,v 1.18 2001/06/23 00:20:58 markus Exp $
25  */
26 #ifndef AUTH_H
27 #define AUTH_H
28
29 #include "key.h"
30 #include "hostfile.h"
31 #include <openssl/rsa.h>
32
33 #ifdef HAVE_LOGIN_CAP
34 #include <login_cap.h>
35 #endif
36 #ifdef BSD_AUTH
37 #include <bsd_auth.h>
38 #endif
39
40 typedef struct Authctxt Authctxt;
41 typedef struct KbdintDevice KbdintDevice;
42
43 struct Authctxt {
44         int success;
45         int postponed;
46         int valid;
47         int attempt;
48         int failures;
49         char *user;
50         char *service;
51         struct passwd *pw;
52         char *style;
53         void *kbdintctxt;
54 #ifdef BSD_AUTH
55         auth_session_t *as;
56 #endif
57 };
58
59 /*
60  * Keyboard interactive device:
61  * init_ctx     returns: non NULL upon success 
62  * query        returns: 0 - success, otherwise failure 
63  * respond      returns: 0 - success, 1 - need further interaction,
64  *              otherwise - failure
65  */
66 struct KbdintDevice
67 {
68         const char *name;
69         void*   (*init_ctx)     __P((Authctxt*));
70         int     (*query)        __P((void *ctx, char **name, char **infotxt,
71                                 u_int *numprompts, char ***prompts,
72                                 u_int **echo_on));
73         int     (*respond)      __P((void *ctx, u_int numresp, char **responses));
74         void    (*free_ctx)     __P((void *ctx));
75 };
76
77 /*
78  * Tries to authenticate the user using the .rhosts file.  Returns true if
79  * authentication succeeds.  If ignore_rhosts is non-zero, this will not
80  * consider .rhosts and .shosts (/etc/hosts.equiv will still be used).
81  */
82 int     auth_rhosts(struct passwd * pw, const char *client_user);
83
84 /* extended interface similar to auth_rhosts() */
85 int
86 auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
87     const char *ipaddr);
88
89 /*
90  * Tries to authenticate the user using the .rhosts file and the host using
91  * its host key.  Returns true if authentication succeeds.
92  */
93 int
94 auth_rhosts_rsa(struct passwd * pw, const char *client_user, RSA* client_host_key);
95
96 /*
97  * Tries to authenticate the user using password.  Returns true if
98  * authentication succeeds.
99  */
100 int     auth_password(Authctxt *authctxt, const char *password);
101
102 /*
103  * Performs the RSA authentication dialog with the client.  This returns 0 if
104  * the client could not be authenticated, and 1 if authentication was
105  * successful.  This may exit if there is a serious protocol violation.
106  */
107 int     auth_rsa(struct passwd * pw, BIGNUM * client_n);
108
109 /*
110  * Parses an RSA key (number of bits, e, n) from a string.  Moves the pointer
111  * over the key.  Skips any whitespace at the beginning and at end.
112  */
113 int     auth_rsa_read_key(char **cpp, u_int *bitsp, BIGNUM * e, BIGNUM * n);
114
115 /*
116  * Performs the RSA authentication challenge-response dialog with the client,
117  * and returns true (non-zero) if the client gave the correct answer to our
118  * challenge; returns zero if the client gives a wrong answer.
119  */
120 int     auth_rsa_challenge_dialog(RSA *pk);
121
122 #ifdef KRB4
123 #include <krb.h>
124 /*
125  * Performs Kerberos v4 mutual authentication with the client. This returns 0
126  * if the client could not be authenticated, and 1 if authentication was
127  * successful.  This may exit if there is a serious protocol violation.
128  */
129 int     auth_krb4(const char *server_user, KTEXT auth, char **client);
130 int     krb4_init(uid_t uid);
131 void    krb4_cleanup_proc(void *ignore);
132 int     auth_krb4_password(struct passwd * pw, const char *password);
133
134 #ifdef AFS
135 #include <kafs.h>
136
137 /* Accept passed Kerberos v4 ticket-granting ticket and AFS tokens. */
138 int     auth_kerberos_tgt(struct passwd * pw, const char *string);
139 int     auth_afs_token(struct passwd * pw, const char *token_string);
140 #endif                          /* AFS */
141
142 #endif                          /* KRB4 */
143
144 #include "auth-pam.h"
145 #include "auth2-pam.h"
146
147 void    do_authentication(void);
148 void    do_authentication2(void);
149
150 Authctxt *authctxt_new(void);
151 void    auth_log(Authctxt *authctxt, int authenticated, char *method, char *info);
152 void    userauth_finish(Authctxt *authctxt, int authenticated, char *method);
153 int     auth_root_allowed(char *method);
154
155 int     auth2_challenge(Authctxt *authctxt, char *devs);
156
157 int     allowed_user(struct passwd * pw);
158
159 char    *get_challenge(Authctxt *authctxt);
160 int     verify_response(Authctxt *authctxt, const char *response);
161
162 struct passwd * auth_get_user(void);
163
164 /* expand a filename - return buffer is allocated by xmalloc */
165 char    *expand_filename(const char *template, struct passwd *pw);
166 char    *authorized_keys_file(struct passwd *pw);
167 char    *authorized_keys_file2(struct passwd *pw);
168
169 /* check a file and the path to it */
170 int
171 secure_filename(FILE *f, const char *file, uid_t u, char *err, size_t errlen);
172
173 /* helper for hostbased auth */
174 HostStatus
175 check_key_in_hostfiles(struct passwd *pw, Key *key, const char *host,
176     const char *sysfile, const char *userfile);
177
178 #define AUTH_FAIL_MAX 6
179 #define AUTH_FAIL_LOG (AUTH_FAIL_MAX/2)
180 #define AUTH_FAIL_MSG "Too many authentication failures for %.100s"
181
182 #endif
This page took 0.042839 seconds and 5 git commands to generate.