|
|
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 x
Length: 2389 (0x955)
Types: TextFile
Names: »x400_validate.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Lib/parse/x400_validate.c«
/* x400_validate.c: validate an x400 address */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/parse/RCS/x400_validate.c,v 5.0 90/09/20 16:10:06 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/parse/RCS/x400_validate.c,v 5.0 90/09/20 16:10:06 pp Exp Locker: pp $
*
* $Log: x400_validate.c,v $
* Revision 5.0 90/09/20 16:10:06 pp
* rcsforce : 5.0 public release
*
*/
#include "head.h"
#include "or.h"
#include "adr.h"
extern char or_error[];
extern void err_abrt();
extern int topParse;
int x400_validate (ad, or, rp)
ADDR *ad;
OR_ptr or;
RP_Buf *rp;
{
char tbuf[LINESIZE], tmp[BUFSIZ], *old_rfc822adr = NULLCP;
char *ltablepref;
int type,
retval,
weareTopParse = FALSE;
if (or_checktypes (or, tmp) == NOTOK) {
or_free (or);
PP_LOG (LLOG_EXCEPTIONS, ("Bad OR address '%s'", tmp));
ad -> ad_parse_stat = RP_BAD;
ad -> ad_parse_message = strdup (tmp);
return RP_BAD;
}
if (or_check (&or, tbuf, &type, <ablepref) == NOTOK) {
or_free (or);
PP_DBG (("x400_validate/OR_check failed '%s'",or_error));
ad->ad_parse_stat = RP_BAD;
ad->ad_parse_message = strdup(or_error);
return RP_BAD;
}
PP_DBG (("x400_validate (tbuf=%s, type=%d)", tbuf, type));
or_free (or);
switch (type) {
case OR_ISLOCAL:
if (topParse == TRUE) {
weareTopParse = TRUE;
topParse = FALSE;
}
if (ad -> ad_r822adr != NULLCP) {
old_rfc822adr = ad -> ad_r822adr;
ad -> ad_r822adr = NULLCP;
}
retval = ad_local (tbuf, ad, rp, ltablepref);
if (ad -> ad_r822adr == NULLCP)
ad -> ad_r822adr = old_rfc822adr;
else
free(old_rfc822adr);
if (weareTopParse == TRUE) {
freeAliasList();
topParse = TRUE;
}
if (!rp_isbad(retval))
ad->ad_type = AD_X400_TYPE;
PP_DBG (("x400_validate/local x400 addr %s (%s)",
tbuf, rp_valstr(retval)));
return (ad->ad_parse_stat = retval);
case OR_ISMTA:
break;
default:
err_abrt (RP_MECH, "Illegal return from or_check '%d'",type);
}
if (ad->ad_outchan == NULLIST_RCHAN)
if (tb_getchan (tbuf, &ad->ad_outchan) != OK) {
(void) sprintf (tmp, "Unknown domain '%s'",tbuf);
ad->ad_parse_message = strdup(tmp);
return parselose (rp, ad->ad_parse_stat = RP_BAD,
"Unknown domain '%s'", tbuf);
}
ad->ad_type = AD_X400_TYPE;
return (ad->ad_parse_stat = RP_AOK);
}