release dynamic memory allocated for VIDs
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 24 Apr 2009 15:01:32 +0000 (15:01 -0000)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 24 Apr 2009 15:01:32 +0000 (15:01 -0000)
src/pluto/plutomain.c
src/pluto/vendor.c
src/pluto/vendor.h

index ed7e195..34fa2f7 100644 (file)
@@ -736,6 +736,7 @@ void exit_pluto(int status)
        free_crypto();
        free_id();                  /* free myids */
        free_events();              /* free remaining events */
+       free_vendorid();                        /* free all vendor id records */
        delete_lock();
        library_deinit();
        close_log();
index febf878..f984ff2 100644 (file)
@@ -323,8 +323,7 @@ static const char _hexdig[] = "0123456789abcdef";
 
 static int _vid_struct_init = 0;
 
-void
-init_vendorid(void)
+void init_vendorid(void)
 {
        struct vid_struct *vid;
        MD5_CTX ctx;
@@ -392,9 +391,21 @@ init_vendorid(void)
        _vid_struct_init = 1;
 }
 
-static void
-handle_known_vendorid (struct msg_digest *md
-, const char *vidstr, size_t len, struct vid_struct *vid)
+void free_vendorid(void)
+{
+       struct vid_struct *vid;
+
+       for (vid = _vid_tab; vid->id; vid++)
+       {
+               if (vid->flags & (VID_STRING | VID_MD5HASH | VID_FSWAN_HASH))
+               {
+                       free(vid->vid);
+               }
+       }
+}
+
+static void handle_known_vendorid (struct msg_digest *md, const char *vidstr,
+                                                                  size_t len, struct vid_struct *vid)
 {
        char vid_dump[128];
        bool vid_useful = FALSE;
@@ -481,8 +492,7 @@ handle_known_vendorid (struct msg_digest *md
                        vid_useful ? "received" : "ignoring", vid_dump);
 }
 
-void
-handle_vendorid (struct msg_digest *md, const char *vid, size_t len)
+void handle_vendorid (struct msg_digest *md, const char *vid, size_t len)
 {
        struct vid_struct *pvid;
 
@@ -537,8 +547,7 @@ handle_vendorid (struct msg_digest *md, const char *vid, size_t len)
 /**
  * Add a vendor id payload to the msg
  */
-bool
-out_vendorid (u_int8_t np, pb_stream *outs, enum known_vendorid vid)
+bool out_vendorid (u_int8_t np, pb_stream *outs, enum known_vendorid vid)
 {
        struct vid_struct *pvid;
 
index d8fa10d..e657cb7 100644 (file)
@@ -155,6 +155,7 @@ enum known_vendorid {
 };
 
 void init_vendorid(void);
+void free_vendorid(void);
 
 struct msg_digest;
 void handle_vendorid (struct msg_digest *md, const char *vid, size_t len);