changeset 3404:a0ad82bad007

6497726 logadm -z doesn't work correctly with -A 6497739 logadm is free'ing invalid buffer
author nakanon
date Wed, 10 Jan 2007 17:28:38 -0800
parents e52013d23622
children 3fb8d8f7ae30
files usr/src/cmd/logadm/fn.c usr/src/cmd/logadm/main.c
diffstat 2 files changed, 9 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/logadm/fn.c	Wed Jan 10 17:08:29 2007 -0800
+++ b/usr/src/cmd/logadm/fn.c	Wed Jan 10 17:28:38 2007 -0800
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  *
  * logadm/fn.c -- "filename" string module
@@ -538,15 +538,18 @@
 		return (NULL);
 
 	/* oldest file is ret, remove it from list */
-	if (fnlp->fnl_first == ret)
+	if (fnlp->fnl_first == ret) {
 		fnlp->fnl_first = ret->fn_next;
-	else {
+	} else {
 		fn_list_rewind(fnlp);
-		while ((fnp = fn_list_next(fnlp)) != NULL)
+		while ((fnp = fn_list_next(fnlp)) != NULL) {
 			if (fnp->fn_next == ret) {
 				fnp->fn_next = ret->fn_next;
+				if (fnlp->fnl_last == ret)
+					fnlp->fnl_last = fnp;
 				break;
 			}
+		}
 	}
 
 	ret->fn_next = NULL;
--- a/usr/src/cmd/logadm/main.c	Wed Jan 10 17:08:29 2007 -0800
+++ b/usr/src/cmd/logadm/main.c	Wed Jan 10 17:28:38 2007 -0800
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  *
  * logadm/main.c -- main routines for logadm
@@ -391,8 +391,6 @@
 
 	/* execute any gzip commands */
 	lut_walk(Gzipnames, do_delayed_gzip, clopts);
-	lut_free(Gzipnames, free);
-	Gzipnames = NULL;
 
 	/* write out any conffile changes */
 	conf_close(clopts);
@@ -964,7 +962,7 @@
 				dorm(opts, "expire by age rule", nextfnp);
 				fn_free(nextfnp);
 			} else {
-				fn_free(nextfnp);
+				fn_list_addfn(files, nextfnp);
 				break;
 			}
 		}