/* $NetBSD: blacklist.c,v 1.5 2015/01/22 16:19:53 christos Exp $ */12/*-3* Copyright (c) 2014 The NetBSD Foundation, Inc.4* All rights reserved.5*6* This code is derived from software contributed to The NetBSD Foundation7* by Christos Zoulas.8*9* Redistribution and use in source and binary forms, with or without10* modification, are permitted provided that the following conditions11* are met:12* 1. Redistributions of source code must retain the above copyright13* notice, this list of conditions and the following disclaimer.14* 2. Redistributions in binary form must reproduce the above copyright15* notice, this list of conditions and the following disclaimer in the16* documentation and/or other materials provided with the distribution.17*18* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS19* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED20* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR21* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS22* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR23* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF24* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS25* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN26* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)27* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE28* POSSIBILITY OF SUCH DAMAGE.29*/30#ifdef HAVE_CONFIG_H31#include "config.h"32#endif3334#include <sys/cdefs.h>35__RCSID("$NetBSD: blacklist.c,v 1.5 2015/01/22 16:19:53 christos Exp $");3637#include <stdio.h>38#include <bl.h>3940#include <stdarg.h>41#include <errno.h>42#include <string.h>43#include <stdlib.h>44#include <syslog.h>4546int47blacklist_sa(int action, int rfd, const struct sockaddr *sa, socklen_t salen,48const char *msg)49{50struct blacklist *bl;51int rv;52if ((bl = blacklist_open()) == NULL)53return -1;54rv = blacklist_sa_r(bl, action, rfd, sa, salen, msg);55blacklist_close(bl);56return rv;57}5859int60blacklist_sa_r(struct blacklist *bl, int action, int rfd,61const struct sockaddr *sa, socklen_t slen, const char *msg)62{63bl_type_t internal_action;6465/* internal values are not the same as user application values */66switch (action) {67case BLACKLIST_AUTH_FAIL:68internal_action = BL_ADD;69break;70case BLACKLIST_AUTH_OK:71internal_action = BL_DELETE;72break;73case BLACKLIST_ABUSIVE_BEHAVIOR:74internal_action = BL_ABUSE;75break;76case BLACKLIST_BAD_USER:77internal_action = BL_BADUSER;78break;79default:80internal_action = BL_INVALID;81break;82}83return bl_send(bl, internal_action, rfd, sa, slen, msg);84}8586int87blacklist(int action, int rfd, const char *msg)88{89return blacklist_sa(action, rfd, NULL, 0, msg);90}9192int93blacklist_r(struct blacklist *bl, int action, int rfd, const char *msg)94{95return blacklist_sa_r(bl, action, rfd, NULL, 0, msg);96}9798struct blacklist *99blacklist_open(void) {100return bl_create(false, NULL, vsyslog);101}102103void104blacklist_close(struct blacklist *bl)105{106bl_destroy(bl);107}108109110