Fix memory leaks in this function. The krb5_donot_replay structure
authorTheodore Tso <tytso@mit.edu>
Wed, 3 May 1995 02:31:31 +0000 (02:31 +0000)
committerTheodore Tso <tytso@mit.edu>
Wed, 3 May 1995 02:31:31 +0000 (02:31 +0000)
was not being freed properly.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5694 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/rcache/ChangeLog
src/lib/krb5/rcache/rc_dfl.c

index b55c33e99b35167ff6e269c0551c9f1a62385596..30e6ffa1e38942f1f4170dc6fce8c9527dae4085 100644 (file)
@@ -1,3 +1,9 @@
+Mon May  1 23:10:26 1995  Theodore Y. Ts'o  (tytso@dcl)
+
+       * rc_dfl.c (krb5_rc_dfl_recover): Fix memory leaks in this
+               function.  The krb5_donot_replay structure was not being
+               freed properly.
+
 Thu Apr 13 15:49:16 1995 Keith Vetter (keithv@fusion.com)
 
        * *.[ch]: removed unneeded INTERFACE from non-api functions.
index 120eaa515c71ace353d9d4e85b2ace5d6cfb34b1..32999245b4e94ef789ae6aea9fc68dda39be1308 100644 (file)
@@ -401,21 +401,20 @@ krb5_rcache id;
        goto io_fail;
     }
 
+    if (!(rep = (krb5_donot_replay *) malloc(sizeof(krb5_donot_replay)))) {
+       retval = KRB5_RC_MALLOC;
+       goto io_fail;
+    }
+    rep->client = NULL;
+    rep->server = NULL;
+
     /* now read in each auth_replay and insert into table */
     for (;;) {
-       rep = NULL;
        if (krb5_rc_io_mark(context, &t->d)) {
            retval = KRB5_RC_IO;
            goto io_fail;
        }
        
-       if (!(rep = (krb5_donot_replay *) malloc(sizeof(krb5_donot_replay)))) {
-           retval = KRB5_RC_MALLOC;
-           goto io_fail;
-       }
-       rep->client = NULL;
-       rep->server = NULL;
-       
        retval = krb5_rc_io_fetch (context, t, rep, (int) max_size);
 
        if (retval == KRB5_RC_IO_EOF)
@@ -424,22 +423,18 @@ krb5_rcache id;
            goto io_fail;
 
        
-       if (alive(context, rep,t->lifespan) == CMP_EXPIRED) {
-           krb5_rc_free_entry(context, &rep);
-           continue;
+       if (alive(context, rep,t->lifespan) != CMP_EXPIRED) {
+           if (store(context, id, rep) == CMP_MALLOC) {
+               retval = KRB5_RC_MALLOC; goto io_fail;
+           } 
        }
-
-       if (store(context, id,rep) == CMP_MALLOC) {/* can't be a replay */
-           retval = KRB5_RC_MALLOC; goto io_fail;
-       } 
        /*
-        *  store() copies the server & client fields to make sure
-        *  they don't get stomped on by other callers, so we need to
-        *  free them
+        *  free fields allocated by rc_io_fetch
         */
        FREE(rep->server);
        FREE(rep->client);
-       rep = NULL;
+       rep->server = 0;
+       rep->client = 0;
     }
     retval = 0;
     krb5_rc_io_unmark(context, &t->d);