|
|
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 s
Length: 4588 (0x11ec)
Types: TextFile
Names: »syn_permit.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Chans/dirlist/syn_permit.c«
/* syn_permit.c: */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_permit.c,v 5.0 90/09/20 15:46:14 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_permit.c,v 5.0 90/09/20 15:46:14 pp Exp Locker: pp $
*
* $Log: syn_permit.c,v $
* Revision 5.0 90/09/20 15:46:14 pp
* rcsforce : 5.0 public release
*
*/
#include "dlist.h"
#include <isode/cmd_srch.h>
extern ORName * orName_cpy();
extern ORName * orName_parse();
static permit_free (ptr)
struct dl_permit * ptr;
{
if (ptr->dp_type == DP_GROUP)
dn_free (ptr->dp_dn);
else
orName_free (ptr->dp_or);
}
static struct dl_permit * permit_cpy (a)
struct dl_permit * a;
{
struct dl_permit * result;
result = (struct dl_permit *) smalloc (sizeof (struct dl_permit));
if ( (result->dp_type = a->dp_type) == DP_GROUP)
result->dp_dn = dn_cpy (a->dp_dn);
else
result->dp_or = orName_cpy (a->dp_or);
return (result);
}
static permit_cmp (a,b)
struct dl_permit * a;
struct dl_permit * b;
{
if (a->dp_type != b->dp_type)
return (a->dp_type > b->dp_type ? 1 : -1);
if (a->dp_type == DP_GROUP)
return (dn_cmp (a->dp_dn,b->dp_dn));
else
return (orName_cmp (a->dp_or,b->dp_or));
}
static permit_print (ps,p,format)
register PS ps;
struct dl_permit* p;
int format;
{
if ((format == READOUT) || (format == UFNOUT)) {
if (p->dp_type == DP_GROUP) {
ps_print (ps,"Members of the X.500 Group:\n ");
dn_print (ps,p->dp_dn,EDBOUT);
return;
}
switch (p->dp_type) {
case DP_INDIVIDUAL:
ps_print (ps,"The individual:\n ");
break;
case DP_MEMBER:
ps_print (ps,"The members of the mail list:\n ");
break;
case DP_PATTERN:
if ((p->dp_or != NULLORName) && (p->dp_or->on_or == NULLOR)) {
ps_print (ps,"Anybody");
return;
}
ps_print (ps,"Entities matching the OR pattern:\n ");
break;
}
orName_print (ps, p->dp_or,UFNOUT);
} else {
switch (p->dp_type) {
case DP_GROUP:
ps_print (ps,"GROUP#");
dn_print (ps,p->dp_dn,format);
return;
case DP_INDIVIDUAL:
ps_print (ps,"INDIVIDUAL#");
break;
case DP_MEMBER:
ps_print (ps,"MEMBER#");
break;
case DP_PATTERN:
ps_print (ps,"PATTERN#");
break;
}
orName_print (ps, p->dp_or,format);
}
}
static struct dl_permit* str2permit (str)
char * str;
{
struct dl_permit * result;
char * ptr;
static CMD_TABLE permit_table [] = {
"GROUP", DP_GROUP,
"INDIVIDUAL", DP_INDIVIDUAL,
"MEMBER", DP_MEMBER,
"PATTERN", DP_PATTERN,
0, -1,
};
if ( (ptr=index (str,'#')) == NULLCP) {
if (lexequ (str,"ALL") == 0) {
result = (struct dl_permit *) smalloc (sizeof (struct dl_permit));
result->dp_type = DP_PATTERN;
result->dp_or = (ORName *) smalloc (sizeof (ORName));
result->dp_or->on_dn = NULLDN;
result->dp_or->on_or = NULLOR;
return result;
}
parse_error ("seperator missing in permit '%s'",str);
return ((struct dl_permit *) NULL);
}
result = (struct dl_permit *) smalloc (sizeof (struct dl_permit));
*ptr-- = 0;
if (isspace (*ptr))
*ptr = 0;
ptr++,ptr++;
if ((result->dp_type = cmd_srch (str,permit_table)) == -1) {
parse_error ("unknown permit choice '%s'",str);
return ((struct dl_permit *) NULL);
}
if (result->dp_type == DP_GROUP) {
if ((result->dp_dn = str2dn(ptr)) == NULLDN)
return ((struct dl_permit *) NULL);
} else {
if ((result->dp_or = orName_parse(ptr)) == NULLORName)
return ((struct dl_permit *) NULL);
}
if (result->dp_type == DP_MEMBER) {
if (result->dp_or->on_dn == NULLDN) {
parse_error ("Must specify X.500 name for member permission",NULLCP);
return ((struct dl_permit *) NULL);
}
}
return (result);
}
static PE permit_enc (m)
struct dl_permit * m;
{
PE ret_pe;
(void) encode_MD_DLSubmitPermission (&ret_pe,0,0,NULLCP,m);
return (ret_pe);
}
static struct dl_permit * permit_dec (pe)
PE pe;
{
struct dl_permit * m;
m = (struct dl_permit *) smalloc (sizeof (struct dl_permit));
bzero ((char *)m, sizeof (struct dl_permit));
if (decode_MD_DLSubmitPermission (pe,1,NULLIP,NULLVP,m) == NOTOK) {
free ((char *)m);
return ((struct dl_permit *) NULL);
}
#if ISODE < 65
if (m->dp_type == DP_GROUP)
(void) dn_decode (m->dp_dn);
else
if (m->dp_or->on_dn != NULLDN)
(void) dn_decode (m->dp_or->on_dn);
#endif
return (m);
}
permit_syntax ()
{
(void) add_attribute_syntax ("DLSubmitPermission",
(IFP) permit_enc, (IFP) permit_dec,
(IFP) str2permit, permit_print,
(IFP) permit_cpy, permit_cmp,
permit_free, NULLCP,
NULLIFP, TRUE);
}