summaryrefslogtreecommitdiff
path: root/auth.h
diff options
context:
space:
mode:
authorAlistair Delva <adelva@google.com>2020-08-20 16:14:23 -0700
committerAlistair Delva <adelva@google.com>2020-08-20 16:53:18 -0700
commitd9da10d147d633fdb6ec65e17ff4b8447419d83e (patch)
tree8f93e8fdc2907f141e0924910bfec26669819f0b /auth.h
parent22246b08952d746a7cc5a292570636cf4277598f (diff)
parentecb2c02d994b3e21994f31a70ff911667c262f1f (diff)
Merge upstream-master into master
Commit ecb2c02d994b3e21994f31a70ff911667c262f1f upstream This nearly (but not quite) corresponds to V_8_3_P1; subsequent cherry-picks will correct this. Bug: 162492243 Change-Id: I3c079d86435b7c25aefff4538dc89a3002b1e25b
Diffstat (limited to 'auth.h')
-rw-r--r--auth.h153
1 files changed, 82 insertions, 71 deletions
diff --git a/auth.h b/auth.h
index db860376..becc672b 100644
--- a/auth.h
+++ b/auth.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth.h,v 1.82 2015/02/16 22:13:32 djm Exp $ */
+/* $OpenBSD: auth.h,v 1.100 2019/09/06 05:23:55 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -30,8 +30,6 @@
#include <signal.h>
-#include <openssl/rsa.h>
-
#ifdef HAVE_LOGIN_CAP
#include <login_cap.h>
#endif
@@ -42,8 +40,11 @@
#include <krb5.h>
#endif
+struct passwd;
struct ssh;
+struct sshbuf;
struct sshkey;
+struct sshauthopt;
typedef struct Authctxt Authctxt;
typedef struct Authmethod Authmethod;
@@ -56,19 +57,23 @@ struct Authctxt {
int valid; /* user exists and is allowed to login */
int attempt;
int failures;
- int server_caused_failure;
+ int server_caused_failure;
int force_pwchange;
char *user; /* username sent by the client */
char *service;
struct passwd *pw; /* set if 'valid' */
char *style;
+
+ /* Method lists for multiple authentication */
+ char **auth_methods; /* modified from server config */
+ u_int num_auth_methods;
+
+ /* Authentication method-specific data */
+ void *methoddata;
void *kbdintctxt;
- char *info; /* Extra info for next auth_log */
#ifdef BSD_AUTH
auth_session_t *as;
#endif
- char **auth_methods; /* modified from server config */
- u_int num_auth_methods;
#ifdef KRB5
krb5_context krb5_ctx;
krb5_ccache krb5_fwd_ccache;
@@ -76,12 +81,20 @@ struct Authctxt {
char *krb5_ticket_file;
char *krb5_ccname;
#endif
- Buffer *loginmsg;
- void *methoddata;
+ struct sshbuf *loginmsg;
+
+ /* Authentication keys already used; these will be refused henceforth */
+ struct sshkey **prev_keys;
+ u_int nprev_keys;
+
+ /* Last used key and ancillary information from active auth method */
+ struct sshkey *auth_method_key;
+ char *auth_method_info;
- struct sshkey **prev_userkeys;
- u_int nprev_userkeys;
+ /* Information exposed to session */
+ struct sshbuf *session_info; /* Auth info for environment */
};
+
/*
* Every authentication method has to handle authentication requests for
* non-existing users, or for users that are not allowed to login. In this
@@ -91,7 +104,7 @@ struct Authctxt {
struct Authmethod {
char *name;
- int (*userauth)(Authctxt *authctxt);
+ int (*userauth)(struct ssh *);
int *enabled;
};
@@ -112,29 +125,27 @@ struct KbdintDevice
void (*free_ctx)(void *ctx);
};
-int auth_rhosts(struct passwd *, const char *);
int
auth_rhosts2(struct passwd *, const char *, const char *, const char *);
-int auth_rhosts_rsa(Authctxt *, char *, Key *);
-int auth_password(Authctxt *, const char *);
-int auth_rsa(Authctxt *, BIGNUM *);
-int auth_rsa_challenge_dialog(Key *);
-BIGNUM *auth_rsa_generate_challenge(Key *);
-int auth_rsa_verify_response(Key *, BIGNUM *, u_char[]);
-int auth_rsa_key_allowed(struct passwd *, BIGNUM *, Key **);
-
-int auth_rhosts_rsa_key_allowed(struct passwd *, char *, char *, Key *);
-int hostbased_key_allowed(struct passwd *, const char *, char *, Key *);
-int user_key_allowed(struct passwd *, Key *);
-void pubkey_auth_info(Authctxt *, const Key *, const char *, ...)
- __attribute__((__format__ (printf, 3, 4)));
-void auth2_record_userkey(Authctxt *, struct sshkey *);
-int auth2_userkey_already_used(Authctxt *, struct sshkey *);
-
-struct stat;
-int auth_secure_path(const char *, struct stat *, const char *, uid_t,
- char *, size_t);
+int auth_password(struct ssh *, const char *);
+
+int hostbased_key_allowed(struct ssh *, struct passwd *,
+ const char *, char *, struct sshkey *);
+int user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
+ struct sshauthopt **);
+int auth2_key_already_used(Authctxt *, const struct sshkey *);
+
+/*
+ * Handling auth method-specific information for logging and prevention
+ * of key reuse during multiple authentication.
+ */
+void auth2_authctxt_reset_info(Authctxt *);
+void auth2_record_key(Authctxt *, int, const struct sshkey *);
+void auth2_record_info(Authctxt *authctxt, const char *, ...)
+ __attribute__((__format__ (printf, 2, 3)))
+ __attribute__((__nonnull__ (2)));
+void auth2_update_session_info(Authctxt *, const char *, const char *);
#ifdef KRB5
int auth_krb5(Authctxt *authctxt, krb5_data *auth, char **client, krb5_data *);
@@ -153,20 +164,12 @@ int auth_shadow_pwexpired(Authctxt *);
#include "audit.h"
void remove_kbdint_device(const char *);
-void disable_forwarding(void);
+void do_authentication2(struct ssh *);
-void do_authentication(Authctxt *);
-void do_authentication2(Authctxt *);
-
-void auth_info(Authctxt *authctxt, const char *, ...)
- __attribute__((__format__ (printf, 2, 3)))
- __attribute__((__nonnull__ (2)));
-void auth_log(Authctxt *, int, int, const char *, const char *);
-void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn));
-void userauth_finish(Authctxt *, int, const char *, const char *);
-int auth_root_allowed(const char *);
-
-void userauth_send_banner(const char *);
+void auth_log(struct ssh *, int, int, const char *, const char *);
+void auth_maxtries_exceeded(struct ssh *) __attribute__((noreturn));
+void userauth_finish(struct ssh *, int, const char *, const char *);
+int auth_root_allowed(struct ssh *, const char *);
char *auth2_read_banner(void);
int auth2_methods_valid(const char *, int);
@@ -176,54 +179,62 @@ int auth2_method_allowed(Authctxt *, const char *, const char *);
void privsep_challenge_enable(void);
-int auth2_challenge(Authctxt *, char *);
-void auth2_challenge_stop(Authctxt *);
+int auth2_challenge(struct ssh *, char *);
+void auth2_challenge_stop(struct ssh *);
int bsdauth_query(void *, char **, char **, u_int *, char ***, u_int **);
int bsdauth_respond(void *, u_int, char **);
-int skey_query(void *, char **, char **, u_int *, char ***, u_int **);
-int skey_respond(void *, u_int, char **);
-
-int allowed_user(struct passwd *);
-struct passwd * getpwnamallow(const char *user);
-char *get_challenge(Authctxt *);
-int verify_response(Authctxt *, const char *);
-void abandon_challenge_response(Authctxt *);
+int allowed_user(struct ssh *, struct passwd *);
+struct passwd * getpwnamallow(struct ssh *, const char *user);
char *expand_authorized_keys(const char *, struct passwd *pw);
char *authorized_principals_file(struct passwd *);
FILE *auth_openkeyfile(const char *, struct passwd *, int);
FILE *auth_openprincipals(const char *, struct passwd *, int);
-int auth_key_is_revoked(Key *);
+int auth_key_is_revoked(struct sshkey *);
+
+const char *auth_get_canonical_hostname(struct ssh *, int);
HostStatus
-check_key_in_hostfiles(struct passwd *, Key *, const char *,
+check_key_in_hostfiles(struct passwd *, struct sshkey *, const char *,
const char *, const char *);
/* hostkey handling */
-Key *get_hostkey_by_index(int);
-Key *get_hostkey_public_by_index(int, struct ssh *);
-Key *get_hostkey_public_by_type(int, int, struct ssh *);
-Key *get_hostkey_private_by_type(int, int, struct ssh *);
-int get_hostkey_index(Key *, int, struct ssh *);
-int ssh1_session_key(BIGNUM *);
-int sshd_hostkey_sign(Key *, Key *, u_char **, size_t *,
- const u_char *, size_t, u_int);
+struct sshkey *get_hostkey_by_index(int);
+struct sshkey *get_hostkey_public_by_index(int, struct ssh *);
+struct sshkey *get_hostkey_public_by_type(int, int, struct ssh *);
+struct sshkey *get_hostkey_private_by_type(int, int, struct ssh *);
+int get_hostkey_index(struct sshkey *, int, struct ssh *);
+int sshd_hostkey_sign(struct ssh *, struct sshkey *, struct sshkey *,
+ u_char **, size_t *, const u_char *, size_t, const char *);
+
+/* Key / cert options linkage to auth layer */
+const struct sshauthopt *auth_options(struct ssh *);
+int auth_activate_options(struct ssh *, struct sshauthopt *);
+void auth_restrict_session(struct ssh *);
+int auth_authorise_keyopts(struct ssh *, struct passwd *pw,
+ struct sshauthopt *, int, const char *);
+void auth_log_authopts(const char *, const struct sshauthopt *, int);
/* debug messages during authentication */
-void auth_debug_add(const char *fmt,...) __attribute__((format(printf, 1, 2)));
-void auth_debug_send(void);
+void auth_debug_add(const char *fmt,...)
+ __attribute__((format(printf, 1, 2)));
+void auth_debug_send(struct ssh *);
void auth_debug_reset(void);
struct passwd *fakepw(void);
-int sys_auth_passwd(Authctxt *, const char *);
+#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */
+#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */
+#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */
+pid_t subprocess(const char *, struct passwd *,
+ const char *, int, char **, FILE **, u_int flags);
-#define SKEY_PROMPT "\nS/Key Password: "
+int sys_auth_passwd(struct ssh *, const char *);
#if defined(KRB5) && !defined(HEIMDAL)
-#include <krb5.h>
krb5_error_code ssh_krb5_cc_gen(krb5_context, krb5_ccache *);
#endif
-#endif
+
+#endif /* AUTH_H */