|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 6314 (0x18aa)
Types: TextFile
Names: »auth_logs.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Src/submit/auth_logs.c«
/* auth_logs.c: Prints out the authorisation logging info */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Src/submit/RCS/auth_logs.c,v 5.0 90/09/20 16:22:36 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Src/submit/RCS/auth_logs.c,v 5.0 90/09/20 16:22:36 pp Exp Locker: pp $
*
* $Log: auth_logs.c,v $
* Revision 5.0 90/09/20 16:22:36 pp
* rcsforce : 5.0 public release
*
*/
#include "util.h"
#include "q.h"
#include <isode/cmd_srch.h>
#define gval(x) ((x -> ad_type) == AD_X400_TYPE ? \
(x -> ad_r400adr) : (x -> ad_r822adr))
/* -- externals -- */
extern CMD_TABLE authtbl_statmsgs[];
extern CHAN *ch_inbound;
extern ADDR *ad_originator;
extern ADDR *ad_recip;
extern char *msg_unique;
extern char *mgt_inhost;
extern int auth_loglev;
extern long msg_size;
/* -- local routines -- */
void auth_log();
static int auth_isdr();
static int auth_isgood();
static void gen_auth_logs();
static void gen_auth_notok();
static void gen_auth_ok();
static void gen_auth_stats();
static void gen_auth_warn();
static void wr2statfile();
static void wrdr2statfile();
static void wrmsg2statfile();
/* ------------------- Begin Routines ------------------------------------ */
void auth_log()
{
ADDR *ad;
PP_TRACE (("auth_log()"));
for (ad = ad_recip; ad; ad = ad->ad_next)
gen_auth_logs (ad);
}
/* ----------------------------- Logging ------------------------------------ */
static void gen_auth_logs (ad)
ADDR *ad;
{
LIST_RCHAN *lp;
int retval = NOTOK;
PP_TRACE (("gen_auth_logs(%s)", gval(ad)));
for (lp = ad -> ad_outchan; lp != NULLIST_RCHAN; lp = lp -> li_next)
if ((retval = auth_isgood (lp)) == OK)
break;
gen_auth_stats (ad, retval);
gen_auth_warn (ad, retval);
}
static void gen_auth_stats (ad, result)
ADDR *ad;
int result;
{
PP_TRACE (("gen_auth_stats '%d' '%s'", result, gval (ad)));
switch (result) {
case OK:
gen_auth_ok (ad);
break;
default:
gen_auth_notok (ad);
break;
}
}
static void gen_auth_ok (ad)
ADDR *ad;
{
LIST_RCHAN *lp = ad -> ad_outchan;
PP_TRACE (("gen_auth_ok '%s'", gval (ad)));
switch (auth_loglev) {
default:
case AUTH_LOGLEVEL_LOW:
case AUTH_LOGLEVEL_MEDIUM:
for (; lp != NULLIST_RCHAN; lp = lp -> li_next)
if (auth_isgood (lp) == OK) {
wr2statfile (ad, lp);
break;
}
return;
case AUTH_LOGLEVEL_HIGH:
for (; lp != NULLIST_RCHAN; lp = lp -> li_next)
wr2statfile (ad, lp);
return;
}
}
static void gen_auth_notok (ad)
ADDR *ad;
{
LIST_RCHAN *lp = ad -> ad_outchan;
PP_TRACE (("gen_auth_notok '%s'", gval (ad)));
switch (auth_loglev) {
default:
case AUTH_LOGLEVEL_LOW:
if (lp != NULLIST_RCHAN)
wr2statfile (ad, lp);
return;
case AUTH_LOGLEVEL_MEDIUM:
case AUTH_LOGLEVEL_HIGH:
for (; lp != NULLIST_RCHAN; lp = lp -> li_next)
wr2statfile (ad, lp);
return;
}
}
static int auth_isgood (lp)
LIST_RCHAN *lp;
{
if (lp == NULLIST_RCHAN)
return FALSE;
switch (lp -> li_auth -> status) {
case AUTH_OK:
case AUTH_DR_OK:
case AUTH_FAILED_TEST:
return OK;
default:
return NOTOK;
}
}
static int auth_isdr (lp)
LIST_RCHAN *lp;
{
if (lp == NULLIST_RCHAN)
return FALSE;
switch (lp -> li_auth -> status) {
case AUTH_DR_OK:
case AUTH_DR_FAILED:
return OK;
}
return NOTOK;
}
static void wr2statfile (ad, lp)
ADDR *ad;
LIST_RCHAN *lp;
{
if (auth_isdr (lp) == OK)
wrdr2statfile (ad, lp);
else
wrmsg2statfile (ad, lp);
}
static void wrmsg2statfile (ad, lp)
ADDR *ad;
LIST_RCHAN *lp;
{
char sdl, rdl; /* -- log delimiters -- */
AUTH *au = lp -> li_auth;
char *cp;
PP_TRACE (("submit/wrmsg2statfile ('%s')", au -> reason));
/* -- choose "best" delimitiers for sender and recipient -- */
if (index (gval (ad_originator), '"') == NULLCP)
sdl = '"';
else if (index (gval (ad_originator), '\'') == NULLCP)
sdl = '\'';
else
sdl = '`';
if (index (gval (ad), '"') == NULL)
rdl = '"';
else if (index (gval (ad), '\'') == NULL)
rdl = '\'';
else
rdl = '`';
cp = rcmd_srch (au -> status, authtbl_statmsgs);
if (cp == NULLCP)
cp = rcmd_srch (AUTH_FAILED, authtbl_statmsgs);
PP_STAT (("%s %s %s -> %s size=%ld sender=%c%s%c \"%s\" recip=%c%s%c \"%s\" \"%s\"",
cp,
msg_unique,
ch_inbound -> ch_name,
au -> chan -> li_chan -> ch_name,
msg_size,
sdl, gval (ad_originator), sdl,
mgt_inhost,
rdl, gval (ad), rdl,
au -> mta -> li_mta,
au -> reason
));
}
static void wrdr2statfile (ad, lp)
ADDR *ad;
LIST_RCHAN *lp;
{
char sdl; /* -- log delimiters -- */
AUTH *au = lp -> li_auth;
char *cp;
PP_TRACE (("submit/wrdr2statfile ('%s')", au -> reason));
/* -- choose "best" delimitiers for sender and recipient -- */
if (index (gval (ad_originator), '"') == NULLCP)
sdl = '"';
else if (index (gval (ad_originator), '\'') == NULLCP)
sdl = '\'';
else
sdl = '`';
cp = rcmd_srch (au -> status, authtbl_statmsgs);
if (cp == NULLCP)
cp = rcmd_srch (AUTH_DR_FAILED, authtbl_statmsgs);
PP_STAT (("%s %s %s size=%ld recip=%c%s%c \"%s\"",
cp,
msg_unique,
ch_inbound -> ch_name,
msg_size,
sdl, gval (ad_originator), sdl,
mgt_inhost
));
}
static void gen_auth_warn (ad, result)
ADDR *ad;
int result;
{
int found_s = FALSE,
found_r = FALSE;
LIST_RCHAN *lp = ad -> ad_outchan;
/* --- *** ---
Not implemented yet - instead generateis PP_OPER
log messages to indicate what would have happened
--- *** --- */
if (result == OK) return;
for (; lp != NULLIST_RCHAN; lp = lp -> li_next) {
if (lp -> li_auth -> chan -> warnsender) {
if (found_s == FALSE) {
PP_OPER (NULLCP, ("%s '%s' %s '%s'",
"Warning message to sender",
gval (ad_originator),
"(not generated) : file",
lp -> li_auth -> chan -> warnsender));
found_s = TRUE;
}
}
if (lp -> li_auth -> chan -> warnrecipient) {
if (found_r == FALSE) {
PP_OPER (NULLCP, ("%s '%s' %s '%s'",
"Warning message to recipient",
gval (ad_originator),
"(not generated) : file",
lp -> li_auth -> chan -> warnsender));
found_r = TRUE;
}
}
}
}