/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/mandos-client.c

  • Committer: teddy at bsnet
  • Date: 2011-03-21 19:22:27 UTC
  • Revision ID: teddy@fukt.bsnet.se-20110321192227-y74ngvvcy9eq6shi
* plugins.d/mandos-client.c (good_interface): Check if the interface
                                              name starts with "."
                                              before anything else.
                                              Bug fix: Fix memory
                                              leak.

Show diffs side-by-side

added added

removed removed

Lines of Context:
741
741
    errno = EINTR;
742
742
    goto mandos_end;
743
743
  }
744
 
 
745
 
  /* Spurious warnings from -Wint-to-pointer-cast */
 
744
  
746
745
  gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t) tcp_sd);
747
746
  
748
747
  if(quit_now){
1114
1113
    }
1115
1114
    return 0;
1116
1115
  }
1117
 
  /* Reject non-ARP interfaces (including dummy interfaces) */
1118
 
  if(flags & IFF_NOARP){
1119
 
    if(debug){
1120
 
      fprintf(stderr, "Rejecting non-ARP interface \"%s\"\n",
1121
 
              if_entry->d_name);
1122
 
    }
1123
 
    return 0;
1124
 
  }
1125
1116
  /* Accept this device */
1126
1117
  if(debug){
1127
1118
    fprintf(stderr, "Interface \"%s\" is acceptable\n",
1130
1121
  return 1;
1131
1122
}
1132
1123
 
1133
 
int notdotentries(const struct dirent *direntry){
1134
 
  /* Skip "." and ".." */
1135
 
  if(direntry->d_name[0] == '.'
1136
 
     and (direntry->d_name[1] == '\0'
1137
 
          or (direntry->d_name[1] == '.'
1138
 
              and direntry->d_name[2] == '\0'))){
1139
 
    return 0;
1140
 
  }
1141
 
  return 1;
1142
 
}
1143
 
 
1144
1124
int main(int argc, char *argv[]){
1145
1125
  AvahiSServiceBrowser *sb = NULL;
1146
1126
  int error;
1577
1557
    goto end;
1578
1558
  }
1579
1559
  
 
1560
  tempdir_created = true;
1580
1561
  if(mkdtemp(tempdir) == NULL){
 
1562
    tempdir_created = false;
1581
1563
    perror("mkdtemp");
1582
1564
    goto end;
1583
1565
  }
1584
 
  tempdir_created = true;
1585
1566
  
1586
1567
  if(quit_now){
1587
1568
    goto end;
1772
1753
    }
1773
1754
  }
1774
1755
  
1775
 
  /* Removes the GPGME temp directory and all files inside */
 
1756
  /* Removes the temp directory used by GPGME */
1776
1757
  if(tempdir_created){
1777
 
    struct dirent **direntries = NULL;
1778
 
    struct dirent *direntry = NULL;
1779
 
    ret = scandir(tempdir, &direntries, notdotentries, alphasort);
1780
 
    if (ret > 0){
1781
 
      for(int i = 0; i < ret; i++){
1782
 
        direntry = direntries[i];
 
1758
    DIR *d;
 
1759
    struct dirent *direntry;
 
1760
    d = opendir(tempdir);
 
1761
    if(d == NULL){
 
1762
      if(errno != ENOENT){
 
1763
        perror("opendir");
 
1764
      }
 
1765
    } else {
 
1766
      while(true){
 
1767
        direntry = readdir(d);
 
1768
        if(direntry == NULL){
 
1769
          break;
 
1770
        }
 
1771
        /* Skip "." and ".." */
 
1772
        if(direntry->d_name[0] == '.'
 
1773
           and (direntry->d_name[1] == '\0'
 
1774
                or (direntry->d_name[1] == '.'
 
1775
                    and direntry->d_name[2] == '\0'))){
 
1776
          continue;
 
1777
        }
1783
1778
        char *fullname = NULL;
1784
1779
        ret = asprintf(&fullname, "%s/%s", tempdir,
1785
1780
                       direntry->d_name);
1794
1789
        }
1795
1790
        free(fullname);
1796
1791
      }
1797
 
    }
1798
 
 
1799
 
    /* need to be cleaned even if ret == 0 because man page dont specify */
1800
 
    free(direntries);
1801
 
    if (ret == -1){
1802
 
      perror("scandir");
 
1792
      closedir(d);
1803
1793
    }
1804
1794
    ret = rmdir(tempdir);
1805
1795
    if(ret == -1 and errno != ENOENT){