1ac0a1f
2006-04-22  Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
1ac0a1f
1ac0a1f
	* extra/buzzme/buzzme.c, libpcap-0.9.1-kis/fad-glifc.c,
1ac0a1f
	  libpcap-0.9.1-kis/pcap-nit.c,
1ac0a1f
	  libpcap-0.9.1-kis/pcap-snoop.c,
1ac0a1f
	  libpcap-0.9.1-kis/fad-gifc.c,
1ac0a1f
	  libpcap-0.9.1-kis/pcap-linux.c,
1ac0a1f
	  pcapsource.cc, tcpclient.cc, gpsmap_cache.cc, ifcontrol.cc:
1ac0a1f
1ac0a1f
 	  ensure, that strings copied by 'strncpy()' will be terminated
1ac0a1f
 	  by '\0'. The following replacements are used for
1ac0a1f
1ac0a1f
	  | strncpy(buf, 0, buf_len);
1ac0a1f
1ac0a1f
	  a) when 'buf[buf_len-1] == '\0' can be guaranteed (e.g. by a
1ac0a1f
	     previous memset()):
1ac0a1f
             | strncpy(buf, 0, buf_len - 1);
1ac0a1f
1ac0a1f
	  b) when 'buf[buf_len-1] == '\0' can not be guaranteed:
1ac0a1f
1ac0a1f
	     | strncpy(buf, 0, buf_len);
1ac0a1f
             | buf[buf_len-1] = '\0';
1ac0a1f
1ac0a1f
	     on first glance it seems to be more efficient to use
1ac0a1f
1ac0a1f
	     | strncpy(buf, 0, buf_len-1);
1ac0a1f
1ac0a1f
	     But most 'buf_len' are multiples of 2 or 4 allowing the
1ac0a1f
	     compiler to generate more efficient code.
1ac0a1f
1ac0a1f
	  At same places,
1ac0a1f
1ac0a1f
          | strncpy(buf, 0, sizeof buf);
1ac0a1f
1ac0a1f
	  will be used where applicable.
1ac0a1f
1ac0a1f
1ac0a1f
	  Perhaps, it would be a good idea to use BSD's strlcpy()
1ac0a1f
	  there?
1ac0a1f
1ac0a1f
	* panelfront_display.cc
1ac0a1f
1ac0a1f
	  most hunks fixes some oddnesses in the assignment/range-check
1ac0a1f
	  for 'print_width'.
1ac0a1f
1ac0a1f
          A range-check was added in PanelFront::StatsPrinter() which
1ac0a1f
          was missing before.
1ac0a1f
1ac0a1f
1ac0a1f
--- kismet-2006-04-R1/extra/buzzme/buzzme.c.strop	2002-07-22 17:01:26.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/extra/buzzme/buzzme.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -94,6 +94,7 @@ main(int argc, char **argv)
1ac0a1f
 
1ac0a1f
   // Figure out program name. Remove path if needed.
1ac0a1f
   strncpy(pname,argv[0],sizeof(pname));
1ac0a1f
+  pname[sizeof(pname)-1] = '\0';
1ac0a1f
   if ((progname = rindex(pname,'/')) != NULL) {
1ac0a1f
      progname++; // skip slash.
1ac0a1f
   }
1ac0a1f
--- kismet-2006-04-R1/libpcap-0.9.1-kis/fad-glifc.c.strop	2005-06-21 02:58:08.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/libpcap-0.9.1-kis/fad-glifc.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -213,6 +213,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		 */
1ac0a1f
 		strncpy(ifrflags.lifr_name, ifrp->lifr_name,
1ac0a1f
 		    sizeof(ifrflags.lifr_name));
1ac0a1f
+		ifrflags.lifr_name[sizeof(ifrflags.lifr_name)-1] = '\0';
1ac0a1f
 		if (ioctl(fd, SIOCGLIFFLAGS, (char *)&ifrflags) < 0) {
1ac0a1f
 			if (errno == ENXIO)
1ac0a1f
 				continue;
1ac0a1f
@@ -232,6 +233,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		 */
1ac0a1f
 		strncpy(ifrnetmask.lifr_name, ifrp->lifr_name,
1ac0a1f
 		    sizeof(ifrnetmask.lifr_name));
1ac0a1f
+		ifrnetmask.lifr_name[sizeof(ifrnetmask.lifr_name)-1] = '\0';
1ac0a1f
 		memcpy(&ifrnetmask.lifr_addr, &ifrp->lifr_addr,
1ac0a1f
 		    sizeof(ifrnetmask.lifr_addr));
1ac0a1f
 		if (ioctl(fd, SIOCGLIFNETMASK, (char *)&ifrnetmask) < 0) {
1ac0a1f
@@ -259,6 +261,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		if (ifrflags.lifr_flags & IFF_BROADCAST) {
1ac0a1f
 			strncpy(ifrbroadaddr.lifr_name, ifrp->lifr_name,
1ac0a1f
 			    sizeof(ifrbroadaddr.lifr_name));
1ac0a1f
+			ifrbroadaddr.lifr_name[sizeof(ifrbroadaddr.lifr_name)-1] = '\0';
1ac0a1f
 			memcpy(&ifrbroadaddr.lifr_addr, &ifrp->lifr_addr,
1ac0a1f
 			    sizeof(ifrbroadaddr.lifr_addr));
1ac0a1f
 			if (ioctl(fd, SIOCGLIFBRDADDR,
1ac0a1f
@@ -294,6 +297,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		if (ifrflags.lifr_flags & IFF_POINTOPOINT) {
1ac0a1f
 			strncpy(ifrdstaddr.lifr_name, ifrp->lifr_name,
1ac0a1f
 			    sizeof(ifrdstaddr.lifr_name));
1ac0a1f
+			ifrdstaddr.lifr_name[sizeof(ifrdstaddr.lifr_name)-1] = '\0';
1ac0a1f
 			memcpy(&ifrdstaddr.lifr_addr, &ifrp->lifr_addr,
1ac0a1f
 			    sizeof(ifrdstaddr.lifr_addr));
1ac0a1f
 			if (ioctl(fd, SIOCGLIFDSTADDR,
1ac0a1f
--- kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-nit.c.strop	2005-06-21 02:58:08.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-nit.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -199,7 +199,7 @@ pcap_inject_nit(pcap_t *p, const void *b
1ac0a1f
 	int ret;
1ac0a1f
 
1ac0a1f
 	memset(&sa, 0, sizeof(sa));
1ac0a1f
-	strncpy(sa.sa_data, device, sizeof(sa.sa_data));
1ac0a1f
+	strncpy(sa.sa_data, device, sizeof(sa.sa_data)-1);
1ac0a1f
 	ret = sendto(p->fd, buf, size, 0, &sa, sizeof(sa));
1ac0a1f
 	if (ret == -1) {
1ac0a1f
 		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "send: %s",
1ac0a1f
@@ -273,8 +273,9 @@ pcap_open_live(const char *device, int s
1ac0a1f
 		    "socket: %s", pcap_strerror(errno));
1ac0a1f
 		goto bad;
1ac0a1f
 	}
1ac0a1f
+	memset(&snit, 0, sizeof snit);
1ac0a1f
 	snit.snit_family = AF_NIT;
1ac0a1f
-	(void)strncpy(snit.snit_ifname, device, NITIFSIZ);
1ac0a1f
+	(void)strncpy(snit.snit_ifname, device, sizeof(snit.snit_ifname)-1);
1ac0a1f
 
1ac0a1f
 	if (bind(fd, (struct sockaddr *)&snit, sizeof(snit))) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
--- kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-snoop.c.strop	2005-06-21 02:58:08.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-snoop.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -223,7 +223,7 @@ pcap_open_live(const char *device, int s
1ac0a1f
 	p->fd = fd;
1ac0a1f
 	memset(&sr, 0, sizeof(sr));
1ac0a1f
 	sr.sr_family = AF_RAW;
1ac0a1f
-	(void)strncpy(sr.sr_ifname, device, sizeof(sr.sr_ifname));
1ac0a1f
+	(void)strncpy(sr.sr_ifname, device, sizeof(sr.sr_ifname)-1);
1ac0a1f
 	if (bind(fd, (struct sockaddr *)&sr, sizeof(sr))) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE, "snoop bind: %s",
1ac0a1f
 		    pcap_strerror(errno));
1ac0a1f
@@ -316,6 +316,7 @@ pcap_open_live(const char *device, int s
1ac0a1f
 	 * to be no greater than the MTU.
1ac0a1f
 	 */
1ac0a1f
 	(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
1ac0a1f
+	ifr.ifr_name[sizeof(ifr.ifr_name)-1] = '\0';
1ac0a1f
 	if (ioctl(fd, SIOCGIFMTU, (char *)&ifr) < 0) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE, "SIOCGIFMTU: %s",
1ac0a1f
 		    pcap_strerror(errno));
1ac0a1f
--- kismet-2006-04-R1/libpcap-0.9.1-kis/fad-gifc.c.strop	2005-06-21 02:58:08.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/libpcap-0.9.1-kis/fad-gifc.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -188,6 +188,7 @@ scan_proc_net_dev(pcap_if_t **devlistp, 
1ac0a1f
 		 * it's not up.
1ac0a1f
 		 */
1ac0a1f
 		strncpy(ifrflags.ifr_name, name, sizeof(ifrflags.ifr_name));
1ac0a1f
+		ifrflags.ifr_name[sizeof(ifrflags.ifr_name)-1] = '\0';
1ac0a1f
 		if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
1ac0a1f
 			if (errno == ENXIO)
1ac0a1f
 				continue;
1ac0a1f
@@ -354,6 +355,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		 */
1ac0a1f
 		strncpy(ifrflags.ifr_name, ifrp->ifr_name,
1ac0a1f
 		    sizeof(ifrflags.ifr_name));
1ac0a1f
+		ifrflags.ifr_name[sizeof(ifrflags.ifr_name)-1] = '\0';
1ac0a1f
 		if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
1ac0a1f
 			if (errno == ENXIO)
1ac0a1f
 				continue;
1ac0a1f
@@ -373,6 +375,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		 */
1ac0a1f
 		strncpy(ifrnetmask.ifr_name, ifrp->ifr_name,
1ac0a1f
 		    sizeof(ifrnetmask.ifr_name));
1ac0a1f
+		ifrnetmask.ifr_name[sizeof(ifrnetmask.ifr_name)-1] = '\0';
1ac0a1f
 		memcpy(&ifrnetmask.ifr_addr, &ifrp->ifr_addr,
1ac0a1f
 		    sizeof(ifrnetmask.ifr_addr));
1ac0a1f
 		if (ioctl(fd, SIOCGIFNETMASK, (char *)&ifrnetmask) < 0) {
1ac0a1f
@@ -403,6 +406,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		if (ifrflags.ifr_flags & IFF_BROADCAST) {
1ac0a1f
 			strncpy(ifrbroadaddr.ifr_name, ifrp->ifr_name,
1ac0a1f
 			    sizeof(ifrbroadaddr.ifr_name));
1ac0a1f
+			ifrbroadaddr.ifr_name[sizeof(ifrbroadaddr.ifr_name)-1] = '\0';
1ac0a1f
 			memcpy(&ifrbroadaddr.ifr_addr, &ifrp->ifr_addr,
1ac0a1f
 			    sizeof(ifrbroadaddr.ifr_addr));
1ac0a1f
 			if (ioctl(fd, SIOCGIFBRDADDR,
1ac0a1f
@@ -442,6 +446,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, c
1ac0a1f
 		if (ifrflags.ifr_flags & IFF_POINTOPOINT) {
1ac0a1f
 			strncpy(ifrdstaddr.ifr_name, ifrp->ifr_name,
1ac0a1f
 			    sizeof(ifrdstaddr.ifr_name));
1ac0a1f
+			ifrdstaddr.ifr_name[sizeof(ifrdstaddr.ifr_name)-1] = '\0';
1ac0a1f
 			memcpy(&ifrdstaddr.ifr_addr, &ifrp->ifr_addr,
1ac0a1f
 			    sizeof(ifrdstaddr.ifr_addr));
1ac0a1f
 			if (ioctl(fd, SIOCGIFDSTADDR,
1ac0a1f
--- kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-linux.c.strop	2005-07-19 22:06:52.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/libpcap-0.9.1-kis/pcap-linux.c	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -1496,7 +1496,7 @@ iface_get_id(int fd, const char *device,
1ac0a1f
 	struct ifreq	ifr;
1ac0a1f
 
1ac0a1f
 	memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
1ac0a1f
+	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name)-1);
1ac0a1f
 
1ac0a1f
 	if (ioctl(fd, SIOCGIFINDEX, &ifr) == -1) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
@@ -1598,7 +1598,7 @@ static void	pcap_close_linux( pcap_t *ha
1ac0a1f
 		 * kernels.
1ac0a1f
 		 */
1ac0a1f
 		memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-		strncpy(ifr.ifr_name, handle->md.device, sizeof(ifr.ifr_name));
1ac0a1f
+		strncpy(ifr.ifr_name, handle->md.device, sizeof(ifr.ifr_name)-1);
1ac0a1f
 		if (ioctl(handle->fd, SIOCGIFFLAGS, &ifr) == -1) {
1ac0a1f
 			fprintf(stderr,
1ac0a1f
 			    "Can't restore interface flags (SIOCGIFFLAGS failed: %s).\n"
1ac0a1f
@@ -1714,7 +1714,7 @@ live_open_old(pcap_t *handle, const char
1ac0a1f
 
1ac0a1f
 		if (promisc) {
1ac0a1f
 			memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-			strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
1ac0a1f
+			strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name)-1);
1ac0a1f
 			if (ioctl(handle->fd, SIOCGIFFLAGS, &ifr) == -1) {
1ac0a1f
 				snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
 					 "ioctl: %s", pcap_strerror(errno));
1ac0a1f
@@ -1792,7 +1792,7 @@ iface_bind_old(int fd, const char *devic
1ac0a1f
 	socklen_t	errlen = sizeof(err);
1ac0a1f
 
1ac0a1f
 	memset(&saddr, 0, sizeof(saddr));
1ac0a1f
-	strncpy(saddr.sa_data, device, sizeof(saddr.sa_data));
1ac0a1f
+	strncpy(saddr.sa_data, device, sizeof(saddr.sa_data)-1);
1ac0a1f
 	if (bind(fd, &saddr, sizeof(saddr)) == -1) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
 			 "bind: %s", pcap_strerror(errno));
1ac0a1f
@@ -1831,7 +1831,7 @@ iface_get_mtu(int fd, const char *device
1ac0a1f
 		return BIGGER_THAN_ALL_MTUS;
1ac0a1f
 
1ac0a1f
 	memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
1ac0a1f
+	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name)-1);
1ac0a1f
 
1ac0a1f
 	if (ioctl(fd, SIOCGIFMTU, &ifr) == -1) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
@@ -1851,7 +1851,7 @@ iface_get_arptype(int fd, const char *de
1ac0a1f
 	struct ifreq	ifr;
1ac0a1f
 
1ac0a1f
 	memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
1ac0a1f
+	strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name)-1);
1ac0a1f
 
1ac0a1f
 	if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) {
1ac0a1f
 		snprintf(ebuf, PCAP_ERRBUF_SIZE,
1ac0a1f
--- kismet-2006-04-R1/panelfront_display.cc.strop	2005-08-15 17:52:16.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/panelfront_display.cc	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -19,6 +19,7 @@
1ac0a1f
 #include "config.h"
1ac0a1f
 
1ac0a1f
 #include <math.h>
1ac0a1f
+#include <sys/param.h>
1ac0a1f
 
1ac0a1f
 #include "panelfront.h"
1ac0a1f
 #include "displaynetworksort.h"
1ac0a1f
@@ -1475,9 +1476,8 @@ int PanelFront::DetailsPrinter(void *in_
1ac0a1f
     char output[1024];
1ac0a1f
     kwin->text.clear();
1ac0a1f
 
1ac0a1f
-    int print_width = kwin->print_width;
1ac0a1f
-    if (print_width > 1024)
1ac0a1f
-        print_width = 1023;
1ac0a1f
+    size_t const print_width = MIN(static_cast<size_t>(kwin->print_width),
1ac0a1f
+				   sizeof(output));
1ac0a1f
 
1ac0a1f
 	if (details_network == NULL) {
1ac0a1f
 		kwin->text.push_back("The network or group being displayed");
1ac0a1f
@@ -1918,9 +1918,8 @@ int PanelFront::GpsPrinter(void *in_wind
1ac0a1f
 
1ac0a1f
     wireless_network *dnet = details_network->virtnet;
1ac0a1f
 
1ac0a1f
-    int print_width = kwin->print_width;
1ac0a1f
-    if (print_width > 1024)
1ac0a1f
-        print_width = 1023;
1ac0a1f
+    size_t const print_width = MIN(static_cast<size_t>(kwin->print_width),
1ac0a1f
+				   sizeof(output));
1ac0a1f
 
1ac0a1f
     if (print_width < 32) {
1ac0a1f
         kwin->text.push_back("Display not wide enough");
1ac0a1f
@@ -2603,7 +2602,8 @@ int PanelFront::StatsPrinter(void *in_wi
1ac0a1f
     vector<string> details_text;
1ac0a1f
     char output[1024];
1ac0a1f
 
1ac0a1f
-    const int print_width = kwin->print_width;
1ac0a1f
+    const size_t print_width = MIN(static_cast<size_t>(kwin->print_width),
1ac0a1f
+				   sizeof(output));
1ac0a1f
 
1ac0a1f
     snprintf(output, print_width, "Start   : %.24s", ctime((const time_t *) &start_time));
1ac0a1f
     details_text.push_back(output);
1ac0a1f
@@ -2921,9 +2921,8 @@ int PanelFront::DetailsClientPrinter(voi
1ac0a1f
     char temp[1024];
1ac0a1f
     kwin->text.clear();
1ac0a1f
 
1ac0a1f
-    int print_width = kwin->print_width;
1ac0a1f
-    if (print_width > 1024)
1ac0a1f
-        print_width = 1023;
1ac0a1f
+    size_t const print_width = MIN(static_cast<size_t>(kwin->print_width),
1ac0a1f
+				   sizeof(output));
1ac0a1f
 
1ac0a1f
     switch (details_client->type) {
1ac0a1f
     case client_fromds:
1ac0a1f
--- kismet-2006-04-R1/pcapsource.cc.strop	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/pcapsource.cc	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -2756,7 +2756,7 @@ bool RadiotapBSD::getmediaopt(int& optio
1ac0a1f
         return false;
1ac0a1f
 
1ac0a1f
     memset(&ifmr, 0, sizeof(ifmr));
1ac0a1f
-    strncpy(ifmr.ifm_name, ifname.c_str(), sizeof(ifmr.ifm_name));
1ac0a1f
+    strncpy(ifmr.ifm_name, ifname.c_str(), sizeof(ifmr.ifm_name)-1);
1ac0a1f
 
1ac0a1f
     /*
1ac0a1f
      * We must go through the motions of reading all
1ac0a1f
@@ -2781,7 +2781,7 @@ bool RadiotapBSD::setmediaopt(int option
1ac0a1f
         return false;
1ac0a1f
 
1ac0a1f
     memset(&ifmr, 0, sizeof(ifmr));
1ac0a1f
-    strncpy(ifmr.ifm_name, ifname.c_str(), sizeof(ifmr.ifm_name));
1ac0a1f
+    strncpy(ifmr.ifm_name, ifname.c_str(), sizeof(ifmr.ifm_name)-1);
1ac0a1f
 
1ac0a1f
     /*
1ac0a1f
      * We must go through the motions of reading all
1ac0a1f
@@ -2809,7 +2809,7 @@ bool RadiotapBSD::setmediaopt(int option
1ac0a1f
     delete mwords;
1ac0a1f
 
1ac0a1f
     memset(&ifr, 0, sizeof(ifr));
1ac0a1f
-    strncpy(ifr.ifr_name, ifname.c_str(), sizeof(ifr.ifr_name));
1ac0a1f
+    strncpy(ifr.ifr_name, ifname.c_str(), sizeof(ifr.ifr_name)-1);
1ac0a1f
     ifr.ifr_media = (ifmr.ifm_current &~ IFM_OMASK) | options;
1ac0a1f
     ifr.ifr_media = (ifr.ifr_media &~ IFM_MMASK) | IFM_MAKEMODE(mode);
1ac0a1f
 
1ac0a1f
@@ -2863,7 +2863,7 @@ bool RadiotapBSD::get80211(int type, int
1ac0a1f
     if (!checksocket())
1ac0a1f
         return false;
1ac0a1f
     memset(&ireq, 0, sizeof(ireq));
1ac0a1f
-    strncpy(ireq.i_name, ifname.c_str(), sizeof(ireq.i_name));
1ac0a1f
+    strncpy(ireq.i_name, ifname.c_str(), sizeof(ireq.i_name)-1);
1ac0a1f
     ireq.i_type = type;
1ac0a1f
     ireq.i_len = len;
1ac0a1f
     ireq.i_data = data;
1ac0a1f
@@ -2881,7 +2881,7 @@ bool RadiotapBSD::set80211(int type, int
1ac0a1f
     if (!checksocket())
1ac0a1f
 	return false;
1ac0a1f
     memset(&ireq, 0, sizeof(ireq));
1ac0a1f
-    strncpy(ireq.i_name, ifname.c_str(), sizeof(ireq.i_name));
1ac0a1f
+    strncpy(ireq.i_name, ifname.c_str(), sizeof(ireq.i_name)-1);
1ac0a1f
     ireq.i_type = type;
1ac0a1f
     ireq.i_val = val;
1ac0a1f
     ireq.i_len = len;
1ac0a1f
@@ -2898,6 +2898,7 @@ bool RadiotapBSD::getifflags(int& flags)
1ac0a1f
         return false;
1ac0a1f
 
1ac0a1f
     strncpy(ifr.ifr_name, ifname.c_str(), sizeof (ifr.ifr_name));
1ac0a1f
+    ifr.ifr_name[sizeof (ifr.ifr_name)-1] = '\0';
1ac0a1f
     if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) {
1ac0a1f
         perror("SIOCGIFFLAGS ioctl failed");
1ac0a1f
         return false;
1ac0a1f
--- kismet-2006-04-R1/tcpclient.cc.strop	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/tcpclient.cc	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -107,6 +107,7 @@ int TcpClient::Connect(short int in_port
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
     strncpy(hostname, in_host, MAXHOSTNAMELEN);
1ac0a1f
+    hostname[MAXHOSTNAMELEN-1] = '\0';
1ac0a1f
 
1ac0a1f
     // Set up our socket
1ac0a1f
     //bzero(&client_sock, sizeof(client_sock));
1ac0a1f
--- kismet-2006-04-R1/gpsmap_cache.cc.strop	2005-03-10 17:49:34.000000000 +0100
1ac0a1f
+++ kismet-2006-04-R1/gpsmap_cache.cc	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -174,6 +174,8 @@ int ReadGpsCacheFile(const char *in_gpsf
1ac0a1f
 
1ac0a1f
         strncpy(pt->bssid, cpt.bssid, MAC_STR_LEN);
1ac0a1f
         strncpy(pt->source, cpt.source, MAC_STR_LEN);
1ac0a1f
+	pt->bssid[MAC_STR_LEN-1]  = '\0';
1ac0a1f
+	pt->source[MAC_STR_LEN-1] = '\0';
1ac0a1f
         pt->tv_sec = cpt.tv_sec;
1ac0a1f
         pt->tv_usec = cpt.tv_usec;
1ac0a1f
         pt->lat = cpt.lat;
1ac0a1f
@@ -344,9 +346,10 @@ int WriteGpsCacheFile(const char *in_gps
1ac0a1f
     for (unsigned int nsam = 0; nsam < fheader.num_points; nsam++) {
1ac0a1f
         gpscache_point cpt;
1ac0a1f
         gps_point *pt = (*in_points)[nsam];
1ac0a1f
-   
1ac0a1f
-        strncpy(cpt.bssid, pt->bssid, MAC_STR_LEN);
1ac0a1f
-        strncpy(cpt.source, pt->source, MAC_STR_LEN);
1ac0a1f
+
1ac0a1f
+	memset(&cpt, 0, sizeof cpt);
1ac0a1f
+        strncpy(cpt.bssid, pt->bssid, sizeof(cpt.bssid)-1);
1ac0a1f
+        strncpy(cpt.source, pt->source, sizeof(cpt.source)-1);
1ac0a1f
         cpt.tv_sec = pt->tv_sec;
1ac0a1f
         cpt.tv_usec = pt->tv_usec;
1ac0a1f
         cpt.lat = pt->lat;
1ac0a1f
--- kismet-2006-04-R1/ifcontrol.cc.strop	2004-08-09 06:36:01.000000000 +0200
1ac0a1f
+++ kismet-2006-04-R1/ifcontrol.cc	2006-04-22 21:08:37.000000000 +0200
1ac0a1f
@@ -32,7 +32,8 @@ int Ifconfig_Set_Flags(const char *in_de
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
     // Fetch interface flags
1ac0a1f
-    strncpy(ifr.ifr_name, in_dev, IFNAMSIZ);
1ac0a1f
+    memset(&ifr, 0, sizeof ifr);
1ac0a1f
+    strncpy(ifr.ifr_name, in_dev, sizeof(ifr.ifr_name)-1);
1ac0a1f
     ifr.ifr_flags = flags;
1ac0a1f
     if (ioctl(skfd, SIOCSIFFLAGS, &ifr) < 0) {
1ac0a1f
         snprintf(errstr, STATUS_MAX, "SetIFFlags: Unknown interface %s: %s", 
1ac0a1f
@@ -58,7 +59,8 @@ int Ifconfig_Get_Flags(const char *in_de
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
     // Fetch interface flags
1ac0a1f
-    strncpy(ifr.ifr_name, in_dev, IFNAMSIZ);
1ac0a1f
+    memset(&ifr, 0, sizeof ifr);
1ac0a1f
+    strncpy(ifr.ifr_name, in_dev, sizeof(ifr.ifr_name)-1);
1ac0a1f
     if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
1ac0a1f
         snprintf(errstr, STATUS_MAX, "GetIFFlags: interface %s: %s", 
1ac0a1f
                  in_dev, strerror(errno));
1ac0a1f
@@ -96,7 +98,8 @@ int Ifconfig_Get_Hwaddr(const char *in_d
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
     // Fetch interface flags
1ac0a1f
-    strncpy(ifr.ifr_name, in_dev, IFNAMSIZ);
1ac0a1f
+    memset(&ifr, 0, sizeof ifr);
1ac0a1f
+    strncpy(ifr.ifr_name, in_dev, sizeof(ifr.ifr_name)-1);
1ac0a1f
     if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
1ac0a1f
         snprintf(errstr, STATUS_MAX, "Getting HWAddr: unknown interface %s: %s", 
1ac0a1f
                  in_dev, strerror(errno));
1ac0a1f
@@ -122,7 +125,8 @@ int Ifconfig_Set_Hwaddr(const char *in_d
1ac0a1f
         return -1;
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
-    strncpy(ifr.ifr_name, in_dev, IFNAMSIZ);
1ac0a1f
+    memset(&ifr, 0, sizeof ifr);
1ac0a1f
+    strncpy(ifr.ifr_name, in_dev, sizeof(ifr.ifr_name)-1);
1ac0a1f
     memcpy(ifr.ifr_hwaddr.sa_data, in_hwaddr, 6);
1ac0a1f
     ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
1ac0a1f
      
1ac0a1f
@@ -151,7 +155,8 @@ int Ifconfig_Set_MTU(const char *in_dev,
1ac0a1f
     }
1ac0a1f
 
1ac0a1f
     // Fetch interface flags
1ac0a1f
-    strncpy(ifr.ifr_name, in_dev, IFNAMSIZ);
1ac0a1f
+    memset(&ifr, 0, sizeof ifr);
1ac0a1f
+    strncpy(ifr.ifr_name, in_dev, sizeof(ifr.ifr_name)-1);
1ac0a1f
     ifr.ifr_mtu = in_mtu;
1ac0a1f
     if (ioctl(skfd, SIOCSIFMTU, &ifr) < 0) {
1ac0a1f
         snprintf(errstr, STATUS_MAX, "Setting MTU: unknown interface %s: %s",