11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/* $OpenBSD: hostfile.h,v 1.19 2010/11/29 23:45:51 djm Exp $ */
21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Author: Tatu Ylonen <ylo@cs.hut.fi>
51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *                    All rights reserved
71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * As far as I am concerned, the code I have written for this software
91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * can be used freely for any purpose.  Any derived versions of this
101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * software must be clearly marked as such, and if the derived work is
111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * incompatible with the protocol description in the RFC file, it must be
121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * called by a name other than "ssh" or "Secure Shell".
131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HOSTFILE_H
151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define HOSTFILE_H
161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtypedef enum {
181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	HOST_OK, HOST_NEW, HOST_CHANGED, HOST_REVOKED, HOST_FOUND
191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}       HostStatus;
201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtypedef enum {
221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	MRK_ERROR, MRK_NONE, MRK_REVOKE, MRK_CA
231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood}	HostkeyMarker;
241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct hostkey_entry {
261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	char *host;
271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	char *file;
281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	u_long line;
291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	Key *key;
301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	HostkeyMarker marker;
311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood};
321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct hostkeys;
331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct hostkeys *init_hostkeys(void);
351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodvoid	 load_hostkeys(struct hostkeys *, const char *, const char *);
361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodvoid	 free_hostkeys(struct hostkeys *);
371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
381305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodHostStatus check_key_in_hostkeys(struct hostkeys *, Key *,
391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    const struct hostkey_entry **);
401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint	 lookup_key_in_hostkeys_by_type(struct hostkeys *, int,
411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    const struct hostkey_entry **);
421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint	 hostfile_read_key(char **, u_int *, Key *);
441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint	 add_host_to_hostfile(const char *, const char *, const Key *, int);
451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define HASH_MAGIC	"|1|"
471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define HASH_DELIM	'|'
481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define CA_MARKER	"@cert-authority"
501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define REVOKE_MARKER	"@revoked"
511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodchar	*host_hash(const char *, const char *, u_int);
531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
55