pepsy changes
authorJohn Kohl <jtkohl@mit.edu>
Tue, 12 Mar 1991 16:48:58 +0000 (16:48 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Tue, 12 Mar 1991 16:48:58 +0000 (16:48 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1881 dc483132-0cff-0310-8789-dd5450dbe970

src/config/Project.tmpl
src/config/site.def
src/lib/krb5/asn.1/KRB5-asn.py
src/lib/krb5/asn.1/klsrq2lsrq.c
src/lib/krb5/asn.1/kprin2prin.c
src/lib/krb5/asn.1/ktgrq2tgrq.c
src/lib/krb5/asn.1/lsrq2klsrq.c
src/lib/krb5/asn.1/prin2kprin.c
src/lib/krb5/asn.1/tgrq2ktgrq.c

index ab3ffc1b89a6f6604f926f0d5d25c77730faa1b6..dd5a03b7c4d46ee1a0245cd6eca89f7a71a9acb0 100644 (file)
 #ifndef ComErrLib
 #define ComErrLib -lcom_err
 #endif
-#ifndef PosyFlags
-#define PosyFlags -f -h2 -a -s
+#ifndef PepsyFlags
+#define PepsyFlags -f -h0 -a -s
+/* -h2 breaks pepsy, ARRGH! */
 #endif
-#ifndef PepyFlags
-#define PepyFlags -a PY_advise -P -s -r
-#endif
-#ifndef PepyCmd
-#define PepyCmd pepy
-#endif
-#ifndef PosyCmd
-#define PosyCmd posy
+#ifndef PepsyCmd
+#define PepsyCmd pepsy
 #endif
 #ifndef ArAddCmd
 #define ArAddCmd ar cruv
 #define DesDefines YouMustFigureOutYourDesDefines
 #endif
 
-#ifndef PepyPosyRules
-#define        PepyPosyRules()                                                 @@\
+#ifndef PepsyTarget
+#define        PepsyTarget(basename)                                           @@\
 .SUFFIXES:     .py                                                     @@\
-.py.c:                                                                 @@\
-       $(PEPY) $(PYFLAGS) $<
-#endif /* PepyPosyRules */
+basename/**/_tables.c: basename-asn.py                                 @@\
+       @echo '***Ignore the warning message "Warning: Can'\''t find UNIV.ph failed"' @@\
+       $(PEPSY) $(PSYFLAGS) basename-asn.py                            @@\
+basename-types.h: basename/**/_tables.c
+#endif /* PepsyTarget */
 
 #ifndef ErrorTableObjectRule
 
@@ -255,10 +252,8 @@ P_PROTOS=-UUseNarrowPrototypes
      TOP_INCLUDES = -I$(TOP)/include $(STDC_TOP_INCLUDES)
         CONFIGSRC = $(TOP)/config
             ISODE = IsodeDir
-          POFLAGS = PosyFlags
-          PYFLAGS = PepyFlags
-             PEPY = PepyCmd
-             POSY = PosyCmd
+         PSYFLAGS = PepsyFlags
+            PEPSY = PepsyCmd
             TOUCH = TouchCmd
             IMAKE = ImakeCmd
            DEPEND = DependCmd
index 3a276c1ac706fa3f9b438afeb8bcd019476b1613..14de2883742ebc216f1fccf57975377d2b693dff 100644 (file)
    library.  This might want to be -lisode if you have it installed.
    IsodeDir is put into the 'make' variable ISODE. */
 
-#define IsodeLib -L/mit/isode/isode-6.0/@sys/lib -lisode
-#define IsodeDir /mit/isode/isode-6.0
+#define IsodeLib -L/mit/isode/isode-6.8/@sys/lib -lisode
+#define IsodeDir /mit/isode/isode-6.8
 
-/* Re-define PepyCmd and PosyCmd if pepy & posy aren't in your search
-   path. */
-
-#define PepyCmd $(ISODE)/@sys/bin/pepy
-#define PosyCmd $(ISODE)/@sys/bin/posy
+/* Re-define PepsyCmd if pepsy isn't in your search path. */
 
+#define PepsyCmd $(ISODE)/@sys/bin/pepsy
 
 #define UseImakeInstalled /* -- turn on if you have imake installed */
 #define UseMakedependInstalled /* -- turn on if you have makedepend installed */
index c7d603fe7c38dd9daf1f9f93bf847f6c20a90e3f..1a7e625a4a7970aa99ff44c67617870b4b4a59e4 100644 (file)
 KRB5 DEFINITIONS ::=
 BEGIN
 
+-- needed to do the Right Thing with pepsy; this isn't a valid ASN.1
+-- token, however.
+
+SECTIONS encode decode none
+
 -- the order of stuff in this file matches the order in the draft RFC
 
 Realm ::= GeneralString
index 6b0af5c5d63a25984e30678a400a4a29756a04e5..11b5400505c1c550e1c329ee54a8f1535e43d426 100644 (file)
@@ -32,6 +32,10 @@ krb5_last_req2KRB5_LastReq(val, error)
 register krb5_last_req_entry * const *val;
 register int *error;
 {
+#if 0
+    /* this code is for -h2 style ISODE structures.  However, pepsy
+       generates horribly broken when given -h2. */
+
     register struct type_KRB5_LastReq *retval;
     register krb5_last_req_entry * const *temp;
     register int i;
@@ -65,4 +69,42 @@ register int *error;
        }
     }
     return(retval);
+#endif
+    register struct type_KRB5_LastReq *retval = 0, *rv1 = 0, *rv2;
+    register krb5_last_req_entry * const *temp;
+    register int i;
+
+    /* count elements */
+    for (i = 0, temp = val; *temp; temp++,i++, rv1 = rv2) {
+
+       rv2 = (struct type_KRB5_LastReq *) xmalloc(sizeof(*rv2));
+       if (!rv2) {
+           if (retval)
+               free_KRB5_LastReq(retval);
+           *error = ENOMEM;
+           return(0);
+       }
+       if (rv1)
+           rv1->next = rv2;
+       xbzero((char *)rv2, sizeof (*rv2));
+       if (!retval)
+           retval = rv2;
+
+       rv2->element_KRB5_4 = (struct element_KRB5_5 *)
+           xmalloc(sizeof(*(retval->element_KRB5_4)));
+       if (!rv2->element_KRB5_4) {
+       errout:
+           *error = ENOMEM;
+           if (retval)
+               free_KRB5_LastReq(retval);
+           return(0);
+       }           
+       rv2->element_KRB5_4->lr__type = val[i]->lr_type;
+       rv2->element_KRB5_4->lr__value = unix2gentime(val[i]->value,
+                                                     error);
+       if (!retval->element_KRB5_4->lr__value) {
+           goto errout;
+       }
+    }
+    return(retval);
 }
index 58044f76ac5795131abd94fbddf9712318a85841..d0a6239ff7a28e046a99c72d7114409f5132084c 100644 (file)
@@ -32,6 +32,10 @@ krb5_principal2KRB5_PrincipalName(val, error)
 krb5_const_principal val;
 register int *error;
 {
+#if 0
+    /* this code is for -h2 style ISODE structures.  However, pepsy
+       generates horribly broken when given -h2. */
+
     register int i;
     register struct type_KRB5_PrincipalName *retval;
 
@@ -58,4 +62,34 @@ register int *error;
        }
     }
     return(retval);
+
+#endif
+    register struct type_KRB5_PrincipalName *retval = 0, *rv1 = 0, *rv2;
+    register int i;
+
+    /* still skipping realm */
+    for (i = 1; val[i]; i++, rv1 = rv2) { 
+       rv2 = (struct type_KRB5_PrincipalName *) xmalloc(sizeof(*rv2));
+       if (!rv2) {
+           if (retval)
+               free_KRB5_PrincipalName(retval);
+           *error = ENOMEM;
+           return(0);
+       }
+       if (rv1)
+           rv1->next = rv2;
+       xbzero((char *)rv2, sizeof (*rv2));
+       if (!retval)
+           retval = rv2;
+
+       rv2->GeneralString = krb5_data2qbuf(val[i]);
+       if (!rv2->GeneralString) {
+           /* clean up */
+           if (retval)
+               free_KRB5_PrincipalName(retval);
+           *error = ENOMEM;
+           return(0);
+       }
+    }
+    return(retval);
 }
index b4e56ea24238da66a92e9f18505f4ecca2d7d01f..06967656cc654fcaa36fdf7ca99deeac83a10a9f 100644 (file)
@@ -81,21 +81,38 @@ register int *error;
        }
     }
     retval->nonce = val->nonce;
+#if 0
+    /* XXX !@#*)@# busted ASN.1 compiler, -h2 doesn't generate compilable
+       code */
     retval->etype = (struct element_KRB5_8 *)malloc(sizeof(*retval->etype)+
                                                    max(0,val->netypes-1)*sizeof(integer));
-    if (!retval->etype)
+    if (!retval->etype) {
+       *error = ENOMEM;
        goto errout;
-    
-#if 0
+    }    
     for (i = 0; i < val->netypes; i++) {
        retval->etype->element_KRB5_9[i] = val->etype[i];
     }
     retval->etype->nelem = val->netypes;
-#else
-    /* XXX !@#*)@# busted ASN.1 compiler */
-    retval->etype->element_KRB5_9 = val->etype[0];
-    retval->etype->nelem = 1;
 #endif
+    {
+       register struct element_KRB5_8 *rv1 = 0, *rv2;
+       register int i;
+
+       for (i = 0; i < val->netypes; i++, rv1 = rv2) {
+           rv2 = (struct element_KRB5_8 *) xmalloc(sizeof(*rv2));
+           if (!rv2) {
+               *error = ENOMEM;
+               goto errout;
+           }
+           if (rv1)
+               rv1->next = rv2;
+           xbzero((char *)rv2, sizeof (*rv2));
+           if (!retval->etype)
+               retval->etype = rv2;
+           rv2->element_KRB5_9 = val->etype[i];
+       }
+    }
  
     if (val->addresses) {
        retval->addresses =
@@ -112,6 +129,9 @@ register int *error;
            goto errout;
     }
     if (val->second_ticket) {
+#if 0
+       /* code for -h2 structures, which generate bogus code from pepsy */
+
        struct element_KRB5_10 *adtk;
        krb5_ticket * const *temp;
        register int i;
@@ -140,7 +160,43 @@ register int *error;
            }
        }
        retval->additional__tickets = adtk;
+#endif
+       register struct element_KRB5_10 *adtk = 0, *rv1 = 0, *rv2;
+       krb5_ticket * const *temp;
+       register int i;
+
+       /* count elements */
+       for (i = 0, temp = val->second_ticket; *temp; temp++,i++, rv1 = rv2) {
+
+           rv2 = (struct element_KRB5_10 *)xmalloc(sizeof(*rv2));
+           if (!rv2) {
+               *error = ENOMEM;
+               goto errout;
+           }
+           xbzero(adtk, sizeof(*adtk));
+           if (rv1)
+               rv1->next = rv2;
+           xbzero((char *)rv2, sizeof (*rv2));
+           if (!adtk)
+               adtk = rv2;
+
+           rv2->Ticket = krb5_ticket2KRB5_Ticket(val->second_ticket[i],
+                                                  error);
+           if (!rv2->Ticket) {
+               for (rv1 = adtk; rv1; rv1 = rv2) {
+                   if (rv1->Ticket)
+                       free_KRB5_Ticket(rv1->Ticket);
+                   rv2 = rv1->next;
+                   xfree(rv1);
+               }
+               goto errout;
+           }
+       }
+       retval->additional__tickets = adtk;
     } else {
+#if 0
+       /* this was once necessary to get around faulty optional processing */
+
        struct element_KRB5_10 *adtk;
        adtk = (struct element_KRB5_10 *)xmalloc(sizeof(*adtk));
        if (!adtk) {
@@ -150,6 +206,8 @@ register int *error;
        xbzero(adtk, sizeof(*adtk));
        adtk->nelem = 0;
        retval->additional__tickets = adtk;
+#endif
+       retval->additional__tickets = 0;
     }
        
     return retval;
index db0f9ad52c69273e4812da9f871c77c2b55b65d6..6f41f6a06b8ff11af7ed2ce0e41b637078a55d75 100644 (file)
@@ -32,6 +32,10 @@ KRB5_LastReq2krb5_last_req(val, error)
 const struct type_KRB5_LastReq *val;
 register int *error;
 {
+#if 0
+    /* this code is for -h2 style ISODE structures.  However, pepsy
+       generates horribly broken when given -h2. */
+
     register krb5_last_req_entry **retval;
     register int i;
 
@@ -60,4 +64,36 @@ register int *error;
     }
     retval[i] = 0;
     return(retval);
+#endif
+    register krb5_last_req_entry **retval;
+    register int i;
+    register struct type_KRB5_LastReq *rv;
+
+    for (i = 0, rv = val; rv; i++, rv = rv->next)
+       ;
+
+    /* plus one for null terminator */
+    retval = (krb5_last_req_entry **) xcalloc(i + 1, sizeof(*retval));
+    if (!retval) {
+       *error = ENOMEM;
+       return(0);
+    }
+    for (i = 0, rv = val; rv; rv = rv->next, i++) {
+       retval[i] = (krb5_last_req_entry *) xmalloc(sizeof(*retval[i]));
+       if (!retval[i]) {
+           krb5_free_last_req(retval);
+           *error = ENOMEM;
+           return(0);
+       }
+       retval[i]->value = gentime2unix(rv->element_KRB5_4->lr__value,
+                                       error);
+       if (*error) {
+           /* value is zero if error, so it won't get freed... */
+           krb5_free_last_req(retval);
+           return(0);
+       }
+       retval[i]->lr_type = rv->element_KRB5_4->lr__type;
+    }
+    retval[i] = 0;
+    return(retval);
 }
index f07966dfd46d4bb199fc6dd2d8d9e20a62d0214e..37299783e4148bc7c3b2776c996750eb358ff8e5 100644 (file)
@@ -33,6 +33,10 @@ const struct type_KRB5_PrincipalName *val;
 const struct type_KRB5_Realm *realm;
 register int *error;
 {
+#if 0
+    /* this code is for -h2 style ISODE structures.  However, pepsy
+       generates horribly broken when given -h2. */
+
     register krb5_principal retval;
     register int i;
 
@@ -58,4 +62,35 @@ register int *error;
     }
     retval[i+1] = 0;
     return(retval);
+#endif
+
+    register krb5_principal retval;
+    register int i;
+    register struct type_KRB5_PrincipalName *rv;
+
+    for (i = 1, rv = val; rv->next; i++, rv = rv->next)
+       ;
+
+    /* plus one for the realm, plus one for null term */
+    retval = (krb5_principal) xcalloc(i + 2, sizeof(krb5_data *));
+                                            
+    if (!retval) {
+       *error = ENOMEM;
+       return(0);
+    }
+
+    retval[0] = qbuf2krb5_data(realm, error);
+    if (!retval[0]) {
+       xfree(retval);
+       return(0);
+    }
+    for (i = 1, rv = val; rv; rv = rv->next, i++) {
+       retval[i] = qbuf2krb5_data(rv->GeneralString, error);
+       if (!retval[i]) {
+           krb5_free_principal(retval);
+           return(0);
+       }
+    }
+    retval[i] = 0;
+    return(retval);
 }
index 53a47c499f0fe28afce80e16a59040a694afbf3b..dee030fd55407eaea27a95ed63927fafdff9f237 100644 (file)
@@ -80,20 +80,34 @@ register int *error;
     }
     retval->nonce = val->nonce;
 
+#if 0
     retval->etype = (krb5_enctype *) xmalloc(sizeof(*(retval->etype))*min(1,val->etype->nelem));
-    if (!retval->etype)
+    if (!retval->etype) {
+       *error = ENOMEM;
        goto errout;
-#if 0
+    }
+    /* XXX @#$#@ broken ASN.1 compiler, -h2 generates unusable code,
+       but the structures would be handle like so: */
     for (i = 0; i < val->etype->nelem; i++) {
        retval->etype[i] = val->etype->element_KRB5_9[i];
     }
-    val->netypes = val->etype->nelem;
-#else
-    /* XXX @#$#@ broken ASN.1 compiler */
-    retval->etype[0] = val->etype->element_KRB5_9;
-    retval->netypes = 1;
+    retval->netypes = val->etype->nelem;
 #endif
-
+    {
+       register int i;
+       register struct element_KRB5_8 *rv;
+       for (i = 0, rv = val->etype; rv; i++, rv = rv->next)
+           ;
+       retval->netypes = i;
+       retval->etype = (krb5_enctype *) xcalloc(i+1,sizeof(*retval->etype));
+       if (!retval->etype) {
+           *error = ENOMEM;
+           goto errout;
+       }
+       for (i = 0, rv = val->etype; rv; rv = rv->next, i++)
+           retval->etype[i] = rv->element_KRB5_9;
+    }
+       
     if (val->addresses) {
        retval->addresses =
            KRB5_HostAddresses2krb5_address(val->addresses, error);
@@ -111,6 +125,9 @@ register int *error;
            goto errout;
     }
     if (val->additional__tickets) {
+#if 0
+       /* code for -h2 style, which pepsy can't do right */
+
        register krb5_ticket **aticks;
         register struct element_KRB5_10 *tptr;
        register int i;
@@ -119,6 +136,10 @@ register int *error;
        /* plus one for null terminator */
        aticks = (krb5_ticket **) xcalloc(tptr->nelem + 1,
                                          sizeof(*aticks));
+       if (!aticks) {
+           *error = ENOMEM;
+           goto errout;
+       }
        for (i = 0; (i < tptr->nelem) && tptr->Ticket[i]; i++) {
            aticks[i] = KRB5_Ticket2krb5_ticket(tptr->Ticket[i], error);
            if (!aticks[i]) {
@@ -126,6 +147,35 @@ register int *error;
                    krb5_free_ticket(aticks[i]);
                    i--;
                }
+               xfree(aticks);
+               goto errout;
+           }
+       }
+       retval->second_ticket = aticks;
+#endif
+       register krb5_ticket **aticks;
+        register struct element_KRB5_10 *tptr, *rv;
+       register int i;
+
+       tptr = val->additional__tickets;
+       for (i = 0, rv = tptr; rv; i++, rv = rv->next)
+           ;
+
+       /* plus one for null terminator */
+       aticks = (krb5_ticket **) xcalloc(i + 1, sizeof(*aticks));
+       if (!aticks) {
+           *error = ENOMEM;
+           goto errout;
+       }
+           
+       for (i = 0, rv = tptr; rv; rv = rv->next, i++) {
+           aticks[i] = KRB5_Ticket2krb5_ticket(rv->Ticket, error);
+           if (!aticks[i]) {
+               while (i >= 0) {
+                   krb5_free_ticket(aticks[i]);
+                   i--;
+               }
+               xfree(aticks);
                goto errout;
            }
        }