]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
Fix possible doubleclose of sockfd.
authorMartin Josefsson <gandalf@wlug.westbo.se>
Fri, 13 Jun 2003 16:56:51 +0000 (16:56 +0000)
committerMartin Josefsson <gandalf@wlug.westbo.se>
Fri, 13 Jun 2003 16:56:51 +0000 (16:56 +0000)
This shouldn't break anything, things were already broken.

libiptc/libiptc.c

index fa735637b80220b50e34bd04956243aa07566dc0..0dad6f48348be42cd06165daf4471e7be58e090e 100644 (file)
@@ -1,4 +1,4 @@
-/* Library which manipulates firewall rules.  Version $Revision: 1.36 $ */
+/* Library which manipulates firewall rules.  Version $Revision: 1.37 $ */
 
 /* Architecture of firewall rules is as follows:
  *
@@ -234,8 +234,10 @@ TC_INIT(const char *tablename)
 
        iptc_fn = TC_INIT;
 
-       if (sockfd != -1)
+       if (sockfd != -1) {
                close(sockfd);
+               sockfd = -1;
+       }
 
        if (strlen(tablename) >= TABLE_MAXNAMELEN) {
                errno = EINVAL;
@@ -255,6 +257,7 @@ TC_INIT(const char *tablename)
        if ((h = alloc_handle(info.name, info.size, info.num_entries))
            == NULL) {
                close(sockfd);
+               sockfd = -1;
                return NULL;
        }
 
@@ -289,6 +292,7 @@ TC_INIT(const char *tablename)
        if (getsockopt(sockfd, TC_IPPROTO, SO_GET_ENTRIES, &h->entries,
                       &tmp) < 0) {
                close(sockfd);
+               sockfd = -1;
                free(h);
                return NULL;
        }
@@ -301,6 +305,7 @@ void
 TC_FREE(TC_HANDLE_T *h)
 {
        close(sockfd);
+       sockfd = -1;
        if ((*h)->cache_chain_heads)
                free((*h)->cache_chain_heads);
        free(*h);