Annotation of src/usr.bin/ssh/auth.h, Revision 1.19
1.5 deraadt 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.
1.7 djm 23: *
1.19 ! provos 24: * $OpenBSD: auth.h,v 1.18 2001/06/23 00:20:58 markus Exp $
1.5 deraadt 25: */
1.1 markus 26: #ifndef AUTH_H
27: #define AUTH_H
28:
1.18 markus 29: #include "key.h"
30: #include "hostfile.h"
1.10 markus 31: #include <openssl/rsa.h>
32:
1.13 markus 33: #ifdef HAVE_LOGIN_CAP
34: #include <login_cap.h>
35: #endif
36: #ifdef BSD_AUTH
37: #include <bsd_auth.h>
38: #endif
39:
1.6 markus 40: typedef struct Authctxt Authctxt;
1.16 markus 41: typedef struct KbdintDevice KbdintDevice;
42:
1.6 markus 43: struct Authctxt {
44: int success;
1.9 markus 45: int postponed;
1.6 markus 46: int valid;
47: int attempt;
1.8 markus 48: int failures;
1.6 markus 49: char *user;
50: char *service;
51: struct passwd *pw;
1.9 markus 52: char *style;
1.16 markus 53: void *kbdintctxt;
1.13 markus 54: #ifdef BSD_AUTH
55: auth_session_t *as;
56: #endif
1.6 markus 57: };
1.10 markus 58:
59: /*
1.16 markus 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: /*
1.10 markus 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);
1.15 markus 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);
1.10 markus 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: */
1.13 markus 100: int auth_password(Authctxt *authctxt, const char *password);
1.10 markus 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 */
1.6 markus 143:
1.1 markus 144: void do_authentication(void);
1.2 markus 145: void do_authentication2(void);
146:
1.9 markus 147: Authctxt *authctxt_new(void);
148: void auth_log(Authctxt *authctxt, int authenticated, char *method, char *info);
1.14 markus 149: void userauth_finish(Authctxt *authctxt, int authenticated, char *method);
1.11 markus 150: int auth_root_allowed(char *method);
1.6 markus 151:
1.9 markus 152: int auth2_challenge(Authctxt *authctxt, char *devs);
1.1 markus 153:
1.6 markus 154: int allowed_user(struct passwd * pw);
1.9 markus 155:
1.16 markus 156: char *get_challenge(Authctxt *authctxt);
157: int verify_response(Authctxt *authctxt, const char *response);
1.9 markus 158:
1.6 markus 159: struct passwd * auth_get_user(void);
1.17 markus 160:
161: /* expand a filename - return buffer is allocated by xmalloc */
162: char *expand_filename(const char *template, struct passwd *pw);
163: char *authorized_keys_file(struct passwd *pw);
164: char *authorized_keys_file2(struct passwd *pw);
165:
166: /* check a file and the path to it */
167: int
1.19 ! provos 168: secure_filename(FILE *f, const char *file, struct passwd *pw,
! 169: char *err, size_t errlen);
1.18 markus 170:
171: /* helper for hostbased auth */
172: HostStatus
173: check_key_in_hostfiles(struct passwd *pw, Key *key, const char *host,
174: const char *sysfile, const char *userfile);
1.3 markus 175:
176: #define AUTH_FAIL_MAX 6
177: #define AUTH_FAIL_LOG (AUTH_FAIL_MAX/2)
178: #define AUTH_FAIL_MSG "Too many authentication failures for %.100s"
179:
1.1 markus 180: #endif