Port notice stuff over from authd-framework-2 and use it.
This allows things like oper warnings from authd using the W message type also.
This commit is contained in:
parent
58c343f4a8
commit
0a659bf0ab
5 changed files with 121 additions and 2 deletions
|
@ -3,5 +3,5 @@ AM_CFLAGS=$(WARNFLAGS)
|
||||||
AM_CPPFLAGS = -I../include -I../librb/include
|
AM_CPPFLAGS = -I../include -I../librb/include
|
||||||
|
|
||||||
|
|
||||||
authd_SOURCES = authd.c res.c reslib.c reslist.c getnameinfo.c getaddrinfo.c dns.c
|
authd_SOURCES = authd.c res.c reslib.c reslist.c getnameinfo.c getaddrinfo.c dns.c notice.c
|
||||||
authd_LDADD = ../librb/src/librb.la
|
authd_LDADD = ../librb/src/librb.la
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "authd.h"
|
#include "authd.h"
|
||||||
#include "dns.h"
|
#include "dns.h"
|
||||||
|
#include "notice.h"
|
||||||
|
|
||||||
#define MAXPARA 10
|
#define MAXPARA 10
|
||||||
|
|
||||||
|
@ -47,8 +48,10 @@ handle_stat(int parc, char *parv[])
|
||||||
authd_stat_handler handler;
|
authd_stat_handler handler;
|
||||||
|
|
||||||
if(parc < 3)
|
if(parc < 3)
|
||||||
/* XXX Should log this somehow */
|
{
|
||||||
|
warn_opers(L_CRIT, "BUG: handle_stat received too few parameters (at least 3 expected, got %d)", parc);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(handler = authd_stat_handlers[(unsigned char)parv[2][0]]))
|
if (!(handler = authd_stat_handlers[(unsigned char)parv[2][0]]))
|
||||||
return;
|
return;
|
||||||
|
|
48
authd/notice.c
Normal file
48
authd/notice.c
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* authd/notice.c - send notices back to the ircd and to clients
|
||||||
|
* Copyright (c) 2016 Elizabeth Myers <elizabeth@interlinked.me>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* 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 "authd.h"
|
||||||
|
#include "notice.h"
|
||||||
|
|
||||||
|
/* Send a notice to a client */
|
||||||
|
void notice_client(uint32_t cid, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char buf[BUFSIZE];
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
vsnprintf(buf, sizeof(buf), fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
rb_helper_write(authd_helper, "N %x :%s", cid, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send a warning to the IRC daemon for logging, etc. */
|
||||||
|
void warn_opers(notice_level_t level, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char buf[BUFSIZE];
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
vsnprintf(buf, sizeof(buf), fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
rb_helper_write(authd_helper, "W %c :%s", level, buf);
|
||||||
|
}
|
35
authd/notice.h
Normal file
35
authd/notice.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/* authd/notice.h - send notices back to the ircd and to clients
|
||||||
|
* Copyright (c) 2016 Elizabeth Myers <elizabeth@interlinked.me>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice is present in all copies.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CHARYBDIS_AUTHD_NOTICE_H__
|
||||||
|
#define __CHARYBDIS_AUTHD_NOTICE_H__
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
L_DEBUG = 'D',
|
||||||
|
L_INFO = 'I',
|
||||||
|
L_WARN = 'W',
|
||||||
|
L_CRIT ='C',
|
||||||
|
} notice_level_t;
|
||||||
|
|
||||||
|
void notice_client(uint32_t cid, const char *fmt, ...);
|
||||||
|
void warn_opers(notice_level_t level, const char *fmt, ...);
|
||||||
|
|
||||||
|
#endif /* __CHARYBDIS_AUTHD_NOTICE_H__ */
|
33
ircd/authd.c
33
ircd/authd.c
|
@ -114,6 +114,39 @@ parse_authd_reply(rb_helper * helper)
|
||||||
}
|
}
|
||||||
dns_results_callback(parv[1], parv[2], parv[3], parv[4]);
|
dns_results_callback(parv[1], parv[2], parv[3], parv[4]);
|
||||||
break;
|
break;
|
||||||
|
case 'W':
|
||||||
|
if(parc != 3)
|
||||||
|
{
|
||||||
|
ilog(L_MAIN, "authd sent a result with wrong number of arguments: got %d", parc);
|
||||||
|
restart_authd();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(*parv[2])
|
||||||
|
{
|
||||||
|
case 'D':
|
||||||
|
sendto_realops_snomask(SNO_DEBUG, L_ALL, "authd debug: %s", parv[3]);
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
sendto_realops_snomask(SNO_GENERAL, L_ALL, "authd info: %s", parv[3]);
|
||||||
|
inotice("authd info: %s", parv[3]);
|
||||||
|
break;
|
||||||
|
case 'W':
|
||||||
|
sendto_realops_snomask(SNO_GENERAL, L_ALL, "authd WARNING: %s", parv[3]);
|
||||||
|
iwarn("authd warning: %s", parv[3]);
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
sendto_realops_snomask(SNO_GENERAL, L_ALL, "authd CRITICAL: %s", parv[3]);
|
||||||
|
ierror("authd critical: %s", parv[3]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sendto_realops_snomask(SNO_GENERAL, L_ALL, "authd sent us an unknown oper notice type (%s): %s", parv[2], parv[3]);
|
||||||
|
ilog(L_MAIN, "authd unknown oper notice type (%s): %s", parv[2], parv[3]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NOTREACHED */
|
||||||
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
case 'Y':
|
case 'Y':
|
||||||
case 'Z':
|
case 'Z':
|
||||||
|
|
Loading…
Reference in a new issue