]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/plugins/radius/radiusclient/lib/avpair.c
add rc_avpair_copy() and use it when sending user-specified av's. This
[ppp.git] / pppd / plugins / radius / radiusclient / lib / avpair.c
index 7db2249c4b352f5753d4a3f1a3d8fb1c42114ef4..5f0644bb37ca6bea2a14fc15381ed80165d0ecee 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: avpair.c,v 1.2 2002/10/01 08:35:21 fcusack Exp $
+ * $Id: avpair.c,v 1.3 2002/11/13 18:19:26 fcusack Exp $
  *
  * Copyright (C) 1995 Lars Fenneberg
  *
@@ -361,6 +361,34 @@ VALUE_PAIR *rc_avpair_get (VALUE_PAIR *vp, UINT4 attr)
        return (vp);
 }
 
+/*
+ * Function: rc_avpair_copy
+ *
+ * Purpose: Return a copy of the existing list "p" ala strdup().
+ *
+ */
+VALUE_PAIR *rc_avpair_copy(VALUE_PAIR *p)
+{
+       VALUE_PAIR *vp, *fp = NULL, *lp = NULL;
+
+       while (p) {
+               vp = malloc(sizeof(VALUE_PAIR));
+               if (!vp) {
+                   rc_log(LOG_CRIT, "rc_avpair_copy: out of memory");
+                   return NULL; /* leaks a little but so what */
+               }
+               *vp = *p;
+               if (!fp)
+                       fp = vp;
+               if (lp)
+                       lp->next = vp;
+               lp = vp;
+               p = p->next;
+       }
+
+       return fp;
+}
+
 /*
  * Function: rc_avpair_insert
  *
@@ -382,6 +410,9 @@ void rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b)
                return;
        }
 
+       if (!b)
+               return;
+
        vp = *a;
 
        if ( p == (VALUE_PAIR *) NULL) /* run to end of "a" list */