1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3145510Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8255332Scy * $Id$
9145510Sdarrenr */
10145510Sdarrenr
11145510Sdarrenr#include <stdio.h>
12145510Sdarrenr#include <string.h>
13145510Sdarrenr#include <limits.h>
14145510Sdarrenr#include <sys/types.h>
15145510Sdarrenr#if !defined(__SVR4) && !defined(__svr4__)
16145510Sdarrenr#include <strings.h>
17145510Sdarrenr#endif
18145510Sdarrenr#include <stdlib.h>
19145510Sdarrenr#include <unistd.h>
20145510Sdarrenr#include <stddef.h>
21145510Sdarrenr#include <syslog.h>
22145510Sdarrenr#include "facpri.h"
23145510Sdarrenr
24145510Sdarrenr#if !defined(lint)
25255332Scystatic const char rcsid[] = "@(#)$Id$";
26145510Sdarrenr#endif
27145510Sdarrenr
28145510Sdarrenr
29145510Sdarrenrtypedef	struct	table	{
30145510Sdarrenr	char	*name;
31145510Sdarrenr	int	value;
32145510Sdarrenr} table_t;
33145510Sdarrenr
34145510Sdarrenrtable_t	facs[] = {
35145510Sdarrenr	{ "kern", LOG_KERN },	{ "user", LOG_USER },
36145510Sdarrenr	{ "mail", LOG_MAIL },	{ "daemon", LOG_DAEMON },
37145510Sdarrenr	{ "auth", LOG_AUTH },	{ "syslog", LOG_SYSLOG },
38145510Sdarrenr	{ "lpr", LOG_LPR },	{ "news", LOG_NEWS },
39145510Sdarrenr	{ "uucp", LOG_UUCP },
40145510Sdarrenr#if LOG_CRON == LOG_CRON2
41145510Sdarrenr	{ "cron2", LOG_CRON1 },
42145510Sdarrenr#else
43145510Sdarrenr	{ "cron", LOG_CRON1 },
44145510Sdarrenr#endif
45153881Sguido#ifdef LOG_FTP
46145510Sdarrenr	{ "ftp", LOG_FTP },
47145510Sdarrenr#endif
48153881Sguido#ifdef LOG_AUTHPRIV
49145510Sdarrenr	{ "authpriv", LOG_AUTHPRIV },
50145510Sdarrenr#endif
51145510Sdarrenr#ifdef	LOG_AUDIT
52145510Sdarrenr	{ "audit", LOG_AUDIT },
53145510Sdarrenr#endif
54145510Sdarrenr#ifdef	LOG_LFMT
55145510Sdarrenr	{ "logalert", LOG_LFMT },
56145510Sdarrenr#endif
57145510Sdarrenr#if LOG_CRON == LOG_CRON1
58145510Sdarrenr	{ "cron", LOG_CRON2 },
59145510Sdarrenr#else
60145510Sdarrenr	{ "cron2", LOG_CRON2 },
61145510Sdarrenr#endif
62145510Sdarrenr#ifdef	LOG_SECURITY
63145510Sdarrenr	{ "security", LOG_SECURITY },
64145510Sdarrenr#endif
65145510Sdarrenr	{ "local0", LOG_LOCAL0 },	{ "local1", LOG_LOCAL1 },
66145510Sdarrenr	{ "local2", LOG_LOCAL2 },	{ "local3", LOG_LOCAL3 },
67145510Sdarrenr	{ "local4", LOG_LOCAL4 },	{ "local5", LOG_LOCAL5 },
68145510Sdarrenr	{ "local6", LOG_LOCAL6 },	{ "local7", LOG_LOCAL7 },
69145510Sdarrenr	{ NULL, 0 }
70145510Sdarrenr};
71145510Sdarrenr
72145510Sdarrenr
73145510Sdarrenr/*
74145510Sdarrenr * map a facility number to its name
75145510Sdarrenr */
76145510Sdarrenrchar *
77145510Sdarrenrfac_toname(facpri)
78145510Sdarrenr	int facpri;
79145510Sdarrenr{
80145510Sdarrenr	int	i, j, fac;
81145510Sdarrenr
82145510Sdarrenr	fac = facpri & LOG_FACMASK;
83145510Sdarrenr	j = fac >> 3;
84161357Sguido	if (j < (sizeof(facs)/sizeof(facs[0]))) {
85145510Sdarrenr		if (facs[j].value == fac)
86145510Sdarrenr			return facs[j].name;
87145510Sdarrenr	}
88161357Sguido	for (i = 0; facs[i].name; i++)
89161357Sguido		if (fac == facs[i].value)
90161357Sguido			return facs[i].name;
91145510Sdarrenr
92145510Sdarrenr	return NULL;
93145510Sdarrenr}
94145510Sdarrenr
95145510Sdarrenr
96145510Sdarrenr/*
97145510Sdarrenr * map a facility name to its number
98145510Sdarrenr */
99255332Scyint
100145510Sdarrenrfac_findname(name)
101145510Sdarrenr	char *name;
102145510Sdarrenr{
103161357Sguido	int     i;
104145510Sdarrenr
105145510Sdarrenr	for (i = 0; facs[i].name; i++)
106145510Sdarrenr		if (!strcmp(facs[i].name, name))
107145510Sdarrenr			return facs[i].value;
108145510Sdarrenr	return -1;
109145510Sdarrenr}
110145510Sdarrenr
111145510Sdarrenr
112145510Sdarrenrtable_t	pris[] = {
113145510Sdarrenr	{ "emerg", LOG_EMERG },		{ "alert", LOG_ALERT  },
114145510Sdarrenr	{ "crit", LOG_CRIT },		{ "err", LOG_ERR  },
115145510Sdarrenr	{ "warn", LOG_WARNING },	{ "notice", LOG_NOTICE  },
116145510Sdarrenr	{ "info", LOG_INFO },		{ "debug", LOG_DEBUG  },
117145510Sdarrenr	{ NULL, 0 }
118145510Sdarrenr};
119145510Sdarrenr
120145510Sdarrenr
121145510Sdarrenr/*
122255332Scy * map a facility name to its number
123255332Scy */
124255332Scyint
125255332Scypri_findname(name)
126255332Scy	char *name;
127255332Scy{
128255332Scy	int     i;
129255332Scy
130255332Scy	for (i = 0; pris[i].name; i++)
131255332Scy		if (!strcmp(pris[i].name, name))
132255332Scy			return pris[i].value;
133255332Scy	return -1;
134255332Scy}
135255332Scy
136255332Scy
137255332Scy/*
138145510Sdarrenr * map a priority number to its name
139145510Sdarrenr */
140145510Sdarrenrchar *
141145510Sdarrenrpri_toname(facpri)
142145510Sdarrenr	int facpri;
143145510Sdarrenr{
144145510Sdarrenr	int	i, pri;
145145510Sdarrenr
146145510Sdarrenr	pri = facpri & LOG_PRIMASK;
147145510Sdarrenr	if (pris[pri].value == pri)
148145510Sdarrenr		return pris[pri].name;
149145510Sdarrenr	for (i = 0; pris[i].name; i++)
150145510Sdarrenr		if (pri == pris[i].value)
151145510Sdarrenr			return pris[i].name;
152145510Sdarrenr	return NULL;
153145510Sdarrenr}
154