]> andersk Git - openssh.git/blobdiff - auth.h
- djm@cvs.openbsd.org 2010/01/30 02:54:53
[openssh.git] / auth.h
diff --git a/auth.h b/auth.h
index 960f1ac3bde95501ce64f3b7c7025e5009de28b1..bebfb672dec4d7ee90f741e72c4b868995cb48d8 100644 (file)
--- a/auth.h
+++ b/auth.h
@@ -1,3 +1,5 @@
+/* $OpenBSD: auth.h,v 1.63 2009/08/15 18:56:34 fgsch Exp $ */
+
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
  *
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $OpenBSD: auth.h,v 1.13 2001/03/20 18:57:04 markus Exp $
  */
+
 #ifndef AUTH_H
 #define AUTH_H
 
+#include <signal.h>
+
 #include <openssl/rsa.h>
 
 #ifdef HAVE_LOGIN_CAP
 #ifdef BSD_AUTH
 #include <bsd_auth.h>
 #endif
+#ifdef KRB5
+#include <krb5.h>
+#endif
 
 typedef struct Authctxt Authctxt;
+typedef struct Authmethod Authmethod;
+typedef struct KbdintDevice KbdintDevice;
+
 struct Authctxt {
-       int success;
-       int postponed;
-       int valid;
-       int attempt;
-       int failures;
-       char *user;
-       char *service;
-       struct passwd *pw;
-       char *style;
+       sig_atomic_t     success;
+       int              authenticated; /* authenticated and alarms cancelled */
+       int              postponed;     /* authentication needs another step */
+       int              valid;         /* user exists and is allowed to login */
+       int              attempt;
+       int              failures;
+       int              force_pwchange;
+       char            *user;          /* username sent by the client */
+       char            *service;
+       struct passwd   *pw;            /* set if 'valid' */
+       char            *style;
+       void            *kbdintctxt;
+       void            *jpake_ctx;
 #ifdef BSD_AUTH
-       auth_session_t *as;
+       auth_session_t  *as;
+#endif
+#ifdef KRB5
+       krb5_context     krb5_ctx;
+       krb5_ccache      krb5_fwd_ccache;
+       krb5_principal   krb5_user;
+       char            *krb5_ticket_file;
+       char            *krb5_ccname;
 #endif
+       Buffer          *loginmsg;
+       void            *methoddata;
 };
-
 /*
- * Tries to authenticate the user using the .rhosts file.  Returns true if
- * authentication succeeds.  If ignore_rhosts is non-zero, this will not
- * consider .rhosts and .shosts (/etc/hosts.equiv will still be used).
+ * Every authentication method has to handle authentication requests for
+ * non-existing users, or for users that are not allowed to login. In this
+ * case 'valid' is set to 0, but 'user' points to the username requested by
+ * the client.
  */
-int     auth_rhosts(struct passwd * pw, const char *client_user);
+
+struct Authmethod {
+       char    *name;
+       int     (*userauth)(Authctxt *authctxt);
+       int     *enabled;
+};
 
 /*
- * Tries to authenticate the user using the .rhosts file and the host using
- * its host key.  Returns true if authentication succeeds.
+ * Keyboard interactive device:
+ * init_ctx    returns: non NULL upon success
+ * query       returns: 0 - success, otherwise failure
+ * respond     returns: 0 - success, 1 - need further interaction,
+ *             otherwise - failure
  */
+struct KbdintDevice
+{
+       const char *name;
+       void*   (*init_ctx)(Authctxt*);
+       int     (*query)(void *ctx, char **name, char **infotxt,
+                   u_int *numprompts, char ***prompts, u_int **echo_on);
+       int     (*respond)(void *ctx, u_int numresp, char **responses);
+       void    (*free_ctx)(void *ctx);
+};
+
+int      auth_rhosts(struct passwd *, const char *);
 int
-auth_rhosts_rsa(struct passwd * pw, const char *client_user, RSA* client_host_key);
+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 *);
+
+#ifdef KRB5
+int    auth_krb5(Authctxt *authctxt, krb5_data *auth, char **client, krb5_data *);
+int    auth_krb5_tgt(Authctxt *authctxt, krb5_data *tgt);
+int    auth_krb5_password(Authctxt *authctxt, const char *password);
+void   krb5_cleanup_proc(Authctxt *authctxt);
+#endif /* KRB5 */
+
+#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE)
+#include <shadow.h>
+int auth_shadow_acctexpired(struct spwd *);
+int auth_shadow_pwexpired(Authctxt *);
+#endif
 
-/*
- * Tries to authenticate the user using password.  Returns true if
- * authentication succeeds.
- */
-int     auth_password(Authctxt *authctxt, const char *password);
+#include "auth-pam.h"
+#include "audit.h"
+void remove_kbdint_device(const char *);
 
-/*
- * Performs the RSA authentication dialog with the client.  This returns 0 if
- * the client could not be authenticated, and 1 if authentication was
- * successful.  This may exit if there is a serious protocol violation.
- */
-int     auth_rsa(struct passwd * pw, BIGNUM * client_n);
+void disable_forwarding(void);
 
-/*
- * Parses an RSA key (number of bits, e, n) from a string.  Moves the pointer
- * over the key.  Skips any whitespace at the beginning and at end.
- */
-int     auth_rsa_read_key(char **cpp, u_int *bitsp, BIGNUM * e, BIGNUM * n);
+void   do_authentication(Authctxt *);
+void   do_authentication2(Authctxt *);
 
-/*
- * Performs the RSA authentication challenge-response dialog with the client,
- * and returns true (non-zero) if the client gave the correct answer to our
- * challenge; returns zero if the client gives a wrong answer.
- */
-int     auth_rsa_challenge_dialog(RSA *pk);
+void   auth_log(Authctxt *, int, char *, char *);
+void   userauth_finish(Authctxt *, int, char *);
+void   userauth_send_banner(const char *);
+int    auth_root_allowed(char *);
 
-#ifdef KRB4
-#include <krb.h>
-/*
- * Performs Kerberos v4 mutual authentication with the client. This returns 0
- * if the client could not be authenticated, and 1 if authentication was
- * successful.  This may exit if there is a serious protocol violation.
- */
-int     auth_krb4(const char *server_user, KTEXT auth, char **client);
-int     krb4_init(uid_t uid);
-void    krb4_cleanup_proc(void *ignore);
-int    auth_krb4_password(struct passwd * pw, const char *password);
+char   *auth2_read_banner(void);
 
-#ifdef AFS
-#include <kafs.h>
+void   privsep_challenge_enable(void);
 
-/* Accept passed Kerberos v4 ticket-granting ticket and AFS tokens. */
-int     auth_kerberos_tgt(struct passwd * pw, const char *string);
-int     auth_afs_token(struct passwd * pw, const char *token_string);
-#endif                         /* AFS */
+int    auth2_challenge(Authctxt *, char *);
+void   auth2_challenge_stop(Authctxt *);
+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 **);
 
-#endif                         /* KRB4 */
+void   auth2_jpake_get_pwdata(Authctxt *, BIGNUM **, char **, char **);
+void   auth2_jpake_stop(Authctxt *);
 
-#include "auth-pam.h"
-#include "auth2-pam.h"
+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 *);
 
-void   do_authentication(void);
-void   do_authentication2(void);
+char   *authorized_keys_file(struct passwd *);
+char   *authorized_keys_file2(struct passwd *);
 
-Authctxt *authctxt_new(void);
-void   auth_log(Authctxt *authctxt, int authenticated, char *method, char *info);
-void   userauth_reply(Authctxt *authctxt, int authenticated);
-int    auth_root_allowed(char *method);
+FILE   *auth_openkeyfile(const char *, struct passwd *, int);
 
-int    auth2_challenge(Authctxt *authctxt, char *devs);
+HostStatus
+check_key_in_hostfiles(struct passwd *, Key *, const char *,
+    const char *, const char *);
 
-int    allowed_user(struct passwd * pw);
+/* hostkey handling */
+Key    *get_hostkey_by_index(int);
+Key    *get_hostkey_by_type(int);
+int     get_hostkey_index(Key *);
+int     ssh1_session_key(BIGNUM *);
 
-char   *get_challenge(Authctxt *authctxt, char *devs);
-int    verify_response(Authctxt *authctxt, char *response);
+/* debug messages during authentication */
+void    auth_debug_add(const char *fmt,...) __attribute__((format(printf, 1, 2)));
+void    auth_debug_send(void);
+void    auth_debug_reset(void);
 
-struct passwd * auth_get_user(void);
+struct passwd *fakepw(void);
+
+int     sys_auth_passwd(Authctxt *, const char *);
 
-#define AUTH_FAIL_MAX 6
-#define AUTH_FAIL_LOG (AUTH_FAIL_MAX/2)
 #define AUTH_FAIL_MSG "Too many authentication failures for %.100s"
 
+#define SKEY_PROMPT "\nS/Key Password: "
+
+#if defined(KRB5) && !defined(HEIMDAL)
+#include <krb5.h>
+krb5_error_code ssh_krb5_cc_gen(krb5_context, krb5_ccache *);
+#endif
 #endif
This page took 1.262544 seconds and 4 git commands to generate.