|
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); }