Annotation of src/usr.bin/ssh/auth.h, Revision 1.20
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.20 ! itojun 24: * $OpenBSD: auth.h,v 1.19 2001/06/25 17:54:49 provos 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: */
1.20 ! itojun 82: int auth_rhosts(struct passwd *, const char *);
1.15 markus 83:
84: /* extended interface similar to auth_rhosts() */
85: int
1.20 ! itojun 86: auth_rhosts2(struct passwd *, const char *, const char *, const char *);
1.10 markus 87:
88: /*
89: * Tries to authenticate the user using the .rhosts file and the host using
90: * its host key. Returns true if authentication succeeds.
91: */
92: int
1.20 ! itojun 93: auth_rhosts_rsa(struct passwd *, const char *, RSA *);
1.10 markus 94:
95: /*
96: * Tries to authenticate the user using password. Returns true if
97: * authentication succeeds.
98: */
1.20 ! itojun 99: int auth_password(Authctxt *, const char *);
1.10 markus 100:
101: /*
102: * Performs the RSA authentication dialog with the client. This returns 0 if
103: * the client could not be authenticated, and 1 if authentication was
104: * successful. This may exit if there is a serious protocol violation.
105: */
1.20 ! itojun 106: int auth_rsa(struct passwd *, BIGNUM *);
1.10 markus 107:
108: /*
109: * Parses an RSA key (number of bits, e, n) from a string. Moves the pointer
110: * over the key. Skips any whitespace at the beginning and at end.
111: */
1.20 ! itojun 112: int auth_rsa_read_key(char **, u_int *, BIGNUM *, BIGNUM *);
1.10 markus 113:
114: /*
115: * Performs the RSA authentication challenge-response dialog with the client,
116: * and returns true (non-zero) if the client gave the correct answer to our
117: * challenge; returns zero if the client gives a wrong answer.
118: */
1.20 ! itojun 119: int auth_rsa_challenge_dialog(RSA *);
1.10 markus 120:
121: #ifdef KRB4
122: #include <krb.h>
123: /*
124: * Performs Kerberos v4 mutual authentication with the client. This returns 0
125: * if the client could not be authenticated, and 1 if authentication was
126: * successful. This may exit if there is a serious protocol violation.
127: */
1.20 ! itojun 128: int auth_krb4(const char *, KTEXT, char **);
! 129: int krb4_init(uid_t);
! 130: void krb4_cleanup_proc(void *);
! 131: int auth_krb4_password(struct passwd *, const char *);
1.10 markus 132:
133: #ifdef AFS
134: #include <kafs.h>
135:
136: /* Accept passed Kerberos v4 ticket-granting ticket and AFS tokens. */
1.20 ! itojun 137: int auth_kerberos_tgt(struct passwd *, const char *);
! 138: int auth_afs_token(struct passwd *, const char *);
1.10 markus 139: #endif /* AFS */
140:
141: #endif /* KRB4 */
1.6 markus 142:
1.1 markus 143: void do_authentication(void);
1.2 markus 144: void do_authentication2(void);
145:
1.9 markus 146: Authctxt *authctxt_new(void);
1.20 ! itojun 147: void auth_log(Authctxt *, int, char *, char *);
! 148: void userauth_finish(Authctxt *, int, char *);
! 149: int auth_root_allowed(char *);
1.6 markus 150:
1.20 ! itojun 151: int auth2_challenge(Authctxt *, char *);
1.1 markus 152:
1.20 ! itojun 153: int allowed_user(struct passwd *);
1.9 markus 154:
1.20 ! itojun 155: char *get_challenge(Authctxt *);
! 156: int verify_response(Authctxt *, const char *);
1.9 markus 157:
1.6 markus 158: struct passwd * auth_get_user(void);
1.17 markus 159:
160: /* expand a filename - return buffer is allocated by xmalloc */
1.20 ! itojun 161: char *expand_filename(const char *, struct passwd *);
! 162: char *authorized_keys_file(struct passwd *);
! 163: char *authorized_keys_file2(struct passwd *);
1.17 markus 164:
165: /* check a file and the path to it */
166: int
1.20 ! itojun 167: secure_filename(FILE *, const char *, struct passwd *, char *, size_t);
1.18 markus 168:
169: /* helper for hostbased auth */
170: HostStatus
1.20 ! itojun 171: check_key_in_hostfiles(struct passwd *, Key *, const char *,
! 172: const char *, const char *);
1.3 markus 173:
174: #define AUTH_FAIL_MAX 6
175: #define AUTH_FAIL_LOG (AUTH_FAIL_MAX/2)
176: #define AUTH_FAIL_MSG "Too many authentication failures for %.100s"
177:
1.1 markus 178: #endif