Modifying a list (head) should propagate the modified list head back.
Choose one of the following patches. I do not know with one has which impact.
I tested the first one. No more leaks on reload.
------------------------------------------------------------------------
--- src/main/files.c.orig Tue Jan 22 16:43:43 2002
+++ src/main/files.c Tue Feb 5 13:15:03 2002
@@ -69,7 +69,7 @@
* If Password or Crypt-Password is set, but there is no
* Auth-Type, add one (kludge!).
*/
-static void auth_type_fixup(VALUE_PAIR *check)
+static void auth_type_fixup(VALUE_PAIR **check)
{
VALUE_PAIR *vp;
VALUE_PAIR *c = NULL;
@@ -79,7 +79,7 @@
* See if a password is present. Return right away
* if we see Auth-Type.
*/
- for (vp = check; vp; vp = vp->next) {
+ for (vp = *check; vp; vp = vp->next) {
if (vp->attribute == PW_AUTHTYPE)
return;
if (vp->attribute == PW_PASSWORD) {
@@ -106,14 +106,10 @@
vp->lvalue = n;
vp->operator = T_OP_ADD;
-#if 0
- vp->next = c->next;
- c->next = vp;
-#endif
- vp->next = check;
- check = vp;
+ vp->next = *check;
+ *check = vp;
- for(vp = check; vp; vp = vp->next) {
+ for(vp = *check; vp; vp = vp->next) {
DEBUG2(" auth_type_fixup: %s [%d]", vp->name, vp->attribute);
}
@@ -285,7 +281,7 @@
*/
t = rad_malloc(sizeof(PAIR_LIST));
- auth_type_fixup(check_tmp);
+ auth_type_fixup(&check_tmp);
memset(t, 0, sizeof(*t));
t->name = strdup(entry);
t->check = check_tmp;
------------------------------------------------------------------------
--- src/main/files.c.orig Tue Jan 22 16:43:43 2002
+++ src/main/files.c Tue Feb 5 13:58:58 2002
@@ -106,12 +106,8 @@
vp->lvalue = n;
vp->operator = T_OP_ADD;
-#if 0
vp->next = c->next;
c->next = vp;
-#endif
- vp->next = check;
- check = vp;
for(vp = check; vp; vp = vp->next) {
DEBUG2(" auth_type_fixup: %s [%d]", vp->name, vp->attribute);
------------------------------------------------------------------------
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html