⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audit.c

📁 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。它用安全、加密的网络连接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。OpenSSH 支持
💻 C
字号:
/* $Id: audit.c,v 1.2 2005/02/08 10:52:48 dtucker Exp $ *//* * Copyright (c) 2004, 2005 Darren Tucker.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include "includes.h"#ifdef SSH_AUDIT_EVENTS#include "audit.h"#include "log.h"#include "auth.h"/* * Care must be taken when using this since it WILL NOT be initialized when * audit_connection_from() is called and MAY NOT be initialized when * audit_event(CONNECTION_ABANDON) is called.  Test for NULL before using. */extern Authctxt *the_authctxt;/* Maybe add the audit class to struct Authmethod? */ssh_audit_event_taudit_classify_auth(const char *method){	if (strcmp(method, "none") == 0)		return SSH_AUTH_FAIL_NONE;	else if (strcmp(method, "password") == 0)		return SSH_AUTH_FAIL_PASSWD;	else if (strcmp(method, "publickey") == 0 ||	    strcmp(method, "rsa") == 0)		return SSH_AUTH_FAIL_PUBKEY;	else if (strncmp(method, "keyboard-interactive", 20) == 0 ||	    strcmp(method, "challenge-response") == 0)		return SSH_AUTH_FAIL_KBDINT;	else if (strcmp(method, "hostbased") == 0 ||	    strcmp(method, "rhosts-rsa") == 0)		return SSH_AUTH_FAIL_HOSTBASED;	else if (strcmp(method, "gssapi-with-mic") == 0)		return SSH_AUTH_FAIL_GSSAPI;	else		return SSH_AUDIT_UNKNOWN;}/* helper to return supplied username */const char *audit_username(void){	static const char unknownuser[] = "(unknown user)";	static const char invaliduser[] = "(invalid user)";	if (the_authctxt == NULL || the_authctxt->user == NULL)		return (unknownuser);	if (!the_authctxt->valid)		return (invaliduser);	return (the_authctxt->user);}const char *audit_event_lookup(ssh_audit_event_t ev){	int i;	static struct event_lookup_struct {		ssh_audit_event_t event;		const char *name;	} event_lookup[] = {		{SSH_LOGIN_EXCEED_MAXTRIES,	"LOGIN_EXCEED_MAXTRIES"},		{SSH_LOGIN_ROOT_DENIED,		"LOGIN_ROOT_DENIED"},		{SSH_AUTH_SUCCESS,		"AUTH_SUCCESS"},		{SSH_AUTH_FAIL_NONE,		"AUTH_FAIL_NONE"},		{SSH_AUTH_FAIL_PASSWD,		"AUTH_FAIL_PASSWD"},		{SSH_AUTH_FAIL_KBDINT,		"AUTH_FAIL_KBDINT"},		{SSH_AUTH_FAIL_PUBKEY,		"AUTH_FAIL_PUBKEY"},		{SSH_AUTH_FAIL_HOSTBASED,	"AUTH_FAIL_HOSTBASED"},		{SSH_AUTH_FAIL_GSSAPI,		"AUTH_FAIL_GSSAPI"},		{SSH_INVALID_USER,		"INVALID_USER"},		{SSH_NOLOGIN,			"NOLOGIN"},		{SSH_CONNECTION_CLOSE,		"CONNECTION_CLOSE"},		{SSH_CONNECTION_ABANDON,	"CONNECTION_ABANDON"},		{SSH_AUDIT_UNKNOWN,		"AUDIT_UNKNOWN"}	};	for (i = 0; event_lookup[i].event != SSH_AUDIT_UNKNOWN; i++)		if (event_lookup[i].event == ev)			break;	return(event_lookup[i].name);}# ifndef CUSTOM_SSH_AUDIT_EVENTS/* * Null implementations of audit functions. * These get used if SSH_AUDIT_EVENTS is defined but no audit module is enabled. *//* * Called after a connection has been accepted but before any authentication * has been attempted. */voidaudit_connection_from(const char *host, int port){	debug("audit connection from %s port %d euid %d", host, port,	   (int)geteuid());}/* * Called when various events occur (see audit.h for a list of possible * events and what they mean). */voidaudit_event(ssh_audit_event_t event){	debug("audit event euid %d user %s event %d (%s)", geteuid(),	    audit_username(), event, audit_event_lookup(event));}/* * Called when a user session is started.  Argument is the tty allocated to * the session, or NULL if no tty was allocated. * * Note that this may be called multiple times if multiple sessions are used * within a single connection. */voidaudit_session_open(const char *ttyn){	const char *t = ttyn ? ttyn : "(no tty)";	debug("audit session open euid %d user %s tty name %s", geteuid(),	     audit_username(), t);}/* * Called when a user session is closed.  Argument is the tty allocated to * the session, or NULL if no tty was allocated. * * Note that this may be called multiple times if multiple sessions are used * within a single connection. */voidaudit_session_close(const char *ttyn){	const char *t = ttyn ? ttyn : "(no tty)";	debug("audit session close euid %d user %s tty name %s", geteuid(),	     audit_username(), t);}/* * This will be called when a user runs a non-interactive command.  Note that * it may be called multiple times for a single connection since SSH2 allows * multiple sessions within a single connection. */voidaudit_run_command(const char *command){	debug("audit run command euid %d user %s command '%.200s'", geteuid(),	    audit_username(), command);}# endif  /* !defined CUSTOM_SSH_AUDIT_EVENTS */#endif /* SSH_AUDIT_EVENTS */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -