From fa493111cce2fd02afff2726a8697822dfd1f667 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Wed, 13 Aug 2008 17:35:11 +0000 Subject: [PATCH 01/61] initial import --- .cvsignore | 1 + import.log | 1 + pads+vlan.patch | 153 + pads-1.2-arp.patch | 173 + pads-1.2-bstring.patch | 4671 ++++++++++++++++++++++ pads-1.2-cleanup.patch | 931 +++++ pads-1.2-daemon.patch | 102 + pads-1.2-daemonize.patch | 75 + pads-1.2-disable-debug.patch | 12 + pads-1.2-ether-codes-update.patch | 6223 +++++++++++++++++++++++++++++ pads-1.2-leak.patch | 121 + pads-1.2-memleak.patch | 280 ++ pads-1.2-misc.patch | 47 + pads-1.2-overrun.patch | 12 + pads-1.2-perf.patch | 472 +++ pads-1.2-prelude-cleanup.patch | 109 + pads-1.2-prelude.patch | 1024 +++++ pads-1.2-readonly.patch | 153 + pads.init | 90 + pads.spec | 107 + pads.sysconfig | 6 + sources | 1 + 22 files changed, 14764 insertions(+) create mode 100644 import.log create mode 100644 pads+vlan.patch create mode 100644 pads-1.2-arp.patch create mode 100644 pads-1.2-bstring.patch create mode 100644 pads-1.2-cleanup.patch create mode 100644 pads-1.2-daemon.patch create mode 100644 pads-1.2-daemonize.patch create mode 100644 pads-1.2-disable-debug.patch create mode 100644 pads-1.2-ether-codes-update.patch create mode 100644 pads-1.2-leak.patch create mode 100644 pads-1.2-memleak.patch create mode 100644 pads-1.2-misc.patch create mode 100644 pads-1.2-overrun.patch create mode 100644 pads-1.2-perf.patch create mode 100644 pads-1.2-prelude-cleanup.patch create mode 100644 pads-1.2-prelude.patch create mode 100644 pads-1.2-readonly.patch create mode 100644 pads.init create mode 100644 pads.spec create mode 100644 pads.sysconfig diff --git a/.cvsignore b/.cvsignore index e69de29..3d507cb 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +pads-1.2.tar.gz diff --git a/import.log b/import.log new file mode 100644 index 0000000..0f1ecca --- /dev/null +++ b/import.log @@ -0,0 +1 @@ +pads-1_2-1_fc9:HEAD:pads-1.2-1.fc9.src.rpm:1218648805 diff --git a/pads+vlan.patch b/pads+vlan.patch new file mode 100644 index 0000000..eb6b755 --- /dev/null +++ b/pads+vlan.patch @@ -0,0 +1,153 @@ +diff -r -c ./src/packet.c ../pads-1.2+vlan/src/packet.c +*** ./src/packet.c 2005-02-15 20:47:35.000000000 -0500 +--- ../pads-1.2+vlan/src/packet.c 2007-08-24 10:11:59.000000000 -0400 +*************** +*** 35,59 **** + * : 1 - Packet + * RETURN : None! + * ---------------------------------------------------------- */ + void process_eth (const struct pcap_pkthdr* pkthdr, const u_char* packet) + { + struct ether_header *ethh; /* net/ethernet.h */ + +! /* Extract the ethernet header from the packet. */ +! ethh = (struct ether_header*) packet; + + /* Determine what type of ethernet packet this is. */ + switch (ntohs(ethh->ether_type)) { + /* IP */ + case ETHERTYPE_IP: +! process_ip (pkthdr, packet, sizeof(struct ether_header)); +! break; + + /* ARP */ + case ETHERTYPE_ARP: +! process_arp (pkthdr, packet, sizeof(struct ether_header)); + break; +! + /* Unknown Type */ + default: + return; +--- 35,72 ---- + * : 1 - Packet + * RETURN : None! + * ---------------------------------------------------------- */ ++ ++ /* Update - david@vorant.com 18 June 2007 ++ * Try to detect whether the packet has an 802.1Q VLAN tag on it. If so, ++ * try to automatically skip the tag and treat it as regular TCP/IP traffic. ++ * Otherwise the handler won't process the packet. This is useful when, ++ * for example, you are monitoring a VLAN trunk line. ++ */ + void process_eth (const struct pcap_pkthdr* pkthdr, const u_char* packet) + { + struct ether_header *ethh; /* net/ethernet.h */ ++ u_char * my_packet; + +! my_packet = (u_char *)packet; + ++ /* Extract the ethernet header from the packet. */ ++ ethh = (struct ether_header*) my_packet; ++ if(ntohs(ethh->ether_type) == VLAN_ETHERTYPE) { /* strip the vlan tags */ ++ ethh = (struct ether_header*) (packet + VLAN_HDRLEN); ++ my_packet += VLAN_HDRLEN; ++ } + /* Determine what type of ethernet packet this is. */ + switch (ntohs(ethh->ether_type)) { + /* IP */ + case ETHERTYPE_IP: +! process_ip (pkthdr, my_packet, sizeof(struct ether_header)); +! break; + + /* ARP */ + case ETHERTYPE_ARP: +! process_arp (pkthdr, my_packet, sizeof(struct ether_header)); + break; +! + /* Unknown Type */ + default: + return; +*************** +*** 113,120 **** + struct ip *iph; /* netinet/ip.h */ + + /* Extract the IP header from this packet. */ +! iph = (struct ip*)(packet + len); +! + /* Determine what type of IP packet this is. */ + switch (iph->ip_p) { + case IPPROTO_TCP: +--- 126,132 ---- + struct ip *iph; /* netinet/ip.h */ + + /* Extract the IP header from this packet. */ +! iph = (struct ip*)(packet + len); + /* Determine what type of IP packet this is. */ + switch (iph->ip_p) { + case IPPROTO_TCP: +diff -r -c ./src/packet.h ../pads-1.2+vlan/src/packet.h +*** ./src/packet.h 2005-02-10 01:05:05.000000000 -0500 +--- ../pads-1.2+vlan/src/packet.h 2007-08-24 10:11:02.000000000 -0400 +*************** +*** 40,45 **** +--- 40,51 ---- + #endif /* ifdef LINUX */ + + ++ /* 802.1Q VLAN tags are 4 bytes long. */ ++ #define VLAN_HDRLEN 4 ++ ++ /* This is the decimal equivalent of the VLAN tag's ether frame type */ ++ #define VLAN_ETHERTYPE 33024 ++ + /* INCLUDES ---------------------------------------- */ + #include "global.h" + +*************** +*** 47,53 **** + #include + #include + +- + /* DATA STRUCTURES --------------------------------- */ + + /* +--- 53,58 ---- +diff -r -c ./src/pads.c ../pads-1.2+vlan/src/pads.c +*** ./src/pads.c 2005-06-15 18:00:40.000000000 -0400 +--- ../pads-1.2+vlan/src/pads.c 2007-06-18 15:29:17.000000000 -0400 +*************** +*** 204,209 **** +--- 204,210 ---- + void + main_pads (void) + { ++ char pcap_filter[1044]; + /* Initialize */ + init_pads(); + +*************** +*** 255,262 **** + + /* Compile libpcap filter */ + if (prog_argc > 0) { +! log_message("Filter: %s\n", gc.pcap_filter); +! if (pcap_compile(gc.handle, &gc.filter, gc.pcap_filter, 0, gc.net) == -1) { + err_message("Unable to compile pcap filter! %s", pcap_geterr(gc.handle)); + } + if (pcap_setfilter(gc.handle, &gc.filter)) { +--- 256,269 ---- + + /* Compile libpcap filter */ + if (prog_argc > 0) { +! if(gc.pcap_filter) { +! strcpy(pcap_filter, "(ip or vlan) and "); +! strncat(pcap_filter, gc.pcap_filter, 1024); +! } else { +! strcpy(pcap_filter, "(ip or vlan)"); +! } +! log_message("Filter: %s\n", pcap_filter); +! if (pcap_compile(gc.handle, &gc.filter, pcap_filter, 0, gc.net) == -1) { + err_message("Unable to compile pcap filter! %s", pcap_geterr(gc.handle)); + } + if (pcap_setfilter(gc.handle, &gc.filter)) { diff --git a/pads-1.2-arp.patch b/pads-1.2-arp.patch new file mode 100644 index 0000000..b47e0c2 --- /dev/null +++ b/pads-1.2-arp.patch @@ -0,0 +1,173 @@ +diff -urp pads-1.2.orig/src/mac-resolution.c pads-1.2/src/mac-resolution.c +--- pads-1.2.orig/src/mac-resolution.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/mac-resolution.c 2008-07-07 12:07:36.000000000 -0400 +@@ -160,7 +160,7 @@ int add_vendor (char *mac, char *vendor) + * INPUT : 0 - MAC Address + * RETURN : Vendor Name + * ---------------------------------------------------------- */ +-bstring get_vendor (char *m) ++bstring get_vendor (const char *m) + { + Vendor *list; + char mac[4]; +diff -urp pads-1.2.orig/src/mac-resolution.h pads-1.2/src/mac-resolution.h +--- pads-1.2.orig/src/mac-resolution.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/mac-resolution.h 2008-07-07 12:07:36.000000000 -0400 +@@ -41,7 +41,7 @@ + int init_mac_resolution (void); + int parse_raw_mac (bstring line); + int add_vendor (char *mac, char *vendor); +-bstring get_vendor (char *m); ++bstring get_vendor (const char *m); + void end_mac_resolution (void); + + #ifdef DEBUG +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-07-02 09:24:19.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-07-07 12:07:36.000000000 -0400 +@@ -91,6 +91,7 @@ init_output_csv (bstring filename) + /* File does not exist, create new.. */ + if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "w")) != NULL) { + fprintf(output_csv_conf.file, "asset,port,proto,service,application,discovered\n"); ++ fflush(output_csv_conf.file); + + } else { + err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); +@@ -216,8 +217,11 @@ parse_raw_report (bstring line) + /* Add Asset to Data Structure */ + if (proto == 0 && ret != -1) { + /* ARP */ +- mac2hex((char *)bdata(application), mac_addr, MAC_LEN); +- add_arp_asset(ip_addr, mac_addr, discovered); ++ if (mac2hex((char *)bdata(application), mac_addr, MAC_LEN) == 0) ++ add_arp_asset(ip_addr, mac_addr, discovered); ++ else ++ log_message("Error parsing HWaddr %s - skipping", ++ (char *)bdata(application)); + } else { + /* Everything Else */ + add_asset(ip_addr, port, proto, service, application, discovered); +diff -urp pads-1.2.orig/src/storage.c pads-1.2/src/storage.c +--- pads-1.2.orig/src/storage.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/storage.c 2008-07-07 12:07:36.000000000 -0400 +@@ -108,7 +108,7 @@ int check_arp_asset (struct in_addr ip_a + rec = arp_asset_list; + while (rec != NULL) { + if (rec->ip_addr.s_addr == ip_addr.s_addr +- && (strcmp(rec->mac_addr, mac_addr) == 0)) { ++ && (memcmp(rec->mac_addr, mac_addr, MAC_LEN) == 0)) { + return 0; + + } else { +@@ -200,7 +200,7 @@ void add_asset (struct in_addr ip_addr, + * : 2 - Discovered + * RETURN : None! + * ---------------------------------------------------------- */ +-void add_arp_asset (struct in_addr ip_addr, char mac_addr[MAC_LEN], ++void add_arp_asset (struct in_addr ip_addr, const char *mac_addr, + time_t discovered) + { + ArpAsset *list; +diff -urp pads-1.2.orig/src/storage.h pads-1.2/src/storage.h +--- pads-1.2.orig/src/storage.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/storage.h 2008-07-07 12:07:36.000000000 -0400 +@@ -52,7 +52,7 @@ int check_tcp_asset (struct in_addr ip_a + int check_icmp_asset (struct in_addr ip_addr); + int check_arp_asset (struct in_addr ip_addr, char mac_addr[MAC_LEN]); + void add_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto, bstring service, bstring application, time_t discovered); +-void add_arp_asset (struct in_addr ip_addr, char mac_addr[MAC_LEN], time_t discovered); ++void add_arp_asset (struct in_addr ip_addr, const char *mac_addr, time_t discovered); + unsigned short get_i_attempts (struct in_addr ip_addr, u_int16_t port, unsigned short proto); + short update_i_attempts (struct in_addr ip_addr, u_int16_t port, unsigned short proto, unsigned short i_attempts); + short update_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto, bstring service, bstring application); +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-07-02 09:24:19.000000000 -0400 ++++ pads-1.2/src/util.c 2008-07-07 12:08:00.000000000 -0400 +@@ -27,6 +27,7 @@ + **************************************************************************/ + #include + #include ++#include + #include "util.h" + #include "pads.h" + +@@ -426,31 +427,39 @@ drop_privs (bstring newuser, bstring new + * INPUT : 0 - MAC Address + * : 1 - Converted + * : 0 - Size of 1 +- * RETURN : None ++ * RETURN : 0 - success, -1 failure + * ---------------------------------------------------------- */ +-void ++int + mac2hex(const char *mac, char *dst, int len) + { + int i; +- long l; +- char *pp; ++ unsigned long l; + + if (len < 6) +- return; ++ return -1; + + while (isspace(*mac)) + mac++; + + /* expect 6 hex octets separated by ':' or space/NUL if last octet */ +- for (i = 0; i < 6; i++) { +- l = strtol(mac, &pp, 16); +- if (pp == mac || l > 0xFF || l < 0) +- return; +- if (!(*pp == ':' || (i == 5 && (isspace(*pp) || *pp == '\0')))) +- return; +- dst[i] = (u_char) l; +- mac = pp + 1; ++ for (i = 0; i < MAC_LEN; i++) { ++ char tmp[3]; ++ ++ while (*mac == ':' || *mac == ' ') ++ mac++; ++ if (mac[0] == 0 || mac[1] == 0) ++ return -1; ++ tmp[0] = mac[0]; ++ tmp[1] = mac[1]; ++ tmp[2] = 0; ++ errno = 0; ++ l = strtoul(tmp, NULL, 16); ++ if (errno) ++ return -1; ++ dst[i] = (u_char)(l & 0xFF); ++ mac+=2; + } ++ return 0; + } + + /* ---------------------------------------------------------- +@@ -464,11 +473,11 @@ mac2hex(const char *mac, char *dst, int + char * + hex2mac(const char *mac) + { +- static char buf[18]; ++ static char buf[32]; + + snprintf(buf, sizeof(buf), "%02X:%02X:%02X:%02X:%02X:%02X", +- mac[0], mac[1], mac[2], +- mac[3], mac[4], mac[5]); ++ (mac[0] & 0xFF) , (mac[1] & 0xFF), (mac[2] & 0xFF), ++ (mac[3] & 0xFF), (mac[4] & 0xFF), (mac[5] & 0xFF)); + + return buf; + } +diff -urp pads-1.2.orig/src/util.h pads-1.2/src/util.h +--- pads-1.2.orig/src/util.h 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/util.h 2008-07-07 12:07:36.000000000 -0400 +@@ -52,7 +52,7 @@ size_t strlcpy(char *dst, const char *sr + size_t strlcat(char *dst, const char *src, size_t len); + #endif + void drop_privs (bstring newuser, bstring newgroup); +-void mac2hex(const char *mac, char *dst, int len); ++int mac2hex(const char *mac, char *dst, int len); + char *hex2mac(const char *mac); + + /* GLOBALS ----------------------------------------- */ diff --git a/pads-1.2-bstring.patch b/pads-1.2-bstring.patch new file mode 100644 index 0000000..7e78e6d --- /dev/null +++ b/pads-1.2-bstring.patch @@ -0,0 +1,4671 @@ +diff -urp pads-1.2.orig/lib/bstring/bstraux.c pads-1.2/lib/bstring/bstraux.c +--- pads-1.2.orig/lib/bstring/bstraux.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/lib/bstring/bstraux.c 2008-07-10 18:09:21.000000000 -0400 +@@ -1,8 +1,8 @@ + /* + * This source file is part of the bstring string library. This code was +- * written by Paul Hsieh in 2002-2004, and is covered by the BSD open source +- * license. Refer to the accompanying documentation for details on usage and +- * license. ++ * written by Paul Hsieh in 2002-2008, and is covered by the BSD open source ++ * license and the GPL. Refer to the accompanying documentation for details ++ * on usage and license. + */ + + /* +@@ -17,28 +17,16 @@ + #include + #include + #include ++#include + #include "bstrlib.h" + #include "bstraux.h" + +-/* int bTrunc (bstring b, int n) +- * +- * Truncate the bstring to at most n characters. +- */ +-int bTrunc (bstring b, int n) { +- if (b == NULL || n < 0 || b->mlen < b->slen) return -__LINE__; +- if (b->slen > n) { +- b->slen = n; +- b->data[n] = '\0'; /* Required for Clib interoperability */ +- } +- return 0; +-} +- + /* bstring bTail (bstring b, int n) + * + * Return with a string of the last n characters of b. + */ + bstring bTail (bstring b, int n) { +- if (b == NULL || n < 0 || b->mlen < b->slen) return NULL; ++ if (b == NULL || n < 0 || (b->mlen < b->slen && b->mlen > 0)) return NULL; + if (n >= b->slen) return bstrcpy (b); + return bmidstr (b, b->slen - n, n); + } +@@ -48,7 +36,7 @@ bstring bTail (bstring b, int n) { + * Return with a string of the first n characters of b. + */ + bstring bHead (bstring b, int n) { +- if (b == NULL || n < 0 || b->mlen < b->slen) return NULL; ++ if (b == NULL || n < 0 || (b->mlen < b->slen && b->mlen > 0)) return NULL; + if (n >= b->slen) return bstrcpy (b); + return bmidstr (b, 0, n); + } +@@ -57,10 +45,10 @@ bstring bHead (bstring b, int n) { + * + * Fill a given bstring with the character in parameter c, for a length n. + */ +-int bFill (bstring a, char c, int len) { +- if (a == NULL || len < 0 || a->mlen < a->slen) return -__LINE__; +- a->slen = 0; +- return bsetstr (a, len, NULL, c); ++int bFill (bstring b, char c, int len) { ++ if (b == NULL || len < 0 || (b->mlen < b->slen && b->mlen > 0)) return -__LINE__; ++ b->slen = 0; ++ return bsetstr (b, len, NULL, c); + } + + /* int bReplicate (bstring b, int n) +@@ -79,14 +67,16 @@ int bReverse (bstring b) { + int i, n, m; + unsigned char t; + +- if (b == NULL || b->slen < 2 || b->mlen < b->slen) return -__LINE__; ++ if (b == NULL || b->slen < 0 || b->mlen < b->slen) return -__LINE__; + n = b->slen; +- m = ((unsigned)n) >> 1; +- n--; +- for (i=0; i < m; i++) { +- t = b->data[n - i]; +- b->data[n - i] = b->data[i]; +- b->data[i] = t; ++ if (2 <= n) { ++ m = ((unsigned)n) >> 1; ++ n--; ++ for (i=0; i < m; i++) { ++ t = b->data[n - i]; ++ b->data[n - i] = b->data[i]; ++ b->data[i] = t; ++ } + } + return 0; + } +@@ -106,7 +96,7 @@ int bInsertChrs (bstring b, int pos, int + if (pos < b->slen) memmove (b->data + pos + len, b->data + pos, b->slen - pos); + memset (b->data + pos, c, len); + b->slen += len; +- b->data[b->slen] = '\0'; ++ b->data[b->slen] = (unsigned char) '\0'; + return BSTR_OK; + } + +@@ -128,7 +118,7 @@ unsigned char c = (unsigned char) space; + } + if (j > 0 && b->data[j-1] == c) j--; + +- b->data[j] = '\0'; ++ b->data[j] = (unsigned char) '\0'; + b->slen = j; + return BSTR_OK; + } +@@ -170,6 +160,7 @@ int bJustifyMargin (bstring b, int width + struct bstrList * sl; + int i, l, c; + ++ if (b == NULL || b->slen < 0 || b->mlen == 0 || b->mlen < b->slen) return -__LINE__; + if (NULL == (sl = bsplit (b, (unsigned char) space))) return -__LINE__; + for (l=c=i=0; i < sl->qty; i++) { + if (sl->entry[i]->slen > 0) { +@@ -201,28 +192,74 @@ int i, l, c; + return BSTR_OK; + } + +-/* char * bStr2NetStr (const bstring b) ++static size_t readNothing (void *buff, size_t elsize, size_t nelem, void *parm) { ++ buff = buff; ++ elsize = elsize; ++ nelem = nelem; ++ parm = parm; ++ return 0; /* Immediately indicate EOF. */ ++} ++ ++/* struct bStream * bsFromBstr (const_bstring b); ++ * ++ * Create a bStream whose contents are a copy of the bstring passed in. ++ * This allows the use of all the bStream APIs with bstrings. ++ */ ++struct bStream * bsFromBstr (const_bstring b) { ++struct bStream * s = bsopen ((bNread) readNothing, NULL); ++ bsunread (s, b); /* Push the bstring data into the empty bStream. */ ++ return s; ++} ++ ++static size_t readRef (void *buff, size_t elsize, size_t nelem, void *parm) { ++struct tagbstring * t = (struct tagbstring *) parm; ++size_t tsz = elsize * nelem; ++ ++ if (tsz > (size_t) t->slen) tsz = (size_t) t->slen; ++ if (tsz > 0) { ++ memcpy (buff, t->data, tsz); ++ t->slen -= (int) tsz; ++ t->data += tsz; ++ return tsz / elsize; ++ } ++ return 0; ++} ++ ++/* The "by reference" version of the above function. This function puts ++ * a number of restrictions on the call site (the passed in struct ++ * tagbstring *will* be modified by this function, and the source data ++ * must remain alive and constant for the lifetime of the bStream). ++ * Hence it is not presented as an extern. ++ */ ++static struct bStream * bsFromBstrRef (struct tagbstring * t) { ++ if (!t) return NULL; ++ return bsopen ((bNread) readRef, t); ++} ++ ++/* char * bStr2NetStr (const_bstring b) + * + * Convert a bstring to a netstring. See + * http://cr.yp.to/proto/netstrings.txt for a description of netstrings. +- * Note: 1) The value returned should be freed with a call to free() at the +- * point when it will no longer be referenced to avoid a memory ++ * Note: 1) The value returned should be freed with a call to bcstrfree() at ++ * the point when it will no longer be referenced to avoid a memory + * leak. + * 2) If the returned value is non-NULL, then it also '\0' terminated + * in the character position one past the "," terminator. + */ +-char * bStr2NetStr (const bstring b) { ++char * bStr2NetStr (const_bstring b) { ++char strnum[sizeof (b->slen) * 3 + 1]; + bstring s; + unsigned char * buff; + + if (b == NULL || b->data == NULL || b->slen < 0) return NULL; +- if (NULL == (s = bformat ("%d:", b->slen)) +- || bconcat (s, b) == BSTR_ERR || bconchar (s, ',') == BSTR_ERR) { ++ sprintf (strnum, "%d:", b->slen); ++ if (NULL == (s = bfromcstr (strnum)) ++ || bconcat (s, b) == BSTR_ERR || bconchar (s, (char) ',') == BSTR_ERR) { + bdestroy (s); + return NULL; + } + buff = s->data; +- free (s); ++ bcstrfree ((char *) s); + return (char *) buff; + } + +@@ -253,18 +290,18 @@ bstring b; + return NULL; + } + memcpy (b->data, buff + i + 1, x); +- b->data[x] = '\0'; ++ b->data[x] = (unsigned char) '\0'; + b->slen = x; + return b; + } + +-static unsigned char b64ETable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static char b64ETable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +-/* bstring bBase64Encode (const bstring b) ++/* bstring bBase64Encode (const_bstring b) + * +- * Generate a base64 encoding. ++ * Generate a base64 encoding. See: RFC1341 + */ +-bstring bBase64Encode (const bstring b) { ++bstring bBase64Encode (const_bstring b) { + int i, c0, c1, c2, c3; + bstring out; + +@@ -273,16 +310,16 @@ bstring out; + out = bfromcstr (""); + for (i=0; i + 2 < b->slen; i += 3) { + if (i && ((i % 57) == 0)) { +- if (bconchar (out, '\015') < 0 || bconchar (out, '\012') < 0) { ++ if (bconchar (out, (char) '\015') < 0 || bconchar (out, (char) '\012') < 0) { + bdestroy (out); + return NULL; + } + } + c0 = b->data[i] >> 2; + c1 = ((b->data[i] << 4) | +- (b->data[i+1] >> 4)) & 0x3F; ++ (b->data[i+1] >> 4)) & 0x3F; + c2 = ((b->data[i+1] << 2) | +- (b->data[i+2] >> 6)) & 0x3F; ++ (b->data[i+2] >> 6)) & 0x3F; + c3 = b->data[i+2] & 0x3F; + if (bconchar (out, b64ETable[c0]) < 0 || + bconchar (out, b64ETable[c1]) < 0 || +@@ -294,7 +331,7 @@ bstring out; + } + + if (i && ((i % 57) == 0)) { +- if (bconchar (out, '\015') < 0 || bconchar (out, '\012') < 0) { ++ if (bconchar (out, (char) '\015') < 0 || bconchar (out, (char) '\012') < 0) { + bdestroy (out); + return NULL; + } +@@ -308,7 +345,7 @@ bstring out; + if (bconchar (out, b64ETable[c0]) < 0 || + bconchar (out, b64ETable[c1]) < 0 || + bconchar (out, b64ETable[c2]) < 0 || +- bconchar (out, '=') < 0) { ++ bconchar (out, (char) '=') < 0) { + bdestroy (out); + return NULL; + } +@@ -317,8 +354,8 @@ bstring out; + c1 = (b->data[i] << 4) & 0x3F; + if (bconchar (out, b64ETable[c0]) < 0 || + bconchar (out, b64ETable[c1]) < 0 || +- bconchar (out, '=') < 0 || +- bconchar (out, '=') < 0) { ++ bconchar (out, (char) '=') < 0 || ++ bconchar (out, (char) '=') < 0) { + bdestroy (out); + return NULL; + } +@@ -344,23 +381,28 @@ static int base64DecodeSymbol (unsigned + else return B64_ERR; + } + +-/* bstring bBase64Decode (const bstring b) ++/* bstring bBase64DecodeEx (const_bstring b, int * boolTruncError) + * + * Decode a base64 block of data. All MIME headers are assumed to have been +- * removed. ++ * removed. See: RFC1341 + */ +-bstring bBase64Decode (const bstring b) { ++bstring bBase64DecodeEx (const_bstring b, int * boolTruncError) { + int i, v; + unsigned char c0, c1, c2; + bstring out; + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; ++ if (boolTruncError) *boolTruncError = 0; + out = bfromcstr (""); + i = 0; + for (;;) { + do { + if (i >= b->slen) return out; +- if (b->data[i] == '=') { ++ if (b->data[i] == '=') { /* Bad "too early" truncation */ ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } + bdestroy (out); + return NULL; + } +@@ -369,7 +411,11 @@ bstring out; + } while (v < 0); + c0 = (unsigned char) (v << 2); + do { +- if (i >= b->slen || b->data[i] == '=') { ++ if (i >= b->slen || b->data[i] == '=') { /* Bad "too early" truncation */ ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } + bdestroy (out); + return NULL; + } +@@ -380,13 +426,21 @@ bstring out; + c1 = (unsigned char) (v << 4); + do { + if (i >= b->slen) { ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } + bdestroy (out); + return NULL; + } + if (b->data[i] == '=') { + i++; + if (i >= b->slen || b->data[i] != '=' || bconchar (out, c0) < 0) { +- bdestroy (out); ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } ++ bdestroy (out); /* Missing "=" at the end. */ + return NULL; + } + return out; +@@ -398,14 +452,23 @@ bstring out; + c2 = (unsigned char) (v << 6); + do { + if (i >= b->slen) { ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } + bdestroy (out); + return NULL; + } + if (b->data[i] == '=') { + if (bconchar (out, c0) < 0 || bconchar (out, c1) < 0) { +- bconchar (out, c0); ++ if (boolTruncError) { ++ *boolTruncError = 1; ++ return out; ++ } ++ bdestroy (out); + return NULL; + } ++ if (boolTruncError) *boolTruncError = 0; + return out; + } + v = base64DecodeSymbol (b->data[i]); +@@ -415,7 +478,11 @@ bstring out; + if (bconchar (out, c0) < 0 || + bconchar (out, c1) < 0 || + bconchar (out, c2) < 0) { +- bconchar (out, c0); ++ if (boolTruncError) { ++ *boolTruncError = -1; ++ return out; ++ } ++ bdestroy (out); + return NULL; + } + } +@@ -425,69 +492,230 @@ bstring out; + + struct bUuInOut { + bstring src, dst; ++ int * badlines; + }; + ++#define UU_MAX_LINELEN 45 ++ + static int bUuDecLine (void * parm, int ofs, int len) { + struct bUuInOut * io = (struct bUuInOut *) parm; + bstring s = io->src; + bstring t = io->dst; +-int i, llen; ++int i, llen, otlen, ret, c0, c1, c2, c3, d0, d1, d2, d3; + + if (len == 0) return 0; + llen = UU_DECODE_BYTE (s->data[ofs]); ++ ret = 0; + +- if (((unsigned) llen) > 45) return -__LINE__; +- if (len > (i = (int) ((4/3.0)*llen + 1.5))) len = i; ++ otlen = t->slen; + +- for (i=1; i < len; i += 4) { +- int c0, c1, c2, c3; ++ if (((unsigned) llen) > UU_MAX_LINELEN) { ret = -__LINE__; ++ goto bl; ++ } ++ ++ llen += t->slen; + +- c0 = UU_DECODE_BYTE (s->data[ofs + i + 0]); +- c1 = (i + 1 < len) ? UU_DECODE_BYTE (s->data[ofs + i + 1]) : -1; +- c2 = (i + 2 < len) ? UU_DECODE_BYTE (s->data[ofs + i + 2]) : -1; +- c3 = (i + 3 < len) ? UU_DECODE_BYTE (s->data[ofs + i + 3]) : -1; +- +- if (((unsigned) (c0|c1) >= 0x40) || c2 >= 0x40 || c3 >= 0x40) return -__LINE__; +- +- if (bconchar (t, (char)((c0 << 2) | ((c1 >> 4) & 0x03))) < 0) return -__LINE__; +- if ((unsigned) c2 < 0x40) { +- if (bconchar (t, (char)((c1 << 4) | ((c2 >> 2) & 0x0F))) < 0) return -__LINE__; +- if ((unsigned) c3 < 0x40) if (bconchar (t, (char)((c2 << 6) | (c3 & 0x3F))) < 0) return -__LINE__; ++ for (i=1; i < s->slen && t->slen < llen;i += 4) { ++ unsigned char outoctet[3]; ++ c0 = UU_DECODE_BYTE (d0 = (int) bchare (s, i+ofs+0, ' ' - 1)); ++ c1 = UU_DECODE_BYTE (d1 = (int) bchare (s, i+ofs+1, ' ' - 1)); ++ c2 = UU_DECODE_BYTE (d2 = (int) bchare (s, i+ofs+2, ' ' - 1)); ++ c3 = UU_DECODE_BYTE (d3 = (int) bchare (s, i+ofs+3, ' ' - 1)); ++ ++ if (((unsigned) (c0|c1) >= 0x40)) { if (!ret) ret = -__LINE__; ++ if (d0 > 0x60 || (d0 < (' ' - 1) && !isspace (d0)) || ++ d1 > 0x60 || (d1 < (' ' - 1) && !isspace (d1))) { ++ t->slen = otlen; ++ goto bl; ++ } ++ c0 = c1 = 0; ++ } ++ outoctet[0] = (unsigned char) ((c0 << 2) | ((unsigned) c1 >> 4)); ++ if (t->slen+1 >= llen) { ++ if (0 > bconchar (t, (char) outoctet[0])) return -__LINE__; ++ break; ++ } ++ if ((unsigned) c2 >= 0x40) { if (!ret) ret = -__LINE__; ++ if (d2 > 0x60 || (d2 < (' ' - 1) && !isspace (d2))) { ++ t->slen = otlen; ++ goto bl; ++ } ++ c2 = 0; ++ } ++ outoctet[1] = (unsigned char) ((c1 << 4) | ((unsigned) c2 >> 2)); ++ if (t->slen+2 >= llen) { ++ if (0 > bcatblk (t, outoctet, 2)) return -__LINE__; ++ break; + } ++ if ((unsigned) c3 >= 0x40) { if (!ret) ret = -__LINE__; ++ if (d3 > 0x60 || (d3 < (' ' - 1) && !isspace (d3))) { ++ t->slen = otlen; ++ goto bl; ++ } ++ c3 = 0; ++ } ++ outoctet[2] = (unsigned char) ((c2 << 6) | ((unsigned) c3)); ++ if (0 > bcatblk (t, outoctet, 3)) return -__LINE__; + } +- return 0; ++ if (t->slen < llen) { if (0 == ret) ret = -__LINE__; ++ t->slen = otlen; ++ } ++ bl:; ++ if (ret && io->badlines) { ++ (*io->badlines)++; ++ return 0; ++ } ++ return ret; + } + +-/* bstring bUuDecode (const bstring src) ++/* bstring bUuDecodeEx (const_bstring src, int * badlines) + * +- * Performs a UUDecode of a block of data. It is assumed that the "begin" +- * and "end" lines have already been stripped off. The potential security +- * problem of writing the filename in the begin line is something that is +- * beyond the scope of a portable library. ++ * Performs a UUDecode of a block of data. If there are errors in the ++ * decoding, they are counted up and returned in "badlines", if badlines is ++ * not NULL. It is assumed that the "begin" and "end" lines have already ++ * been stripped off. The potential security problem of writing the ++ * filename in the begin line is something that is beyond the scope of a ++ * portable library. + */ ++ + #ifdef _MSC_VER + #pragma warning(disable:4204) + #endif +-bstring bUuDecode (const bstring src) { +-struct tagbstring ws = bsStatic ("\r\n"); +-struct bUuInOut io; + +- if (src == NULL || src->slen < 0 || src->data == NULL) return NULL; +- io.src = src; +- io.dst = bfromcstr (""); +- if (bsplitscb (src, &ws, 0, bUuDecLine, &io) < 0) bstrFree (io.dst); +- return io.dst; ++bstring bUuDecodeEx (const_bstring src, int * badlines) { ++struct tagbstring t; ++struct bStream * s; ++struct bStream * d; ++bstring b; ++ ++ if (!src) return NULL; ++ t = *src; /* Short lifetime alias to header of src */ ++ s = bsFromBstrRef (&t); /* t is undefined after this */ ++ if (!s) return NULL; ++ d = bsUuDecode (s, badlines); ++ b = bfromcstralloc (256, ""); ++ if (NULL == b || 0 > bsread (b, d, INT_MAX)) { ++ bdestroy (b); ++ bsclose (d); ++ bsclose (s); ++ return NULL; ++ } ++ return b; ++} ++ ++struct bsUuCtx { ++ struct bUuInOut io; ++ struct bStream * sInp; ++}; ++ ++static size_t bsUuDecodePart (void *buff, size_t elsize, size_t nelem, void *parm) { ++static struct tagbstring eol = bsStatic ("\r\n"); ++struct bsUuCtx * luuCtx = (struct bsUuCtx *) parm; ++size_t tsz; ++int l, lret; ++ ++ if (NULL == buff || NULL == parm) return 0; ++ tsz = elsize * nelem; ++ ++ CheckInternalBuffer:; ++ /* If internal buffer has sufficient data, just output it */ ++ if (((size_t) luuCtx->io.dst->slen) > tsz) { ++ memcpy (buff, luuCtx->io.dst->data, tsz); ++ bdelete (luuCtx->io.dst, 0, (int) tsz); ++ return nelem; ++ } ++ ++ DecodeMore:; ++ if (0 <= (l = binchr (luuCtx->io.src, 0, &eol))) { ++ int ol = 0; ++ struct tagbstring t; ++ bstring s = luuCtx->io.src; ++ luuCtx->io.src = &t; ++ ++ do { ++ if (l > ol) { ++ bmid2tbstr (t, s, ol, l - ol); ++ lret = bUuDecLine (&luuCtx->io, 0, t.slen); ++ if (0 > lret) { ++ luuCtx->io.src = s; ++ goto Done; ++ } ++ } ++ ol = l + 1; ++ if (((size_t) luuCtx->io.dst->slen) > tsz) break; ++ l = binchr (s, ol, &eol); ++ } while (BSTR_ERR != l); ++ bdelete (s, 0, ol); ++ luuCtx->io.src = s; ++ goto CheckInternalBuffer; ++ } ++ ++ if (BSTR_ERR != bsreada (luuCtx->io.src, luuCtx->sInp, bsbufflength (luuCtx->sInp, BSTR_BS_BUFF_LENGTH_GET))) { ++ goto DecodeMore; ++ } ++ ++ bUuDecLine (&luuCtx->io, 0, luuCtx->io.src->slen); ++ ++ Done:; ++ /* Output any lingering data that has been translated */ ++ if (((size_t) luuCtx->io.dst->slen) > 0) { ++ if (((size_t) luuCtx->io.dst->slen) > tsz) goto CheckInternalBuffer; ++ memcpy (buff, luuCtx->io.dst->data, luuCtx->io.dst->slen); ++ tsz = luuCtx->io.dst->slen / elsize; ++ luuCtx->io.dst->slen = 0; ++ if (tsz > 0) return tsz; ++ } ++ ++ /* Deallocate once EOF becomes triggered */ ++ bdestroy (luuCtx->io.dst); ++ bdestroy (luuCtx->io.src); ++ free (luuCtx); ++ return 0; ++} ++ ++/* bStream * bsUuDecode (struct bStream * sInp, int * badlines) ++ * ++ * Creates a bStream which performs the UUDecode of an an input stream. If ++ * there are errors in the decoding, they are counted up and returned in ++ * "badlines", if badlines is not NULL. It is assumed that the "begin" and ++ * "end" lines have already been stripped off. The potential security ++ * problem of writing the filename in the begin line is something that is ++ * beyond the scope of a portable library. ++ */ ++ ++struct bStream * bsUuDecode (struct bStream * sInp, int * badlines) { ++struct bsUuCtx * luuCtx = (struct bsUuCtx *) malloc (sizeof (struct bsUuCtx)); ++struct bStream * sOut; ++ ++ if (NULL == luuCtx) return NULL; ++ ++ luuCtx->io.src = bfromcstr (""); ++ luuCtx->io.dst = bfromcstr (""); ++ if (NULL == luuCtx->io.dst || NULL == luuCtx->io.src) { ++ CleanUpFailureToAllocate:; ++ bdestroy (luuCtx->io.dst); ++ bdestroy (luuCtx->io.src); ++ free (luuCtx); ++ return NULL; ++ } ++ luuCtx->io.badlines = badlines; ++ if (badlines) *badlines = 0; ++ ++ luuCtx->sInp = sInp; ++ ++ sOut = bsopen ((bNread) bsUuDecodePart, luuCtx); ++ if (NULL == sOut) goto CleanUpFailureToAllocate; ++ return sOut; + } + +-#define UU_MAX_LINELEN 45 + #define UU_ENCODE_BYTE(b) (char) (((b) == 0) ? '`' : ((b) + ' ')) + +-/* bstring bUuEncode (const bstring src) ++/* bstring bUuEncode (const_bstring src) + * + * Performs a UUEncode of a block of data. The "begin" and "end" lines are + * not appended. + */ +-bstring bUuEncode (const bstring src) { ++bstring bUuEncode (const_bstring src) { + bstring out; + int i, j, jm; + unsigned int c0, c1, c2; +@@ -500,18 +728,18 @@ unsigned int c0, c1, c2; + break; + } + for (j = i; j < jm; j += 3) { +- c0 = bchar (src, j ); +- c1 = bchar (src, j + 1); +- c2 = bchar (src, j + 2); ++ c0 = (unsigned int) bchar (src, j ); ++ c1 = (unsigned int) bchar (src, j + 1); ++ c2 = (unsigned int) bchar (src, j + 2); + if (bconchar (out, UU_ENCODE_BYTE ( (c0 & 0xFC) >> 2)) < 0 || +- bconchar (out, UU_ENCODE_BYTE (((c0 & 0x03) << 4) | ((c1 & 0xF0) >> 4))) < 0 || +- bconchar (out, UU_ENCODE_BYTE (((c1 & 0x0F) << 2) | ((c2 & 0xC0) >> 6))) < 0 || +- bconchar (out, UU_ENCODE_BYTE ( (c2 & 0x3F))) < 0) { +- bstrFree (out); +- goto End; +- } ++ bconchar (out, UU_ENCODE_BYTE (((c0 & 0x03) << 4) | ((c1 & 0xF0) >> 4))) < 0 || ++ bconchar (out, UU_ENCODE_BYTE (((c1 & 0x0F) << 2) | ((c2 & 0xC0) >> 6))) < 0 || ++ bconchar (out, UU_ENCODE_BYTE ( (c2 & 0x3F))) < 0) { ++ bstrFree (out); ++ goto End; ++ } + } +- if (bconchar (out, '\r') < 0 || bconchar (out, '\n') < 0) { ++ if (bconchar (out, (char) '\r') < 0 || bconchar (out, (char) '\n') < 0) { + bstrFree (out); + break; + } +@@ -520,13 +748,13 @@ unsigned int c0, c1, c2; + return out; + } + +-/* bstring bYEncode (const bstring src) ++/* bstring bYEncode (const_bstring src) + * + * Performs a YEncode of a block of data. No header or tail info is + * appended. See: http://www.yenc.org/whatis.htm and + * http://www.yenc.org/yenc-draft.1.3.txt + */ +-bstring bYEncode (const bstring src) { ++bstring bYEncode (const_bstring src) { + int i; + bstring out; + unsigned char c; +@@ -536,7 +764,7 @@ unsigned char c; + for (i=0; i < src->slen; i++) { + c = (unsigned char)(src->data[i] + 42); + if (c == '=' || c == '\0' || c == '\r' || c == '\n') { +- if (0 > bconchar (out, '=')) { ++ if (0 > bconchar (out, (char) '=')) { + bdestroy (out); + return NULL; + } +@@ -550,21 +778,27 @@ unsigned char c; + return out; + } + +-/* bstring bYDecode (const bstring src) ++/* bstring bYDecode (const_bstring src) + * + * Performs a YDecode of a block of data. See: + * http://www.yenc.org/whatis.htm and http://www.yenc.org/yenc-draft.1.3.txt + */ +-bstring bYDecode (const bstring src) { ++#define MAX_OB_LEN (64) ++ ++bstring bYDecode (const_bstring src) { + int i; + bstring out; + unsigned char c; ++unsigned char octetbuff[MAX_OB_LEN]; ++int obl; + + if (src == NULL || src->slen < 0 || src->data == NULL) return NULL; + if ((out = bfromcstr ("")) == NULL) return NULL; ++ ++ obl = 0; ++ + for (i=0; i < src->slen; i++) { +- c = src->data[i]; +- if (c == '=') { ++ if ('=' == (c = src->data[i])) { /* The = escape mode */ + i++; + if (i >= src->slen) { + bdestroy (out); +@@ -572,7 +806,7 @@ unsigned char c; + } + c = (unsigned char) (src->data[i] - 64); + } else { +- if (c == '\0') { ++ if ('\0' == c) { + bdestroy (out); + return NULL; + } +@@ -580,11 +814,320 @@ unsigned char c; + /* Extraneous CR/LFs are to be ignored. */ + if (c == '\r' || c == '\n') continue; + } +- if (0 > bconchar (out, (char)(c - (unsigned char) 42))) { +- bdestroy (out); +- return NULL; ++ ++ octetbuff[obl] = (unsigned char) ((int) c - 42); ++ obl++; ++ ++ if (obl >= MAX_OB_LEN) { ++ if (0 > bcatblk (out, octetbuff, obl)) { ++ bdestroy (out); ++ return NULL; ++ } ++ obl = 0; + } + } ++ ++ if (0 > bcatblk (out, octetbuff, obl)) { ++ bdestroy (out); ++ out = NULL; ++ } + return out; + } + ++/* bstring bStrfTime (const char * fmt, const struct tm * timeptr) ++ * ++ * Takes a format string that is compatible with strftime and a struct tm ++ * pointer, formats the time according to the format string and outputs ++ * the bstring as a result. Note that if there is an early generation of a ++ * '\0' character, the bstring will be truncated to this end point. ++ */ ++bstring bStrfTime (const char * fmt, const struct tm * timeptr) { ++#if defined (__TURBOC__) && !defined (__BORLANDC__) ++static struct tagbstring ns = bsStatic ("bStrfTime Not supported"); ++ fmt = fmt; ++ timeptr = timeptr; ++ return &ns; ++#else ++bstring buff; ++int n; ++size_t r; ++ ++ if (fmt == NULL) return NULL; ++ ++ /* Since the length is not determinable beforehand, a search is ++ performed using the truncating "strftime" call on increasing ++ potential sizes for the output result. */ ++ ++ if ((n = (int) (2*strlen (fmt))) < 16) n = 16; ++ buff = bfromcstralloc (n+2, ""); ++ ++ for (;;) { ++ if (BSTR_OK != balloc (buff, n + 2)) { ++ bdestroy (buff); ++ return NULL; ++ } ++ ++ r = strftime ((char *) buff->data, n + 1, fmt, timeptr); ++ ++ if (r > 0) { ++ buff->slen = (int) r; ++ break; ++ } ++ ++ n += n; ++ } ++ ++ return buff; ++#endif ++} ++ ++/* int bSetCstrChar (bstring a, int pos, char c) ++ * ++ * Sets the character at position pos to the character c in the bstring a. ++ * If the character c is NUL ('\0') then the string is truncated at this ++ * point. Note: this does not enable any other '\0' character in the bstring ++ * as terminator indicator for the string. pos must be in the position ++ * between 0 and b->slen inclusive, otherwise BSTR_ERR will be returned. ++ */ ++int bSetCstrChar (bstring b, int pos, char c) { ++ if (NULL == b || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen) ++ return BSTR_ERR; ++ if (pos < 0 || pos > b->slen) return BSTR_ERR; ++ ++ if (pos == b->slen) { ++ if ('\0' != c) return bconchar (b, c); ++ return 0; ++ } ++ ++ b->data[pos] = (unsigned char) c; ++ if ('\0' == c) b->slen = pos; ++ ++ return 0; ++} ++ ++/* int bSetChar (bstring b, int pos, char c) ++ * ++ * Sets the character at position pos to the character c in the bstring a. ++ * The string is not truncated if the character c is NUL ('\0'). pos must ++ * be in the position between 0 and b->slen inclusive, otherwise BSTR_ERR ++ * will be returned. ++ */ ++int bSetChar (bstring b, int pos, char c) { ++ if (NULL == b || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen) ++ return BSTR_ERR; ++ if (pos < 0 || pos > b->slen) return BSTR_ERR; ++ ++ if (pos == b->slen) { ++ return bconchar (b, c); ++ } ++ ++ b->data[pos] = (unsigned char) c; ++ return 0; ++} ++ ++#define INIT_SECURE_INPUT_LENGTH (256) ++ ++/* bstring bSecureInput (int maxlen, int termchar, ++ * bNgetc vgetchar, void * vgcCtx) ++ * ++ * Read input from an abstracted input interface, for a length of at most ++ * maxlen characters. If maxlen <= 0, then there is no length limit put ++ * on the input. The result is terminated early if vgetchar() return EOF ++ * or the user specified value termchar. ++ * ++ */ ++bstring bSecureInput (int maxlen, int termchar, bNgetc vgetchar, void * vgcCtx) { ++int i, m, c; ++bstring b, t; ++ ++ if (!vgetchar) return NULL; ++ ++ b = bfromcstralloc (INIT_SECURE_INPUT_LENGTH, ""); ++ if ((c = UCHAR_MAX + 1) == termchar) c++; ++ ++ for (i=0; ; i++) { ++ if (termchar == c || (maxlen > 0 && i >= maxlen)) c = EOF; ++ else c = vgetchar (vgcCtx); ++ ++ if (EOF == c) break; ++ ++ if (i+1 >= b->mlen) { ++ ++ /* Double size, but deal with unusual case of numeric ++ overflows */ ++ ++ if ((m = b->mlen << 1) <= b->mlen && ++ (m = b->mlen + 1024) <= b->mlen && ++ (m = b->mlen + 16) <= b->mlen && ++ (m = b->mlen + 1) <= b->mlen) t = NULL; ++ else t = bfromcstralloc (m, ""); ++ ++ if (t) memcpy (t->data, b->data, i); ++ bSecureDestroy (b); /* Cleanse previous buffer */ ++ b = t; ++ if (!b) return b; ++ } ++ ++ b->data[i] = (unsigned char) c; ++ } ++ ++ b->slen = i; ++ b->data[i] = (unsigned char) '\0'; ++ return b; ++} ++ ++#define BWS_BUFF_SZ (1024) ++ ++struct bwriteStream { ++ bstring buff; /* Buffer for underwrites */ ++ void * parm; /* The stream handle for core stream */ ++ bNwrite writeFn; /* fwrite work-a-like fnptr for core stream */ ++ int isEOF; /* track stream's EOF state */ ++ int minBuffSz; ++}; ++ ++/* struct bwriteStream * bwsOpen (bNwrite writeFn, void * parm) ++ * ++ * Wrap a given open stream (described by a fwrite work-a-like function ++ * pointer and stream handle) into an open bwriteStream suitable for write ++ * streaming functions. ++ */ ++struct bwriteStream * bwsOpen (bNwrite writeFn, void * parm) { ++struct bwriteStream * ws; ++ ++ if (NULL == writeFn) return NULL; ++ ws = (struct bwriteStream *) malloc (sizeof (struct bwriteStream)); ++ if (ws) { ++ if (NULL == (ws->buff = bfromcstr (""))) { ++ free (ws); ++ ws = NULL; ++ } else { ++ ws->parm = parm; ++ ws->writeFn = writeFn; ++ ws->isEOF = 0; ++ ws->minBuffSz = BWS_BUFF_SZ; ++ } ++ } ++ return ws; ++} ++ ++#define internal_bwswriteout(ws,b) { \ ++ if ((b)->slen > 0) { \ ++ if (1 != (ws->writeFn ((b)->data, (b)->slen, 1, ws->parm))) { \ ++ ws->isEOF = 1; \ ++ return BSTR_ERR; \ ++ } \ ++ } \ ++} ++ ++/* int bwsWriteFlush (struct bwriteStream * ws) ++ * ++ * Force any pending data to be written to the core stream. ++ */ ++int bwsWriteFlush (struct bwriteStream * ws) { ++ if (NULL == ws || ws->isEOF || 0 >= ws->minBuffSz || ++ NULL == ws->writeFn || NULL == ws->buff) return BSTR_ERR; ++ internal_bwswriteout (ws, ws->buff); ++ ws->buff->slen = 0; ++ return 0; ++} ++ ++/* int bwsWriteBstr (struct bwriteStream * ws, const_bstring b) ++ * ++ * Send a bstring to a bwriteStream. If the stream is at EOF BSTR_ERR is ++ * returned. Note that there is no deterministic way to determine the exact ++ * cut off point where the core stream stopped accepting data. ++ */ ++int bwsWriteBstr (struct bwriteStream * ws, const_bstring b) { ++struct tagbstring t; ++int l; ++ ++ if (NULL == ws || NULL == b || NULL == ws->buff || ++ ws->isEOF || 0 >= ws->minBuffSz || NULL == ws->writeFn) ++ return BSTR_ERR; ++ ++ /* Buffer prepacking optimization */ ++ if (b->slen > 0 && ws->buff->mlen - ws->buff->slen > b->slen) { ++ static struct tagbstring empty = bsStatic (""); ++ if (0 > bconcat (ws->buff, b)) return BSTR_ERR; ++ return bwsWriteBstr (ws, &empty); ++ } ++ ++ if (0 > (l = ws->minBuffSz - ws->buff->slen)) { ++ internal_bwswriteout (ws, ws->buff); ++ ws->buff->slen = 0; ++ l = ws->minBuffSz; ++ } ++ ++ if (b->slen < l) return bconcat (ws->buff, b); ++ ++ if (0 > bcatblk (ws->buff, b->data, l)) return BSTR_ERR; ++ internal_bwswriteout (ws, ws->buff); ++ ws->buff->slen = 0; ++ ++ bmid2tbstr (t, (bstring) b, l, b->slen); ++ ++ if (t.slen >= ws->minBuffSz) { ++ internal_bwswriteout (ws, &t); ++ return 0; ++ } ++ ++ return bassign (ws->buff, &t); ++} ++ ++/* int bwsWriteBlk (struct bwriteStream * ws, void * blk, int len) ++ * ++ * Send a block of data a bwriteStream. If the stream is at EOF BSTR_ERR is ++ * returned. ++ */ ++int bwsWriteBlk (struct bwriteStream * ws, void * blk, int len) { ++struct tagbstring t; ++ if (NULL == blk || len < 0) return BSTR_ERR; ++ blk2tbstr (t, blk, len); ++ return bwsWriteBstr (ws, &t); ++} ++ ++/* int bwsIsEOF (const struct bwriteStream * ws) ++ * ++ * Returns 0 if the stream is currently writable, 1 if the core stream has ++ * responded by not accepting the previous attempted write. ++ */ ++int bwsIsEOF (const struct bwriteStream * ws) { ++ if (NULL == ws || NULL == ws->buff || 0 > ws->minBuffSz || ++ NULL == ws->writeFn) return BSTR_ERR; ++ return ws->isEOF; ++} ++ ++/* int bwsBuffLength (struct bwriteStream * ws, int sz) ++ * ++ * Set the length of the buffer used by the bwsStream. If sz is zero, the ++ * length is not set. This function returns with the previous length. ++ */ ++int bwsBuffLength (struct bwriteStream * ws, int sz) { ++int oldSz; ++ if (ws == NULL || sz < 0) return BSTR_ERR; ++ oldSz = ws->minBuffSz; ++ if (sz > 0) ws->minBuffSz = sz; ++ return oldSz; ++} ++ ++/* void * bwsClose (struct bwriteStream * s) ++ * ++ * Close the bwriteStream, and return the handle to the stream that was ++ * originally used to open the given stream. Note that even if the stream ++ * is at EOF it still needs to be closed with a call to bwsClose. ++ */ ++void * bwsClose (struct bwriteStream * ws) { ++void * parm; ++ if (NULL == ws || NULL == ws->buff || 0 >= ws->minBuffSz || ++ NULL == ws->writeFn) return NULL; ++ bwsWriteFlush (ws); ++ parm = ws->parm; ++ ws->parm = NULL; ++ ws->minBuffSz = -1; ++ ws->writeFn = NULL; ++ bstrFree (ws->buff); ++ free (ws); ++ return parm; ++} ++ +diff -urp pads-1.2.orig/lib/bstring/bstraux.h pads-1.2/lib/bstring/bstraux.h +--- pads-1.2.orig/lib/bstring/bstraux.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/lib/bstring/bstraux.h 2008-07-10 18:09:21.000000000 -0400 +@@ -1,14 +1,14 @@ + /* + * This source file is part of the bstring string library. This code was +- * written by Paul Hsieh in 2002-2004, and is covered by the BSD open source +- * license. Refer to the accompanying documentation for details on usage and +- * license. ++ * written by Paul Hsieh in 2002-2008, and is covered by the BSD open source ++ * license and the GPL. Refer to the accompanying documentation for details ++ * on usage and license. + */ + + /* + * bstraux.h + * +- * This file is not necessarily part of the core bstring library itself, but ++ * This file is not a necessary part of the core bstring library itself, but + * is just an auxilliary module which includes miscellaneous or trivial + * functions. + */ +@@ -16,37 +16,47 @@ + #ifndef BSTRAUX_INCLUDE + #define BSTRAUX_INCLUDE + ++#include + #include "bstrlib.h" + + #ifdef __cplusplus + extern "C" { + #endif + ++/* Safety mechanisms */ + #define bstrDeclare(b) bstring (b) = NULL; + #define bstrFree(b) {if ((b) != NULL && (b)->slen >= 0 && (b)->mlen >= (b)->slen) { bdestroy (b); (b) = NULL; }} + +-/* Backward compatibilty with previous version of Bstrlib */ ++/* Backward compatibilty with previous versions of Bstrlib */ + #define bAssign(a,b) ((bassign)((a), (b))) + #define bSubs(b,pos,len,a,c) ((breplace)((b),(pos),(len),(a),(unsigned char)(c))) +-#define bStrchr(b,c) ((bstrchr)((b),(c))) +-#define bStrchrFast(b,c) ((bstrchr)((b),(c))) ++#define bStrchr(b,c) ((bstrchr)((b), (c))) ++#define bStrchrFast(b,c) ((bstrchr)((b), (c))) + #define bCatCstr(b,s) ((bcatcstr)((b), (s))) + #define bCatBlk(b,s,len) ((bcatblk)((b),(s),(len))) +-#define bCatStatic(b,s) bCatBlk ((b), (s), sizeof (s) - 1) ++#define bCatStatic(b,s) bCatBlk ((b), ("" s ""), sizeof (s) - 1) ++#define bTrunc(b,n) ((btrunc)((b), (n))) + #define bReplaceAll(b,find,repl,pos) ((bfindreplace)((b),(find),(repl),(pos))) + #define bUppercase(b) ((btoupper)(b)) + #define bLowercase(b) ((btolower)(b)) +-#define bCaselessCmp(a,b) ((bstricmp)(a,b)) +-#define bCaselessNCmp(a,b,n) ((bstrnicmp)(a,b,n)) ++#define bCaselessCmp(a,b) ((bstricmp)((a), (b))) ++#define bCaselessNCmp(a,b,n) ((bstrnicmp)((a), (b), (n))) ++#define bBase64Decode(b) (bBase64DecodeEx ((b), NULL)) ++#define bUuDecode(b) (bUuDecodeEx ((b), NULL)) + + /* Unusual functions */ +-extern int bTrunc (bstring b, int n); ++extern struct bStream * bsFromBstr (const_bstring b); + extern bstring bTail (bstring b, int n); + extern bstring bHead (bstring b, int n); ++extern int bSetCstrChar (bstring a, int pos, char c); ++extern int bSetChar (bstring b, int pos, char c); + extern int bFill (bstring a, char c, int len); + extern int bReplicate (bstring b, int n); + extern int bReverse (bstring b); + extern int bInsertChrs (bstring b, int pos, int len, unsigned char c, unsigned char fill); ++extern bstring bStrfTime (const char * fmt, const struct tm * timeptr); ++#define bAscTime(t) (bStrfTime ("%c\n", (t))) ++#define bCTime(t) ((t) ? bAscTime (localtime (t)) : NULL) + + /* Spacing formatting */ + extern int bJustifyLeft (bstring b, int space); +@@ -55,14 +65,45 @@ extern int bJustifyMargin (bstring b, in + extern int bJustifyCenter (bstring b, int width, int space); + + /* Esoteric standards specific functions */ +-extern char * bStr2NetStr (const bstring b); ++extern char * bStr2NetStr (const_bstring b); + extern bstring bNetStr2Bstr (const char * buf); +-extern bstring bBase64Encode (const bstring b); +-extern bstring bBase64Decode (const bstring b); +-extern bstring bUuDecode (const bstring src); +-extern bstring bUuEncode (const bstring src); +-extern bstring bYEncode (const bstring src); +-extern bstring bYDecode (const bstring src); ++extern bstring bBase64Encode (const_bstring b); ++extern bstring bBase64DecodeEx (const_bstring b, int * boolTruncError); ++extern struct bStream * bsUuDecode (struct bStream * sInp, int * badlines); ++extern bstring bUuDecodeEx (const_bstring src, int * badlines); ++extern bstring bUuEncode (const_bstring src); ++extern bstring bYEncode (const_bstring src); ++extern bstring bYDecode (const_bstring src); ++ ++/* Writable stream */ ++typedef int (* bNwrite) (const void * buf, size_t elsize, size_t nelem, void * parm); ++ ++struct bwriteStream * bwsOpen (bNwrite writeFn, void * parm); ++int bwsWriteBstr (struct bwriteStream * stream, const_bstring b); ++int bwsWriteBlk (struct bwriteStream * stream, void * blk, int len); ++int bwsWriteFlush (struct bwriteStream * stream); ++int bwsIsEOF (const struct bwriteStream * stream); ++int bwsBuffLength (struct bwriteStream * stream, int sz); ++void * bwsClose (struct bwriteStream * stream); ++ ++/* Security functions */ ++#define bSecureDestroy(b) { \ ++bstring bstr__tmp = (b); \ ++ if (bstr__tmp && bstr__tmp->mlen > 0 && bstr__tmp->data) { \ ++ (void) memset (bstr__tmp->data, 0, (size_t) bstr__tmp->mlen); \ ++ bdestroy (bstr__tmp); \ ++ } \ ++} ++#define bSecureWriteProtect(t) { \ ++ if ((t).mlen >= 0) { \ ++ if ((t).mlen > (t).slen)) { \ ++ (void) memset ((t).data + (t).slen, 0, (size_t) (t).mlen - (t).slen); \ ++ } \ ++ (t).mlen = -1; \ ++ } \ ++} ++extern bstring bSecureInput (int maxlen, int termchar, ++ bNgetc vgetchar, void * vgcCtx); + + #ifdef __cplusplus + } +diff -urp pads-1.2.orig/lib/bstring/bstrlib.c pads-1.2/lib/bstring/bstrlib.c +--- pads-1.2.orig/lib/bstring/bstrlib.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/lib/bstring/bstrlib.c 2008-07-10 18:09:06.000000000 -0400 +@@ -1,8 +1,8 @@ + /* + * This source file is part of the bstring string library. This code was +- * written by Paul Hsieh in 2002-2004, and is covered by the BSD open source +- * license. Refer to the accompanying documentation for details on usage and +- * license. ++ * written by Paul Hsieh in 2002-2008, and is covered by the BSD open source ++ * license and the GPL. Refer to the accompanying documentation for details ++ * on usage and license. + */ + + /* +@@ -12,6 +12,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -24,9 +25,41 @@ + #include "memdbg.h" + #endif + ++#ifndef bstr__alloc ++#define bstr__alloc(x) malloc (x) ++#endif ++ ++#ifndef bstr__free ++#define bstr__free(p) free (p) ++#endif ++ ++#ifndef bstr__realloc ++#define bstr__realloc(p,x) realloc ((p), (x)) ++#endif ++ ++#ifndef bstr__memcpy ++#define bstr__memcpy(d,s,l) memcpy ((d), (s), (l)) ++#endif ++ ++#ifndef bstr__memmove ++#define bstr__memmove(d,s,l) memmove ((d), (s), (l)) ++#endif ++ ++#ifndef bstr__memset ++#define bstr__memset(d,c,l) memset ((d), (c), (l)) ++#endif ++ ++#ifndef bstr__memcmp ++#define bstr__memcmp(d,c,l) memcmp ((d), (c), (l)) ++#endif ++ ++#ifndef bstr__memchr ++#define bstr__memchr(s,c,l) memchr ((s), (c), (l)) ++#endif ++ + /* Just a length safe wrapper for memmove. */ + +-#define bBlockCopy(D,S,L) { if ((L) > 0) memmove ((D),(S),(L)); } ++#define bBlockCopy(D,S,L) { if ((L) > 0) bstr__memmove ((D),(S),(L)); } + + /* Compute the snapped size for a given requested size. By snapping to powers + of 2 like this, repeated reallocations are avoided. */ +@@ -35,16 +68,21 @@ static int snapUpSize (int i) { + i = 8; + } else { + unsigned int j; +- j = i; ++ j = (unsigned int) i; + +- /* Assumes your system is at least 32 bits, and your string is +- at most 4GB is size. */ + j |= (j >> 1); + j |= (j >> 2); + j |= (j >> 4); +- j |= (j >> 8); +- j |= (j >> 16); +- i = j + 1; /* Least power of two greater than i */ ++ j |= (j >> 8); /* Ok, since int >= 16 bits */ ++#if (UINT_MAX != 0xffff) ++ j |= (j >> 16); /* For 32 bit int systems */ ++#if (UINT_MAX > 0xffffffffUL) ++ j |= (j >> 32); /* For 64 bit int systems */ ++#endif ++#endif ++ /* Least power of two greater than i */ ++ j++; ++ if ((int) j >= i) i = (int) j; + } + return i; + } +@@ -53,16 +91,17 @@ static int snapUpSize (int i) { + * + * Increase the size of the memory backing the bstring b to at least len. + */ +-int balloc (bstring b, int len) { +- if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < 0 || +- b->mlen < b->slen || len <= 0) { ++int balloc (bstring b, int olen) { ++ int len; ++ if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen <= 0 || ++ b->mlen < b->slen || olen <= 0) { + return BSTR_ERR; + } + +- if (len >= b->mlen) { ++ if (olen >= b->mlen) { + unsigned char * x; + +- len = snapUpSize (len); ++ if ((len = snapUpSize (olen)) <= b->mlen) return BSTR_OK; + + /* Assume probability of a non-moving realloc is 0.125 */ + if (7 * b->mlen < 8 * b->slen) { +@@ -70,26 +109,66 @@ int balloc (bstring b, int len) { + /* If slen is close to mlen in size then use realloc to reduce + the memory defragmentation */ + +- x = (unsigned char *) realloc (b->data, len); +- if (x == NULL) return BSTR_ERR; ++ reallocStrategy:; ++ ++ x = (unsigned char *) bstr__realloc (b->data, (size_t) len); ++ if (x == NULL) { ++ ++ /* Since we failed, try allocating the tighest possible ++ allocation */ ++ ++ if (NULL == (x = (unsigned char *) bstr__realloc (b->data, (size_t) (len = olen)))) { ++ return BSTR_ERR; ++ } ++ } + } else { + + /* If slen is not close to mlen then avoid the penalty of copying + the extra bytes that are allocated, but not considered part of + the string */ + +- x = (unsigned char *) malloc (len); +- if (x == NULL) { +- x = (unsigned char *) realloc (b->data, len); +- if (x == NULL) return BSTR_ERR; ++ if (NULL == (x = (unsigned char *) bstr__alloc ((size_t) len))) { ++ ++ /* Perhaps there is no available memory for the two ++ allocations to be in memory at once */ ++ ++ goto reallocStrategy; ++ + } else { +- if (b->slen) memcpy ((char *) x, (char *) b->data, b->slen); +- free (b->data); ++ if (b->slen) bstr__memcpy ((char *) x, (char *) b->data, (size_t) b->slen); ++ bstr__free (b->data); + } + } + b->data = x; + b->mlen = len; +- b->data[b->slen] = '\0'; ++ b->data[b->slen] = (unsigned char) '\0'; ++ } ++ ++ return BSTR_OK; ++} ++ ++/* int ballocmin (bstring b, int len) ++ * ++ * Set the size of the memory backing the bstring b to len or b->slen+1, ++ * whichever is larger. Note that repeated use of this function can degrade ++ * performance. ++ */ ++int ballocmin (bstring b, int len) { ++ unsigned char * s; ++ ++ if (b == NULL || b->data == NULL || (b->slen+1) < 0 || b->mlen <= 0 || ++ b->mlen < b->slen || len <= 0) { ++ return BSTR_ERR; ++ } ++ ++ if (len < b->slen + 1) len = b->slen + 1; ++ ++ if (len != b->mlen) { ++ s = (unsigned char *) bstr__realloc (b->data, (size_t) len); ++ if (NULL == s) return BSTR_ERR; ++ s[b->slen] = (unsigned char) '\0'; ++ b->data = s; ++ b->mlen = len; + } + + return BSTR_OK; +@@ -97,31 +176,58 @@ int balloc (bstring b, int len) { + + /* bstring bfromcstr (const char * str) + * +- * Create a bstring which contains the content of the '\0' terminated char * ++ * Create a bstring which contains the contents of the '\0' terminated char * + * buffer str. + */ + bstring bfromcstr (const char * str) { + bstring b; +-int i,j; ++int i; ++size_t j; + + if (str == NULL) return NULL; +- b = (bstring) malloc (sizeof (struct tagbstring)); +- if (b == NULL) return NULL; +- j = (int) (strlen) (str); +- b->slen = j; ++ j = (strlen) (str); ++ i = snapUpSize ((int) (j + (2 - (j != 0)))); ++ if (i <= (int) j) return NULL; ++ ++ b = (bstring) bstr__alloc (sizeof (struct tagbstring)); ++ if (NULL == b) return NULL; ++ b->slen = (int) j; ++ if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { ++ bstr__free (b); ++ return NULL; ++ } + +- i = j + (2 - (j != 0)); +- i = snapUpSize (i); ++ bstr__memcpy (b->data, str, j+1); ++ return b; ++} + +- b->mlen = i; ++/* bstring bfromcstralloc (int mlen, const char * str) ++ * ++ * Create a bstring which contains the contents of the '\0' terminated char * ++ * buffer str. The memory buffer backing the string is at least len ++ * characters in length. ++ */ ++bstring bfromcstralloc (int mlen, const char * str) { ++bstring b; ++int i; ++size_t j; + +- b->data = (unsigned char *) malloc (b->mlen); +- if (b->data == NULL) { +- free (b); ++ if (str == NULL) return NULL; ++ j = (strlen) (str); ++ i = snapUpSize ((int) (j + (2 - (j != 0)))); ++ if (i <= (int) j) return NULL; ++ ++ b = (bstring) bstr__alloc (sizeof (struct tagbstring)); ++ if (b == NULL) return NULL; ++ b->slen = (int) j; ++ if (i < mlen) i = mlen; ++ ++ if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { ++ bstr__free (b); + return NULL; + } + +- memcpy (b->data, str, j+1); ++ bstr__memcpy (b->data, str, j+1); + return b; + } + +@@ -135,7 +241,7 @@ bstring b; + int i; + + if (blk == NULL || len < 0) return NULL; +- b = (bstring) malloc (sizeof (struct tagbstring)); ++ b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b == NULL) return NULL; + b->slen = len; + +@@ -144,81 +250,96 @@ int i; + + b->mlen = i; + +- b->data = (unsigned char *) malloc (b->mlen) ; ++ b->data = (unsigned char *) bstr__alloc ((size_t) b->mlen); + if (b->data == NULL) { +- free (b); ++ bstr__free (b); + return NULL; + } + +- if (len > 0) memcpy (b->data, blk, len); +- b->data[len] = '\0'; ++ if (len > 0) bstr__memcpy (b->data, blk, (size_t) len); ++ b->data[len] = (unsigned char) '\0'; + + return b; + } + +-/* char * bstr2cstr (const bstring s, char z) ++/* char * bstr2cstr (const_bstring s, char z) + * + * Create a '\0' terminated char * buffer which is equal to the contents of +- * the bstring s, except that any contained '\0' characters are converted to +- * the character in z. This returned value should be freed with a free() +- * call, by the calling application. ++ * the bstring s, except that any contained '\0' characters are converted ++ * to the character in z. This returned value should be freed with a ++ * bcstrfree () call, by the calling application. + */ +-char * bstr2cstr (const bstring b, char z) { +-int i,l; ++char * bstr2cstr (const_bstring b, char z) { ++int i, l; + char * r; + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + l = b->slen; +- r = (char *) malloc (l + 1); ++ r = (char *) bstr__alloc ((size_t) (l + 1)); + if (r == NULL) return r; + + for (i=0; i < l; i ++) { + r[i] = (char) ((b->data[i] == '\0') ? z : (char) (b->data[i])); + } + +- r[l] = '\0'; ++ r[l] = (unsigned char) '\0'; + + return r; + } + +-/* int bcstrfree (const char * s) ++/* int bcstrfree (char * s) + * + * Frees a C-string generated by bstr2cstr (). This is normally unnecessary +- * since it just wraps a call to free (), however, if malloc () and free () +- * have been redefined as a macros within the bstrlib module (via defining +- * them in memdbg.h after defining BSTRLIB_MEMORY_DEBUG) with some +- * difference in behaviour from the std library functions, then this allows +- * a correct way of freeing the memory that allows higher level code to be +- * independent from these macro redefinitions. ++ * since it just wraps a call to bstr__free (), however, if bstr__alloc () ++ * and bstr__free () have been redefined as a macros within the bstrlib ++ * module (via defining them in memdbg.h after defining ++ * BSTRLIB_MEMORY_DEBUG) with some difference in behaviour from the std ++ * library functions, then this allows a correct way of freeing the memory ++ * that allows higher level code to be independent from these macro ++ * redefinitions. + */ + int bcstrfree (char * s) { + if (s) { +- free (s); ++ bstr__free (s); + return BSTR_OK; + } + return BSTR_ERR; + } + +-/* int bconcat (bstring b0, const bstring b1) ++/* int bconcat (bstring b0, const_bstring b1) + * + * Concatenate the bstring b1 to the bstring b0. + */ +-int bconcat (bstring b0, const bstring b1) { ++int bconcat (bstring b0, const_bstring b1) { + int len, d; ++bstring aux = (bstring) b1; ++ ++ if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL) return BSTR_ERR; + +- if (b0 == NULL || b1 == NULL) return BSTR_ERR; + d = b0->slen; + len = b1->slen; +- if ((d | (b0->mlen - d) | len) < 0) return BSTR_ERR; +- if (balloc (b0, d + len + 1) != BSTR_OK) return BSTR_ERR; +- bBlockCopy (&b0->data[d], &b1->data[0], len); +- b0->data[d + len] = '\0'; +- b0->slen += len; +- return 0; ++ if ((d | (b0->mlen - d) | len | (d + len)) < 0) return BSTR_ERR; ++ ++ if (b0->mlen <= d + len + 1) { ++ ptrdiff_t pd = b1->data - b0->data; ++ if (0 <= pd && pd < b0->mlen) { ++ if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; ++ } ++ if (balloc (b0, d + len + 1) != BSTR_OK) { ++ if (aux != b1) bdestroy (aux); ++ return BSTR_ERR; ++ } ++ } ++ ++ bBlockCopy (&b0->data[d], &aux->data[0], (size_t) len); ++ b0->data[d + len] = (unsigned char) '\0'; ++ b0->slen = d + len; ++ if (aux != b1) bdestroy (aux); ++ return BSTR_OK; + } + + /* int bconchar (bstring b, char c) +- * ++/ * + * Concatenate the single character c to the bstring b. + */ + int bconchar (bstring b, char c) { +@@ -228,9 +349,9 @@ int d; + d = b->slen; + if ((d | (b->mlen - d)) < 0 || balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + b->data[d] = (unsigned char) c; +- b->data[d + 1] = '\0'; ++ b->data[d + 1] = (unsigned char) '\0'; + b->slen++; +- return 0; ++ return BSTR_OK; + } + + /* int bcatcstr (bstring b, const char * s) +@@ -238,11 +359,11 @@ int d; + * Concatenate a char * string to a bstring. + */ + int bcatcstr (bstring b, const char * s) { +-struct tagbstring t; + char * d; + int i, l; + +- if (b == NULL || b->data == NULL || b->slen < 0 || s == NULL) return BSTR_ERR; ++ if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen ++ || b->mlen <= 0 || s == NULL) return BSTR_ERR; + + /* Optimistically concatenate directly */ + l = b->mlen - b->slen; +@@ -256,34 +377,40 @@ int i, l; + b->slen += i; + + /* Need to explicitely resize and concatenate tail */ +- cstr2tbstr (t, s); +- return bconcat (b, &t); ++ return bcatblk (b, (const void *) s, (int) strlen (s)); + } + +-/* int bcatblk (bstring b, unsigned char * s, int len) ++/* int bcatblk (bstring b, const void * s, int len) + * + * Concatenate a fixed length buffer to a bstring. + */ +-int bcatblk (bstring b, const unsigned char * s, int len) { +-struct tagbstring t; ++int bcatblk (bstring b, const void * s, int len) { ++int nl; ++ ++ if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen ++ || b->mlen <= 0 || s == NULL || len < 0) return BSTR_ERR; ++ ++ if (0 > (nl = b->slen + len)) return BSTR_ERR; /* Overflow? */ ++ if (b->mlen <= nl && 0 > balloc (b, nl + 1)) return BSTR_ERR; + +- if (s == NULL || len < 0) return BSTR_ERR; +- blk2tbstr (t, s, len); +- return bconcat (b, &t); ++ bBlockCopy (&b->data[b->slen], s, (size_t) len); ++ b->slen = nl; ++ b->data[nl] = (unsigned char) '\0'; ++ return BSTR_OK; + } + +-/* bstring bstrcpy (const bstring b) ++/* bstring bstrcpy (const_bstring b) + * + * Create a copy of the bstring b. + */ +-bstring bstrcpy (const bstring b) { ++bstring bstrcpy (const_bstring b) { + bstring b0; + int i,j; + + /* Attempted to copy an invalid string? */ + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + +- b0 = (bstring) malloc (sizeof (struct tagbstring)); ++ b0 = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b0 == NULL) { + /* Unable to allocate memory for string header */ + return NULL; +@@ -292,13 +419,13 @@ int i,j; + i = b->slen; + j = snapUpSize (i + 1); + +- b0->data = (unsigned char *) malloc (j); ++ b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + j = i + 1; +- b0->data = (unsigned char *) malloc (j); ++ b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + /* Unable to allocate memory for string data */ +- free (b0); ++ bstr__free (b0); + return NULL; + } + } +@@ -306,35 +433,127 @@ int i,j; + b0->mlen = j; + b0->slen = i; + +- if (i) memcpy ((char *) b0->data, (char *) b->data, i); +- b0->data[b0->slen] = '\0'; ++ if (i) bstr__memcpy ((char *) b0->data, (char *) b->data, i); ++ b0->data[b0->slen] = (unsigned char) '\0'; + + return b0; + } + +-/* int bassign (bstring a, const bstring b) ++/* int bassign (bstring a, const_bstring b) + * + * Overwrite the string a with the contents of string b. + */ +-int bassign (bstring a, const bstring b) { +- if (b == NULL || b->data == NULL || b->slen < 0 ) ++int bassign (bstring a, const_bstring b) { ++ if (b == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + if (b->slen != 0) { + if (balloc (a, b->slen) != BSTR_OK) return BSTR_ERR; +- memmove (a->data, b->data, b->slen); ++ bstr__memmove (a->data, b->data, b->slen); + } else { + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0) + return BSTR_ERR; + } +- a->data[b->slen] = '\0'; ++ a->data[b->slen] = (unsigned char) '\0'; + a->slen = b->slen; + return BSTR_OK; + } + +-#define ascii(c) ((unsigned char)(c) < 128) +-#define upcase(c) ((c) + (((ascii(c) && islower(c)) ? ('A'-'a') : 0))) +-#define downcase(c) ((c) + (((ascii(c) && isupper(c)) ? ('a'-'A') : 0))) ++/* int bassignmidstr (bstring a, const_bstring b, int left, int len) ++ * ++ * Overwrite the string a with the middle of contents of string b ++ * starting from position left and running for a length len. left and ++ * len are clamped to the ends of b as with the function bmidstr. ++ */ ++int bassignmidstr (bstring a, const_bstring b, int left, int len) { ++ if (b == NULL || b->data == NULL || b->slen < 0) ++ return BSTR_ERR; ++ ++ if (left < 0) { ++ len += left; ++ left = 0; ++ } ++ ++ if (len > b->slen - left) len = b->slen - left; ++ ++ if (a == NULL || a->data == NULL || a->mlen < a->slen || ++ a->slen < 0 || a->mlen == 0) ++ return BSTR_ERR; ++ ++ if (len > 0) { ++ if (balloc (a, len) != BSTR_OK) return BSTR_ERR; ++ bstr__memmove (a->data, b->data + left, len); ++ a->slen = len; ++ } else { ++ a->slen = 0; ++ } ++ a->data[a->slen] = (unsigned char) '\0'; ++ return BSTR_OK; ++} ++ ++/* int bassigncstr (bstring a, const char * str) ++ * ++ * Overwrite the string a with the contents of char * string str. Note that ++ * the bstring a must be a well defined and writable bstring. If an error ++ * occurs BSTR_ERR is returned however a may be partially overwritten. ++ */ ++int bassigncstr (bstring a, const char * str) { ++int i; ++size_t len; ++ if (a == NULL || a->data == NULL || a->mlen < a->slen || ++ a->slen < 0 || a->mlen == 0 || NULL == str) ++ return BSTR_ERR; ++ ++ for (i=0; i < a->mlen; i++) { ++ if ('\0' == (a->data[i] = str[i])) { ++ a->slen = i; ++ return BSTR_OK; ++ } ++ } ++ ++ a->slen = i; ++ len = strlen (str + i); ++ if (len > INT_MAX || i + len + 1 > INT_MAX || ++ 0 > balloc (a, (int) (i + len + 1))) return BSTR_ERR; ++ bBlockCopy (a->data + i, str + i, (size_t) len + 1); ++ a->slen += (int) len; ++ return BSTR_OK; ++} ++ ++/* int bassignblk (bstring a, const void * s, int len) ++ * ++ * Overwrite the string a with the contents of the block (s, len). Note that ++ * the bstring a must be a well defined and writable bstring. If an error ++ * occurs BSTR_ERR is returned and a is not overwritten. ++ */ ++int bassignblk (bstring a, const void * s, int len) { ++ if (a == NULL || a->data == NULL || a->mlen < a->slen || ++ a->slen < 0 || a->mlen == 0 || NULL == s || len + 1 < 1) ++ return BSTR_ERR; ++ if (len + 1 > a->mlen && 0 > balloc (a, len + 1)) return BSTR_ERR; ++ bBlockCopy (a->data, s, (size_t) len); ++ a->data[len] = (unsigned char) '\0'; ++ a->slen = len; ++ return BSTR_OK; ++} ++ ++/* int btrunc (bstring b, int n) ++ * ++ * Truncate the bstring to at most n characters. ++ */ ++int btrunc (bstring b, int n) { ++ if (n < 0 || b == NULL || b->data == NULL || b->mlen < b->slen || ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; ++ if (b->slen > n) { ++ b->slen = n; ++ b->data[n] = (unsigned char) '\0'; ++ } ++ return BSTR_OK; ++} ++ ++#define upcase(c) (toupper ((unsigned char) c)) ++#define downcase(c) (tolower ((unsigned char) c)) ++#define wspace(c) (isspace ((unsigned char) c)) + + /* int btoupper (bstring b) + * +@@ -343,7 +562,7 @@ int bassign (bstring a, const bstring b) + int btoupper (bstring b) { + int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || +- b->slen < 0) return BSTR_ERR; ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) upcase (b->data[i]); + } +@@ -357,50 +576,60 @@ int i, len; + int btolower (bstring b) { + int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || +- b->slen < 0) return BSTR_ERR; ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) downcase (b->data[i]); + } +- return 0; ++ return BSTR_OK; + } + +-/* int bstricmp (const bstring b0, const bstring b1) ++/* int bstricmp (const_bstring b0, const_bstring b1) + * + * Compare two strings without differentiating between case. The return + * value is the difference of the values of the characters where the two +- * strings first differ, (taking a '\0' to be the character at the end of +- * any bstring) otherwise 0 is returned indicating that the strings are +- * equal. ++ * strings first differ after lower case transformation, otherwise 0 is ++ * returned indicating that the strings are equal. If the lengths are ++ * different, then a difference from 0 is given, but if the first extra ++ * character is '\0', then it is taken to be the value UCHAR_MAX+1. + */ +-int bstricmp (const bstring b0, const bstring b1) { ++int bstricmp (const_bstring b0, const_bstring b1) { + int i, v, n; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0) return SHRT_MIN; +- n = b0->slen; if (n > b1->slen) n = b1->slen; +- if (b0->slen == b1->slen && b0->data == b1->data) return 0; ++ if ((n = b0->slen) > b1->slen) n = b1->slen; ++ else if (b0->slen == b1->slen && b0->data == b1->data) return BSTR_OK; + + for (i = 0; i < n; i ++) { +- v = ((char) downcase (b0->data[i])); +- v -= ((char) downcase (b1->data[i])); +- if (v != 0) return v; +- if (b0->data[i] == '\0') return 0; ++ v = (char) downcase (b0->data[i]) ++ - (char) downcase (b1->data[i]); ++ if (0 != v) return v; + } + +- if (b0->slen > n) return ((char) downcase (b0->data[n])); +- if (b1->slen > n) return - ((char) downcase (b1->data[n])); +- return 0; ++ if (b0->slen > n) { ++ v = (char) downcase (b0->data[n]); ++ if (v) return v; ++ return UCHAR_MAX + 1; ++ } ++ if (b1->slen > n) { ++ v = - (char) downcase (b1->data[n]); ++ if (v) return v; ++ return - (int) (UCHAR_MAX + 1); ++ } ++ return BSTR_OK; + } + +-/* int bstrnicmp (const bstring b0, const bstring b1, int n) ++/* int bstrnicmp (const_bstring b0, const_bstring b1, int n) + * + * Compare two strings without differentiating between case for at most n + * characters. If the position where the two strings first differ is + * before the nth position, the return value is the difference of the values +- * of the characters, (taking a '\0' to be the character at the end of any +- * bstring) otherwise 0 is returned. ++ * of the characters, otherwise 0 is returned. If the lengths are different ++ * and less than n characters, then a difference from 0 is given, but if the ++ * first extra character is '\0', then it is taken to be the value ++ * UCHAR_MAX+1. + */ +-int bstrnicmp (const bstring b0, const bstring b1, int n) { ++int bstrnicmp (const_bstring b0, const_bstring b1, int n) { + int i, v, m; + + if (bdata (b0) == NULL || b0->slen < 0 || +@@ -411,20 +640,26 @@ int i, v, m; + + if (b0->data != b1->data) { + for (i = 0; i < m; i ++) { +- v = ((char) downcase (b0->data[i])); +- v -= ((char) downcase (b1->data[i])); +- if (v != 0) return v; +- if (b0->data[i] == '\0') return 0; ++ v = (char) downcase (b0->data[i]); ++ v -= (char) downcase (b1->data[i]); ++ if (v != 0) return b0->data[i] - b1->data[i]; + } + } + +- if (n == m || b0->slen == b1->slen) return 0; ++ if (n == m || b0->slen == b1->slen) return BSTR_OK; + +- if (b0->slen > m) return (char) downcase (b0->data[m]); +- return - (char) downcase (b1->data[m]); ++ if (b0->slen > m) { ++ v = (char) downcase (b0->data[m]); ++ if (v) return v; ++ return UCHAR_MAX + 1; ++ } ++ ++ v = - (char) downcase (b1->data[m]); ++ if (v) return v; ++ return - (int) (UCHAR_MAX + 1); + } + +-/* int biseqcaseless (const bstring b0, const bstring b1) ++/* int biseqcaseless (const_bstring b0, const_bstring b1) + * + * Compare two strings for equality without differentiating between case. + * If the strings differ other than in case, 0 is returned, if the strings +@@ -432,12 +667,12 @@ int i, v, m; + * the length of the strings are different, this function is O(1). '\0' + * termination characters are not treated in any special way. + */ +-int biseqcaseless (const bstring b0, const bstring b1) { ++int biseqcaseless (const_bstring b0, const_bstring b1) { + int i, n; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0) return BSTR_ERR; +- if (b0->slen != b1->slen) return 0; ++ if (b0->slen != b1->slen) return BSTR_OK; + if (b0->data == b1->data || b0->slen == 0) return 1; + for (i=0, n=b0->slen; i < n; i++) { + if (b0->data[i] != b1->data[i]) { +@@ -448,22 +683,141 @@ int i, n; + return 1; + } + +-/* int biseq (const bstring b0, const bstring b1) ++/* int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) ++ * ++ * Compare beginning of string b0 with a block of memory of length len ++ * without differentiating between case for equality. If the beginning of b0 ++ * differs from the memory block other than in case (or if b0 is too short), ++ * 0 is returned, if the strings are the same, 1 is returned, if there is an ++ * error, -1 is returned. '\0' characters are not treated in any special ++ * way. ++ */ ++int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) { ++int i; ++ ++ if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) ++ return BSTR_ERR; ++ if (b0->slen < len) return BSTR_OK; ++ if (b0->data == (const unsigned char *) blk || len == 0) return 1; ++ ++ for (i = 0; i < len; i ++) { ++ if (b0->data[i] != ((const unsigned char *) blk)[i]) { ++ if (downcase (b0->data[i]) != ++ downcase (((const unsigned char *) blk)[i])) return 0; ++ } ++ } ++ return 1; ++} ++ ++/* ++ * int bltrimws (bstring b) ++ * ++ * Delete whitespace contiguous from the left end of the string. ++ */ ++int bltrimws (bstring b) { ++int i, len; ++ ++ if (b == NULL || b->data == NULL || b->mlen < b->slen || ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; ++ ++ for (len = b->slen, i = 0; i < len; i++) { ++ if (!wspace (b->data[i])) { ++ return bdelete (b, 0, i); ++ } ++ } ++ ++ b->data[0] = (unsigned char) '\0'; ++ b->slen = 0; ++ return BSTR_OK; ++} ++ ++/* ++ * int brtrimws (bstring b) ++ * ++ * Delete whitespace contiguous from the right end of the string. ++ */ ++int brtrimws (bstring b) { ++int i; ++ ++ if (b == NULL || b->data == NULL || b->mlen < b->slen || ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; ++ ++ for (i = b->slen - 1; i >= 0; i--) { ++ if (!wspace (b->data[i])) { ++ if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; ++ b->slen = i + 1; ++ return BSTR_OK; ++ } ++ } ++ ++ b->data[0] = (unsigned char) '\0'; ++ b->slen = 0; ++ return BSTR_OK; ++} ++ ++/* ++ * int btrimws (bstring b) ++ * ++ * Delete whitespace contiguous from both ends of the string. ++ */ ++int btrimws (bstring b) { ++int i, j; ++ ++ if (b == NULL || b->data == NULL || b->mlen < b->slen || ++ b->slen < 0 || b->mlen <= 0) return BSTR_ERR; ++ ++ for (i = b->slen - 1; i >= 0; i--) { ++ if (!wspace (b->data[i])) { ++ if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; ++ b->slen = i + 1; ++ for (j = 0; wspace (b->data[j]); j++) {} ++ return bdelete (b, 0, j); ++ } ++ } ++ ++ b->data[0] = (unsigned char) '\0'; ++ b->slen = 0; ++ return BSTR_OK; ++} ++ ++/* int biseq (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If the strings differ, 0 is returned, if + * the strings are the same, 1 is returned, if there is an error, -1 is + * returned. If the length of the strings are different, this function is + * O(1). '\0' termination characters are not treated in any special way. + */ +-int biseq (const bstring b0, const bstring b1) { ++int biseq (const_bstring b0, const_bstring b1) { + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return BSTR_ERR; +- if (b0->slen != b1->slen) return 0; ++ if (b0->slen != b1->slen) return BSTR_OK; + if (b0->data == b1->data || b0->slen == 0) return 1; +- return !memcmp (b0->data, b1->data, b0->slen); ++ return !bstr__memcmp (b0->data, b1->data, b0->slen); ++} ++ ++/* int bisstemeqblk (const_bstring b0, const void * blk, int len) ++ * ++ * Compare beginning of string b0 with a block of memory of length len for ++ * equality. If the beginning of b0 differs from the memory block (or if b0 ++ * is too short), 0 is returned, if the strings are the same, 1 is returned, ++ * if there is an error, -1 is returned. '\0' characters are not treated in ++ * any special way. ++ */ ++int bisstemeqblk (const_bstring b0, const void * blk, int len) { ++int i; ++ ++ if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) ++ return BSTR_ERR; ++ if (b0->slen < len) return BSTR_OK; ++ if (b0->data == (const unsigned char *) blk || len == 0) return 1; ++ ++ for (i = 0; i < len; i ++) { ++ if (b0->data[i] != ((const unsigned char *) blk)[i]) return BSTR_OK; ++ } ++ return 1; + } + +-/* int biseqcstr (const bstring b, const char *s) ++/* int biseqcstr (const_bstring b, const char *s) + * + * Compare the bstring b and char * string s. The C string s must be '\0' + * terminated at exactly the length of the bstring b, and the contents +@@ -474,16 +828,40 @@ int biseq (const bstring b0, const bstri + * other. If the strings are equal 1 is returned, if they are unequal 0 is + * returned and if there is a detectable error BSTR_ERR is returned. + */ +-int biseqcstr (const bstring b, const char * s) { ++int biseqcstr (const_bstring b, const char * s) { ++int i; ++ if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) return BSTR_ERR; ++ for (i=0; i < b->slen; i++) { ++ if (s[i] == '\0' || b->data[i] != (unsigned char) s[i]) return BSTR_OK; ++ } ++ return s[i] == '\0'; ++} ++ ++/* int biseqcstrcaseless (const_bstring b, const char *s) ++ * ++ * Compare the bstring b and char * string s. The C string s must be '\0' ++ * terminated at exactly the length of the bstring b, and the contents ++ * between the two must be identical except for case with the bstring b with ++ * no '\0' characters for the two contents to be considered equal. This is ++ * equivalent to the condition that their current contents will be always be ++ * equal ignoring case when comparing them in the same format after ++ * converting one or the other. If the strings are equal, except for case, ++ * 1 is returned, if they are unequal regardless of case 0 is returned and ++ * if there is a detectable error BSTR_ERR is returned. ++ */ ++int biseqcstrcaseless (const_bstring b, const char * s) { + int i; + if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) return BSTR_ERR; + for (i=0; i < b->slen; i++) { +- if (s[i] == '\0' || b->data[i] != s[i]) return 0; ++ if (s[i] == '\0' || ++ (b->data[i] != (unsigned char) s[i] && ++ downcase (b->data[i]) != (unsigned char) downcase (s[i]))) ++ return BSTR_OK; + } + return s[i] == '\0'; + } + +-/* int bstrcmp (const bstring b0, const bstring b1) ++/* int bstrcmp (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If there is an error, SHRT_MIN is returned, + * otherwise a value less than or greater than zero, indicating that the +@@ -497,27 +875,27 @@ int i; + * standard C library counter part strcmp, the comparison does not proceed + * past any '\0' termination characters encountered. + */ +-int bstrcmp (const bstring b0, const bstring b1) { ++int bstrcmp (const_bstring b0, const_bstring b1) { + int i, v, n; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return SHRT_MIN; + n = b0->slen; if (n > b1->slen) n = b1->slen; + if (b0->slen == b1->slen && (b0->data == b1->data || b0->slen == 0)) +- return 0; ++ return BSTR_OK; + + for (i = 0; i < n; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; +- if (b0->data[i] == '\0') return 0; ++ if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + + if (b0->slen > n) return 1; + if (b1->slen > n) return -1; +- return 0; ++ return BSTR_OK; + } + +-/* int bstrncmp (const bstring b0, const bstring b1, int n) ++/* int bstrncmp (const_bstring b0, const_bstring b1, int n) + * + * Compare the string b0 and b1 for at most n characters. If there is an + * error, SHRT_MIN is returned, otherwise a value is returned as if b0 and +@@ -527,7 +905,7 @@ int i, v, n; + * part strcmp, the comparison does not proceed past any '\0' termination + * characters encountered. + */ +-int bstrncmp (const bstring b0, const bstring b1, int n) { ++int bstrncmp (const_bstring b0, const_bstring b1, int n) { + int i, v, m; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || +@@ -540,24 +918,24 @@ int i, v, m; + for (i = 0; i < m; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; +- if (b0->data[i] == '\0') return 0; ++ if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + } + +- if (n == m || b0->slen == b1->slen) return 0; ++ if (n == m || b0->slen == b1->slen) return BSTR_OK; + + if (b0->slen > m) return 1; + return -1; + } + +-/* bstring bmidstr (const bstring b, int left, int len) ++/* bstring bmidstr (const_bstring b, int left, int len) + * + * Create a bstring which is the substring of b starting from position left + * and running for a length len (clamped by the end of the bstring b.) If + * b is detectably invalid, then NULL is returned. The section described + * by (left, len) is clamped to the boundaries of b. + */ +-bstring bmidstr (const bstring b, int left, int len) { ++bstring bmidstr (const_bstring b, int left, int len) { + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + +@@ -586,7 +964,8 @@ int bdelete (bstring b, int pos, int len + pos = 0; + } + +- if (len < 0 || b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen) ++ if (len < 0 || b == NULL || b->data == NULL || b->slen < 0 || ++ b->mlen < b->slen || b->mlen <= 0) + return BSTR_ERR; + if (len > 0 && pos < b->slen) { + if (pos + len >= b->slen) { +@@ -597,23 +976,24 @@ int bdelete (bstring b, int pos, int len + b->slen - (pos+len)); + b->slen -= len; + } +- b->data[b->slen] = '\0'; ++ b->data[b->slen] = (unsigned char) '\0'; + } + return BSTR_OK; + } + + /* int bdestroy (bstring b) + * +- * free up the bstring. Note that if b is detectably invalid or not writable ++ * Free up the bstring. Note that if b is detectably invalid or not writable + * then no action is performed and BSTR_ERR is returned. Like a freed memory + * allocation, dereferences, writes or any other action on b after it has + * been bdestroyed is undefined. + */ + int bdestroy (bstring b) { +- if (b == NULL || b->slen < 0 || b->mlen <= 0 || b->data == NULL) ++ if (b == NULL || b->slen < 0 || b->mlen <= 0 || b->mlen < b->slen || ++ b->data == NULL) + return BSTR_ERR; + +- free (b->data); ++ bstr__free (b->data); + + /* In case there is any stale usage, there is one more chance to + notice this error. */ +@@ -622,11 +1002,11 @@ int bdestroy (bstring b) { + b->mlen = -__LINE__; + b->data = NULL; + +- free (b); +- return 0; ++ bstr__free (b); ++ return BSTR_OK; + } + +-/* int binstr (const bstring b1, int pos, const bstring b2) ++/* int binstr (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * forward. If it is found then return with the first position where it is +@@ -635,7 +1015,141 @@ int bdestroy (bstring b) { + * search algorithm. Because of this there are many degenerate cases where + * this can take much longer than it needs to. + */ +-int binstr (const bstring b1, int pos, const bstring b2) { ++int binstr (const_bstring b1, int pos, const_bstring b2) { ++int j, ii, ll, lf; ++unsigned char * d0; ++unsigned char c0; ++register unsigned char * d1; ++register unsigned char c1; ++register int i; ++ ++ if (b1 == NULL || b1->data == NULL || b1->slen < 0 || ++ b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; ++ if (b1->slen == pos) return (b2->slen == 0)?pos:BSTR_ERR; ++ if (b1->slen < pos || pos < 0) return BSTR_ERR; ++ if (b2->slen == 0) return pos; ++ ++ /* No space to find such a string? */ ++ if ((lf = b1->slen - b2->slen + 1) <= pos) return BSTR_ERR; ++ ++ /* An obvious alias case */ ++ if (b1->data == b2->data && pos == 0) return 0; ++ ++ i = pos; ++ ++ d0 = b2->data; ++ d1 = b1->data; ++ ll = b2->slen; ++ ++ /* Peel off the b2->slen == 1 case */ ++ c0 = d0[0]; ++ if (1 == ll) { ++ for (;i < lf; i++) if (c0 == d1[i]) return i; ++ return BSTR_ERR; ++ } ++ ++ c1 = c0; ++ j = 0; ++ lf = b1->slen - 1; ++ ++ ii = -1; ++ if (i < lf) do { ++ /* Unrolled current character test */ ++ if (c1 != d1[i]) { ++ if (c1 != d1[1+i]) { ++ i += 2; ++ continue; ++ } ++ i++; ++ } ++ ++ /* Take note if this is the start of a potential match */ ++ if (0 == j) ii = i; ++ ++ /* Shift the test character down by one */ ++ j++; ++ i++; ++ ++ /* If this isn't past the last character continue */ ++ if (j < ll) { ++ c1 = d0[j]; ++ continue; ++ } ++ ++ N0:; ++ ++ /* If no characters mismatched, then we matched */ ++ if (i == ii+j) return ii; ++ ++ /* Shift back to the beginning */ ++ i -= j; ++ j = 0; ++ c1 = c0; ++ } while (i < lf); ++ ++ /* Deal with last case if unrolling caused a misalignment */ ++ if (i == lf && ll == j+1 && c1 == d1[i]) goto N0; ++ ++ return BSTR_ERR; ++} ++ ++/* int binstrr (const_bstring b1, int pos, const_bstring b2) ++ * ++ * Search for the bstring b2 in b1 starting from position pos, and searching ++ * backward. If it is found then return with the first position where it is ++ * found, otherwise return BSTR_ERR. Note that this is just a brute force ++ * string searcher that does not attempt clever things like the Boyer-Moore ++ * search algorithm. Because of this there are many degenerate cases where ++ * this can take much longer than it needs to. ++ */ ++int binstrr (const_bstring b1, int pos, const_bstring b2) { ++int j, i, l; ++unsigned char * d0, * d1; ++ ++ if (b1 == NULL || b1->data == NULL || b1->slen < 0 || ++ b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; ++ if (b1->slen == pos && b2->slen == 0) return pos; ++ if (b1->slen < pos || pos < 0) return BSTR_ERR; ++ if (b2->slen == 0) return pos; ++ ++ /* Obvious alias case */ ++ if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return 0; ++ ++ i = pos; ++ if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; ++ ++ /* If no space to find such a string then snap back */ ++ if (l + 1 <= i) i = l; ++ j = 0; ++ ++ d0 = b2->data; ++ d1 = b1->data; ++ l = b2->slen; ++ ++ for (;;) { ++ if (d0[j] == d1[i + j]) { ++ j ++; ++ if (j >= l) return i; ++ } else { ++ i --; ++ if (i < 0) break; ++ j=0; ++ } ++ } ++ ++ return BSTR_ERR; ++} ++ ++/* int binstrcaseless (const_bstring b1, int pos, const_bstring b2) ++ * ++ * Search for the bstring b2 in b1 starting from position pos, and searching ++ * forward but without regard to case. If it is found then return with the ++ * first position where it is found, otherwise return BSTR_ERR. Note that ++ * this is just a brute force string searcher that does not attempt clever ++ * things like the Boyer-Moore search algorithm. Because of this there are ++ * many degenerate cases where this can take much longer than it needs to. ++ */ ++int binstrcaseless (const_bstring b1, int pos, const_bstring b2) { + int j, i, l, ll; + unsigned char * d0, * d1; + +@@ -651,7 +1165,7 @@ unsigned char * d0, * d1; + if (l <= pos) return BSTR_ERR; + + /* An obvious alias case */ +- if (b1->data == b2->data && pos == 0) return 0; ++ if (b1->data == b2->data && pos == 0) return BSTR_OK; + + i = pos; + j = 0; +@@ -661,7 +1175,7 @@ unsigned char * d0, * d1; + ll = b2->slen; + + for (;;) { +- if (d0[j] == d1[i + j]) { ++ if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= ll) return i; + } else { +@@ -674,16 +1188,16 @@ unsigned char * d0, * d1; + return BSTR_ERR; + } + +-/* int binstrr (const bstring b1, int pos, const bstring b2) ++/* int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching +- * backward. If it is found then return with the first position where it is +- * found, otherwise return BSTR_ERR. Note that this is just a brute force +- * string searcher that does not attempt clever things like the Boyer-Moore +- * search algorithm. Because of this there are many degenerate cases where +- * this can take much longer than it needs to. ++ * backward but without regard to case. If it is found then return with the ++ * first position where it is found, otherwise return BSTR_ERR. Note that ++ * this is just a brute force string searcher that does not attempt clever ++ * things like the Boyer-Moore search algorithm. Because of this there are ++ * many degenerate cases where this can take much longer than it needs to. + */ +-int binstrr (const bstring b1, int pos, const bstring b2) { ++int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) { + int j, i, l; + unsigned char * d0, * d1; + +@@ -694,7 +1208,7 @@ unsigned char * d0, * d1; + if (b2->slen == 0) return pos; + + /* Obvious alias case */ +- if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return 0; ++ if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return BSTR_OK; + + i = pos; + if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; +@@ -708,7 +1222,7 @@ unsigned char * d0, * d1; + l = b2->slen; + + for (;;) { +- if (d0[j] == d1[i + j]) { ++ if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= l) return i; + } else { +@@ -721,78 +1235,96 @@ unsigned char * d0, * d1; + return BSTR_ERR; + } + +-/* int bstrchr (const bstring b, int c) ++ ++/* int bstrchrp (const_bstring b, int c, int pos) + * +- * Search for the character c in b forwards from the start of the string. ++ * Search for the character c in b forwards from the position pos ++ * (inclusive). + */ +-int bstrchr (const bstring b, int c) { ++int bstrchrp (const_bstring b, int c, int pos) { + unsigned char * p; + +- if (b == NULL || b->data == NULL || b->slen <= 0) return BSTR_ERR; +- p = memchr (b->data, (unsigned char) c, b->slen); ++ if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) return BSTR_ERR; ++ p = (unsigned char *) bstr__memchr ((b->data + pos), (unsigned char) c, (b->slen - pos)); + if (p) return (int) (p - b->data); + return BSTR_ERR; + } + +-/* int bstrrchr (const bstring b, int c) ++/* int bstrrchrp (const_bstring b, int c, int pos) + * +- * Search for the character c in b backwards from the end of the string. ++ * Search for the character c in b backwards from the position pos in string ++ * (inclusive). + */ +-int bstrrchr (const bstring b, int c) { ++int bstrrchrp (const_bstring b, int c, int pos) { + int i; +- +- if (b == NULL || b->data == NULL || b->slen <= 0) return BSTR_ERR; +- for (i=b->slen-1; i >= 0; i--) { ++ ++ if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) return BSTR_ERR; ++ for (i=pos; i >= 0; i--) { + if (b->data[i] == (unsigned char) c) return i; + } + return BSTR_ERR; + } + +-#define LONG_LOG_BITS_QTY (5) ++#if !defined (BSTRLIB_AGGRESSIVE_MEMORY_FOR_SPEED_TRADEOFF) ++#define LONG_LOG_BITS_QTY (3) + #define LONG_BITS_QTY (1 << LONG_LOG_BITS_QTY) +-#define LONG_TYPE unsigned long ++#define LONG_TYPE unsigned char + +-struct charField { LONG_TYPE content[(1 << CHAR_BIT) / LONG_BITS_QTY]; }; ++#define CFCLEN ((1 << CHAR_BIT) / LONG_BITS_QTY) ++struct charField { LONG_TYPE content[CFCLEN]; }; + #define testInCharField(cf,c) ((cf)->content[(c) >> LONG_LOG_BITS_QTY] & (((long)1) << ((c) & (LONG_BITS_QTY-1)))) ++#define setInCharField(cf,idx) { \ ++ unsigned int c = (unsigned int) (idx); \ ++ (cf)->content[c >> LONG_LOG_BITS_QTY] |= (LONG_TYPE) (1ul << (c & (LONG_BITS_QTY-1))); \ ++} ++ ++#else ++ ++#define CFCLEN (1 << CHAR_BIT) ++struct charField { unsigned char content[CFCLEN]; }; ++#define testInCharField(cf,c) ((cf)->content[(unsigned char) (c)]) ++#define setInCharField(cf,idx) (cf)->content[(unsigned int) (idx)] = ~0 ++ ++#endif + + /* Convert a bstring to charField */ +-static int buildCharField (struct charField * cf, const bstring b1) { ++static int buildCharField (struct charField * cf, const_bstring b) { + int i; +- if (b1 == NULL || b1->data == NULL || b1->slen <= 0) return BSTR_ERR; +- memset ((void *) &cf->content, 0, sizeof (struct charField)); +- for (i=0; i < b1->slen; i++) { +- unsigned int c = (unsigned int) b1->data[i]; +- cf->content[c >> LONG_LOG_BITS_QTY] |= ((LONG_TYPE) 1) << (c & (LONG_BITS_QTY-1)); ++ if (b == NULL || b->data == NULL || b->slen <= 0) return BSTR_ERR; ++ memset ((void *) cf->content, 0, sizeof (struct charField)); ++ for (i=0; i < b->slen; i++) { ++ setInCharField (cf, b->data[i]); + } +- return 0; ++ return BSTR_OK; + } + + static void invertCharField (struct charField * cf) { + int i; +- for (i=0; i < ((1 << CHAR_BIT) / LONG_BITS_QTY); i++) cf->content[i] = ~cf->content[i]; ++ for (i=0; i < CFCLEN; i++) cf->content[i] = ~cf->content[i]; + } + + /* Inner engine for binchr */ + static int binchrCF (const unsigned char * data, int len, int pos, const struct charField * cf) { + int i; + for (i=pos; i < len; i++) { +- unsigned int c = (unsigned int) data[i]; ++ unsigned char c = (unsigned char) data[i]; + if (testInCharField (cf, c)) return i; + } + return BSTR_ERR; + } + +-/* int binchr (const bstring b0, int pos, const bstring b1); ++/* int binchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * one of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +-int binchr (const bstring b0, int pos, const bstring b1) { ++int binchr (const_bstring b0, int pos, const_bstring b1) { + struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; +- if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; ++ if (1 == b1->slen) return bstrchrp (b0, b1->data[0], pos); ++ if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrCF (b0->data, b0->slen, pos, &chrs); + } + +@@ -806,28 +1338,29 @@ int i; + return BSTR_ERR; + } + +-/* int binchrr (const bstring b0, int pos, const bstring b1); ++/* int binchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which one of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +-int binchrr (const bstring b0, int pos, const bstring b1) { ++int binchrr (const_bstring b0, int pos, const_bstring b1) { + struct charField chrs; +- if (pos < 0 || b0 == NULL || b0->data == NULL || ++ if (pos < 0 || b0 == NULL || b0->data == NULL || b1 == NULL || + b0->slen < pos) return BSTR_ERR; + if (pos == b0->slen) pos--; +- if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; ++ if (1 == b1->slen) return bstrrchrp (b0, b1->data[0], pos); ++ if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrrCF (b0->data, pos, &chrs); + } + +-/* int bninchr (const bstring b0, int pos, const bstring b1); ++/* int bninchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * none of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +-int bninchr (const bstring b0, int pos, const bstring b1) { ++int bninchr (const_bstring b0, int pos, const_bstring b1) { + struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; +@@ -836,13 +1369,13 @@ struct charField chrs; + return binchrCF (b0->data, b0->slen, pos, &chrs); + } + +-/* int bninchrr (const bstring b0, int pos, const bstring b1); ++/* int bninchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which none of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +-int bninchrr (const bstring b0, int pos, const bstring b1) { ++int bninchrr (const_bstring b0, int pos, const_bstring b1) { + struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen < pos) return BSTR_ERR; +@@ -859,44 +1392,50 @@ struct charField chrs; + * appended as necessary to make up the gap between the end of b0 and pos. + * If b1 is NULL, it behaves as if it were a 0-length string. + */ +-int bsetstr (bstring b0, int pos, const bstring b1, unsigned char fill) { +-int d; +-int newlen; +- if (pos < 0 || b0 == NULL || b0->slen < 0 || b0->mlen < b0->slen) return BSTR_ERR; ++int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill) { ++int d, newlen; ++ptrdiff_t pd; ++bstring aux = (bstring) b1; ++ ++ if (pos < 0 || b0 == NULL || b0->slen < 0 || NULL == b0->data || ++ b0->mlen < b0->slen || b0->mlen <= 0) return BSTR_ERR; + if (b1 != NULL && (b1->slen < 0 || b1->data == NULL)) return BSTR_ERR; + ++ d = pos; ++ + /* Aliasing case */ +- if ((b1 != NULL) && (b0->data == b1->data) && (pos < b0->slen)) { +- bstring tmp = bstrcpy (b1); +- if (tmp == NULL) return BSTR_ERR; +- d = bsetstr (b0, pos, tmp, fill); +- bdestroy (tmp); +- return d; ++ if (NULL != aux) { ++ if ((pd = (ptrdiff_t) (b1->data - b0->data)) >= 0 && pd < (ptrdiff_t) b0->mlen) { ++ if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; ++ } ++ d += aux->slen; + } + + /* Increase memory size if necessary */ +- d = pos + blength (b1); +- if (balloc (b0, d + 1) != BSTR_OK) return BSTR_ERR; ++ if (balloc (b0, d + 1) != BSTR_OK) { ++ if (aux != b1) bdestroy (aux); ++ return BSTR_ERR; ++ } + + newlen = b0->slen; + + /* Fill in "fill" character as necessary */ + if (pos > newlen) { +- int i; +- for (i = b0->slen; i < pos; i ++) b0->data[i] = fill; ++ bstr__memset (b0->data + b0->slen, (int) fill, (size_t) (pos - b0->slen)); + newlen = pos; + } + + /* Copy b1 to position pos in b0. */ +- if (b1 != NULL) { +- bBlockCopy ((char *) (b0->data + pos), (char *) b1->data, b1->slen); ++ if (aux != NULL) { ++ bBlockCopy ((char *) (b0->data + pos), (char *) aux->data, aux->slen); ++ if (aux != b1) bdestroy (aux); + } + + /* Indicate the potentially increased size of b0 */ + if (d > newlen) newlen = d; + + b0->slen = newlen; +- b0->data[newlen] = '\0'; ++ b0->data[newlen] = (unsigned char) '\0'; + + return BSTR_OK; + } +@@ -908,40 +1447,45 @@ int newlen; + * make up the gap between the end of b1 and pos. Unlike bsetstr, binsert + * does not allow b2 to be NULL. + */ +-int binsert (bstring b1, int pos, const bstring b2, unsigned char fill) { ++int binsert (bstring b1, int pos, const_bstring b2, unsigned char fill) { + int d, l; ++ptrdiff_t pd; ++bstring aux = (bstring) b2; + + if (pos < 0 || b1 == NULL || b2 == NULL || b1->slen < 0 || +- b2->slen < 0 || b1->mlen < b1->slen) return BSTR_ERR; ++ b2->slen < 0 || b1->mlen < b1->slen || b1->mlen <= 0) return BSTR_ERR; + + /* Aliasing case */ +- if ((unsigned int)(b2->data - b1->data) < (unsigned int)b1->slen) { +- bstring tmp; +- d = binsert (b1, pos, tmp = bstrcpy (b2), fill); +- bdestroy (tmp); +- return d; ++ if ((pd = (ptrdiff_t) (b2->data - b1->data)) >= 0 && pd < (ptrdiff_t) b1->mlen) { ++ if (NULL == (aux = bstrcpy (b2))) return BSTR_ERR; + } + + /* Compute the two possible end pointers */ +- d = b1->slen + b2->slen; +- l = pos + b2->slen; ++ d = b1->slen + aux->slen; ++ l = pos + aux->slen; ++ if ((d|l) < 0) return BSTR_ERR; + + if (l > d) { + /* Inserting past the end of the string */ +- if (balloc (b1, l + 1) != BSTR_OK) return BSTR_ERR; +- for (d = b1->slen; d < pos; d++) b1->data[d] = fill; ++ if (balloc (b1, l + 1) != BSTR_OK) { ++ if (aux != b2) bdestroy (aux); ++ return BSTR_ERR; ++ } ++ bstr__memset (b1->data + b1->slen, (int) fill, (size_t) (pos - b1->slen)); + b1->slen = l; + } else { + /* Inserting in the middle of the string */ +- if (balloc (b1, d + 1) != BSTR_OK) return BSTR_ERR; +- for (l = d - 1; l >= pos + b2->slen; l--) { +- b1->data[l] = b1->data[l - b2->slen]; ++ if (balloc (b1, d + 1) != BSTR_OK) { ++ if (aux != b2) bdestroy (aux); ++ return BSTR_ERR; + } ++ bBlockCopy (b1->data + l, b1->data + pos, d - l); + b1->slen = d; + } +- bBlockCopy (b1->data + pos, b2->data, b2->slen); +- b1->data[b1->slen] = '\0'; +- return 0; ++ bBlockCopy (b1->data + pos, aux->data, aux->slen); ++ b1->data[b1->slen] = (unsigned char) '\0'; ++ if (aux != b2) bdestroy (aux); ++ return BSTR_OK; + } + + /* int breplace (bstring b1, int pos, int len, bstring b2, +@@ -950,167 +1494,203 @@ int d, l; + * Replace a section of a string from pos for a length len with the string b2. + * fill is used is pos > b1->slen. + */ +-int breplace (bstring b1, int pos, int len, const bstring b2, ++int breplace (bstring b1, int pos, int len, const_bstring b2, + unsigned char fill) { +-int ret; +- +- if (pos < 0 || len < 0 || b1 == NULL || b2 == NULL || +- b1->data == NULL || b2->data == NULL || b1->slen < 0 || +- b2->slen < 0 || b1->mlen < b1->slen) return BSTR_ERR; ++int pl, ret; ++ptrdiff_t pd; ++bstring aux = (bstring) b2; ++ ++ if (pos < 0 || len < 0 || (pl = pos + len) < 0 || b1 == NULL || ++ b2 == NULL || b1->data == NULL || b2->data == NULL || ++ b1->slen < 0 || b2->slen < 0 || b1->mlen < b1->slen || ++ b1->mlen <= 0) return BSTR_ERR; + + /* Straddles the end? */ +- if (pos + len >= b1->slen) { ++ if (pl >= b1->slen) { + if ((ret = bsetstr (b1, pos, b2, fill)) < 0) return ret; + if (pos + b2->slen < b1->slen) { + b1->slen = pos + b2->slen; +- b1->data[b1->slen] = '\0'; ++ b1->data[b1->slen] = (unsigned char) '\0'; + } + return ret; + } + + /* Aliasing case */ +- if ((unsigned int)(b2->data - b1->data) < (unsigned int)b1->slen) { +- bstring tmp; +- ret = breplace (b1, pos, len, tmp = bstrcpy (b2), fill); +- bdestroy (tmp); +- return ret; ++ if ((pd = (ptrdiff_t) (b2->data - b1->data)) >= 0 && pd < (ptrdiff_t) b1->slen) { ++ if (NULL == (aux = bstrcpy (b2))) return BSTR_ERR; + } + +- if (b2->slen > len) { +- if (balloc (b1, b1->slen + b2->slen - len) != BSTR_OK) return BSTR_ERR; ++ if (aux->slen > len) { ++ if (balloc (b1, b1->slen + aux->slen - len) != BSTR_OK) { ++ if (aux != b2) bdestroy (aux); ++ return BSTR_ERR; ++ } + } + +- if (b2->slen != len) memmove (b1->data + pos + b2->slen, b1->data + pos + len, b1->slen - (pos + len)); +- memcpy (b1->data + pos, b2->data, b2->slen); +- b1->slen += b2->slen - len; +- b1->data[b1->slen] = '\0'; ++ if (aux->slen != len) bstr__memmove (b1->data + pos + aux->slen, b1->data + pos + len, b1->slen - (pos + len)); ++ bstr__memcpy (b1->data + pos, aux->data, aux->slen); ++ b1->slen += aux->slen - len; ++ b1->data[b1->slen] = (unsigned char) '\0'; ++ if (aux != b2) bdestroy (aux); + return BSTR_OK; + } + +-/* int bfindreplace (bstring b, const bstring find, const bstring repl, ++/* int bfindreplace (bstring b, const_bstring find, const_bstring repl, + * int pos) + * + * Replace all occurrences of a find string with a replace string after a + * given point in a bstring. + */ +-int bfindreplace (bstring b, const bstring find, const bstring repl, int pos) { ++ ++typedef int (*instr_fnptr) (const_bstring s1, int pos, const_bstring s2); ++ ++static int findreplaceengine (bstring b, const_bstring find, const_bstring repl, int pos, instr_fnptr instr) { + int i, ret, slen, mlen, delta, acc; + int * d; ++int static_d[32]; ++ptrdiff_t pd; ++bstring auxf = (bstring) find; ++bstring auxr = (bstring) repl; + + if (b == NULL || b->data == NULL || find == NULL || + find->data == NULL || repl == NULL || repl->data == NULL || + pos < 0 || find->slen <= 0 || b->mlen < 0 || b->slen > b->mlen || +- b->slen < 0 || repl->slen < 0) return BSTR_ERR; +- if (pos > b->slen - find->slen) return 0; ++ b->mlen <= 0 || b->slen < 0 || repl->slen < 0) return BSTR_ERR; ++ if (pos > b->slen - find->slen) return BSTR_OK; + + /* Alias with find string */ +- i = find->data - b->data; +- if (pos - find->slen < i && i < b->slen) { +- bstring t; +- i = bfindreplace (b, t = bstrcpy (find), repl, pos); +- bdestroy (t); +- return i; ++ pd = (ptrdiff_t) (find->data - b->data); ++ if ((ptrdiff_t) (pos - find->slen) < pd && pd < (ptrdiff_t) b->slen) { ++ if (NULL == (auxf = bstrcpy (find))) return BSTR_ERR; + } + + /* Alias with repl string */ +- i = repl->data - b->data; +- if (pos - repl->slen < i && i < b->slen) { +- bstring t; +- i = bfindreplace (b, find, t = bstrcpy (repl), pos); +- bdestroy (t); +- return i; ++ pd = (ptrdiff_t) (repl->data - b->data); ++ if ((ptrdiff_t) (pos - repl->slen) < pd && pd < (ptrdiff_t) b->slen) { ++ if (NULL == (auxr = bstrcpy (repl))) { ++ if (auxf != find) bdestroy (auxf); ++ return BSTR_ERR; ++ } + } + +- delta = find->slen - repl->slen; ++ delta = auxf->slen - auxr->slen; + + /* in-place replacement since find and replace strings are of equal + length */ + if (delta == 0) { +- while ((pos = binstr (b, pos, find)) >= 0) { +- memcpy (b->data + pos, repl->data, repl->slen); +- pos += find->slen; ++ while ((pos = instr (b, pos, auxf)) >= 0) { ++ bstr__memcpy (b->data + pos, auxr->data, auxr->slen); ++ pos += auxf->slen; + } +- return 0; ++ if (auxf != find) bdestroy (auxf); ++ if (auxr != repl) bdestroy (auxr); ++ return BSTR_OK; + } + +- /* shrinking replacement since find->slen > repl->slen */ ++ /* shrinking replacement since auxf->slen > auxr->slen */ + if (delta > 0) { + acc = 0; + +- while ((i = binstr (b, pos, find)) >= 0) { +- if (acc && i > pos) { +- memmove (b->data + pos - acc, b->data + pos, +- i - pos); +- } +- if (repl->slen) { +- memmove (b->data + i - acc, repl->data, +- repl->slen); +- } ++ while ((i = instr (b, pos, auxf)) >= 0) { ++ if (acc && i > pos) ++ bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); ++ if (auxr->slen) ++ bstr__memcpy (b->data + i - acc, auxr->data, auxr->slen); + acc += delta; +- pos = i + find->slen; ++ pos = i + auxf->slen; + } + + if (acc) { + i = b->slen; +- if (i > pos) { +- memmove (b->data + pos - acc, b->data + pos, +- i - pos); +- } ++ if (i > pos) ++ bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); + b->slen -= acc; +- b->data[b->slen] = '\0'; ++ b->data[b->slen] = (unsigned char) '\0'; + } + +- return 0; ++ if (auxf != find) bdestroy (auxf); ++ if (auxr != repl) bdestroy (auxr); ++ return BSTR_OK; + } + + /* expanding replacement since find->slen < repl->slen. Its a lot + more complicated. */ + +- mlen = 8; +- d = (int *) malloc (sizeof (int *) * mlen); +- if (d == NULL) return BSTR_ERR; +- slen = 0; ++ mlen = 32; ++ d = (int *) static_d; /* Avoid malloc for trivial cases */ ++ acc = slen = 0; + +- while ((pos = binstr (b, pos, find)) >= 0) { +- int * t; ++ while ((pos = instr (b, pos, auxf)) >= 0) { + if (slen + 1 >= mlen) { ++ int sl; ++ int * t; + mlen += mlen; +- t = (int *) realloc (d, sizeof (int *) * mlen); +- if (t == NULL) { +- free (d); +- return BSTR_ERR; ++ sl = sizeof (int *) * mlen; ++ if (static_d == d) d = NULL; ++ if (sl < mlen || NULL == (t = (int *) bstr__realloc (d, sl))) { ++ ret = BSTR_ERR; ++ goto done; + } ++ if (NULL == d) bstr__memcpy (t, static_d, sizeof (static_d)); + d = t; + } + d[slen] = pos; + slen++; +- pos += find->slen; ++ acc -= delta; ++ pos += auxf->slen; ++ if (pos < 0 || acc < 0) { ++ ret = BSTR_ERR; ++ goto done; ++ } + } + d[slen] = b->slen; + +- acc = slen * (-delta); + if (BSTR_OK == (ret = balloc (b, b->slen + acc + 1))) { + b->slen += acc; + for (i = slen-1; i >= 0; i--) { + int s, l; +- s = d[i] + find->slen; ++ s = d[i] + auxf->slen; + l = d[i+1] - s; + if (l) { +- memmove (b->data + s + acc, b->data + s, l); ++ bstr__memmove (b->data + s + acc, b->data + s, l); + } +- if (repl->slen) { +- memmove (b->data + s + acc - repl->slen, +- repl->data, repl->slen); ++ if (auxr->slen) { ++ bstr__memmove (b->data + s + acc - auxr->slen, ++ auxr->data, auxr->slen); + } + acc += delta; + } +- b->data[b->slen] = '\0'; ++ b->data[b->slen] = (unsigned char) '\0'; + } + +- free (d); ++ done:; ++ if (static_d == d) d = NULL; ++ bstr__free (d); ++ if (auxf != find) bdestroy (auxf); ++ if (auxr != repl) bdestroy (auxr); + return ret; + } + ++/* int bfindreplace (bstring b, const_bstring find, const_bstring repl, ++ * int pos) ++ * ++ * Replace all occurrences of a find string with a replace string after a ++ * given point in a bstring. ++ */ ++int bfindreplace (bstring b, const_bstring find, const_bstring repl, int pos) { ++ return findreplaceengine (b, find, repl, pos, binstr); ++} ++ ++/* int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, ++ * int pos) ++ * ++ * Replace all occurrences of a find string, ignoring case, with a replace ++ * string after a given point in a bstring. ++ */ ++int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, int pos) { ++ return findreplaceengine (b, find, repl, pos, binstrcaseless); ++} ++ + /* int binsertch (bstring b, int pos, int len, unsigned char fill) + * + * Inserts the character fill repeatedly into b at position pos for a +@@ -1119,42 +1699,41 @@ int * d; + * end of b and the position pos + len. + */ + int binsertch (bstring b, int pos, int len, unsigned char fill) { +-int d, l; ++int d, l, i; + + if (pos < 0 || b == NULL || b->slen < 0 || b->mlen < b->slen || +- len < 0) return BSTR_ERR; ++ b->mlen <= 0 || len < 0) return BSTR_ERR; + + /* Compute the two possible end pointers */ + d = b->slen + len; + l = pos + len; ++ if ((d|l) < 0) return BSTR_ERR; + + if (l > d) { + /* Inserting past the end of the string */ + if (balloc (b, l + 1) != BSTR_OK) return BSTR_ERR; +- len += pos - b->slen; + pos = b->slen; + b->slen = l; + } else { + /* Inserting in the middle of the string */ + if (balloc (b, d + 1) != BSTR_OK) return BSTR_ERR; +- for (l = d - 1; l >= pos + len; l--) { +- b->data[l] = b->data[l - len]; ++ for (i = d - 1; i >= l; i--) { ++ b->data[i] = b->data[i - len]; + } + b->slen = d; + } + +- d = pos + len; +- for (l=pos; l < d; l++) b->data[l] = fill; +- b->data[b->slen] = '\0'; +- return 0; ++ for (i=pos; i < l; i++) b->data[i] = fill; ++ b->data[b->slen] = (unsigned char) '\0'; ++ return BSTR_OK; + } + + /* int bpattern (bstring b, int len) + * +- * Replicate the starting bstring, b, end to end repeatedly until it surpasses +- * len characters, then chop the result to exactly len characters. This +- * function operates in-place. The function will return with BSTR_ERR if b +- * is NULL or of length 0, otherwise BSTR_OK is returned. ++ * Replicate the bstring, b in place, end to end repeatedly until it ++ * surpasses len characters, then chop the result to exactly len characters. ++ * This function operates in-place. The function will return with BSTR_ERR ++ * if b is NULL or of length 0, otherwise BSTR_OK is returned. + */ + int bpattern (bstring b, int len) { + int i, d; +@@ -1165,84 +1744,148 @@ int i, d; + if (d == 1) return bsetstr (b, len, NULL, b->data[0]); + for (i = d; i < len; i++) b->data[i] = b->data[i - d]; + } +- b->data[len] = '\0'; ++ b->data[len] = (unsigned char) '\0'; + b->slen = len; +- return 0; ++ return BSTR_OK; + } + +-/* bstring bgets (bNgetc getcPtr, void * parm, char terminator) ++#define BS_BUFF_SZ (1024) ++ ++/* int breada (bstring b, bNread readPtr, void * parm) ++ * ++ * Use a finite buffer fread-like function readPtr to concatenate to the ++ * bstring b the entire contents of file-like source data in a roughly ++ * efficient way. ++ */ ++int breada (bstring b, bNread readPtr, void * parm) { ++int i, l, n; ++ ++ if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || ++ b->mlen <= 0 || readPtr == NULL) return BSTR_ERR; ++ ++ i = b->slen; ++ for (n=i+16; ; n += ((n < BS_BUFF_SZ) ? n : BS_BUFF_SZ)) { ++ if (BSTR_OK != balloc (b, n + 1)) return BSTR_ERR; ++ l = (int) readPtr ((void *) (b->data + i), 1, n - i, parm); ++ i += l; ++ b->slen = i; ++ if (i < n) break; ++ } ++ ++ b->data[i] = (unsigned char) '\0'; ++ return BSTR_OK; ++} ++ ++/* bstring bread (bNread readPtr, void * parm) ++ * ++ * Use a finite buffer fread-like function readPtr to create a bstring ++ * filled with the entire contents of file-like source data in a roughly ++ * efficient way. ++ */ ++bstring bread (bNread readPtr, void * parm) { ++bstring buff; ++ ++ if (0 > breada (buff = bfromcstr (""), readPtr, parm)) { ++ bdestroy (buff); ++ return NULL; ++ } ++ return buff; ++} ++ ++/* int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to +- * obtain a sequence of characters which are concatenated into a bstring. +- * The stream read is terminated by the passed in terminator function. ++ * obtain a sequence of characters which are concatenated to the end of the ++ * bstring b. The stream read is terminated by the passed in terminator ++ * parameter. + * + * If getcPtr returns with a negative number, or the terminator character +- * (which is appended) is read, then the stream reading is halted as the +- * result obtained thus far is returned. If no characters are read, or +- * there is some other detectable error, NULL is returned. ++ * (which is appended) is read, then the stream reading is halted and the ++ * function returns with a partial result in b. If there is an empty partial ++ * result, 1 is returned. If no characters are read, or there is some other ++ * detectable error, BSTR_ERR is returned. + */ +-bstring bgets (bNgetc getcPtr, void * parm, char terminator) { ++int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) { + int c, d, e; +-bstring buff; + +- if (getcPtr == NULL) return NULL; +- buff = bfromcstr (""); +- if (buff == NULL) return NULL; ++ if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || ++ b->mlen <= 0 || getcPtr == NULL) return BSTR_ERR; + d = 0; +- e = buff->mlen - 2; ++ e = b->mlen - 2; + + while ((c = getcPtr (parm)) >= 0) { + if (d > e) { +- buff->slen = d; +- if (balloc (buff, d + 2) != BSTR_OK) { +- bdestroy (buff); +- return NULL; +- } +- e = buff->mlen - 2; ++ b->slen = d; ++ if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; ++ e = b->mlen - 2; + } +- buff->data[d] = (unsigned char) c; ++ b->data[d] = (unsigned char) c; + d++; + if (c == terminator) break; + } + +- buff->data[d] = '\0'; +- buff->slen = d; ++ b->data[d] = (unsigned char) '\0'; ++ b->slen = d; + +- if (d == 0) { +- bdestroy (buff); +- buff = NULL; ++ return d == 0 && c < 0; ++} ++ ++/* int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) ++ * ++ * Use an fgetc-like single character stream reading function (getcPtr) to ++ * obtain a sequence of characters which are concatenated to the end of the ++ * bstring b. The stream read is terminated by the passed in terminator ++ * parameter. ++ * ++ * If getcPtr returns with a negative number, or the terminator character ++ * (which is appended) is read, then the stream reading is halted and the ++ * function returns with a partial result concatentated to b. If there is ++ * an empty partial result, 1 is returned. If no characters are read, or ++ * there is some other detectable error, BSTR_ERR is returned. ++ */ ++int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) { ++int c, d, e; ++ ++ if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || ++ b->mlen <= 0 || getcPtr == NULL) return BSTR_ERR; ++ d = b->slen; ++ e = b->mlen - 2; ++ ++ while ((c = getcPtr (parm)) >= 0) { ++ if (d > e) { ++ b->slen = d; ++ if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; ++ e = b->mlen - 2; ++ } ++ b->data[d] = (unsigned char) c; ++ d++; ++ if (c == terminator) break; + } + +- return buff; +-} ++ b->data[d] = (unsigned char) '\0'; ++ b->slen = d; + +-#define BS_BUFF_SZ (1024) ++ return d == 0 && c < 0; ++} + +-/* bstring bread (bNread readPtr, void * parm) ++/* bstring bgets (bNgetc getcPtr, void * parm, char terminator) + * +- * Translate a finite buffer fread-like function into something which can +- * fill in a bstring in a roughly efficient way. ++ * Use an fgetc-like single character stream reading function (getcPtr) to ++ * obtain a sequence of characters which are concatenated into a bstring. ++ * The stream read is terminated by the passed in terminator function. ++ * ++ * If getcPtr returns with a negative number, or the terminator character ++ * (which is appended) is read, then the stream reading is halted and the ++ * result obtained thus far is returned. If no characters are read, or ++ * there is some other detectable error, NULL is returned. + */ +-bstring bread (bNread readPtr, void * parm) { +-int i, l, n; ++bstring bgets (bNgetc getcPtr, void * parm, char terminator) { + bstring buff; + +- if (readPtr == NULL) return NULL; +- buff = bfromcstr (""); +- if (buff == NULL) return NULL; +- +- for (i=0, n=16; ; n += ((n < BS_BUFF_SZ) ? n : BS_BUFF_SZ)) { +- if (BSTR_OK != balloc (buff, n + 1)) { +- bdestroy (buff); +- return NULL; +- } +- l = (int) readPtr ((void *) (buff->data + i), 1, n - i, parm); +- i += l; +- buff->slen = i; +- if (i < n) break; ++ if (0 > bgetsa (buff = bfromcstr (""), getcPtr, parm, terminator) || 0 >= buff->slen) { ++ bdestroy (buff); ++ buff = NULL; + } +- +- buff->data[i] = '\0'; + return buff; + } + +@@ -1264,7 +1907,7 @@ struct bStream * bsopen (bNread readPtr, + struct bStream * s; + + if (readPtr == NULL) return NULL; +- s = (struct bStream *) malloc (sizeof (struct bStream)); ++ s = (struct bStream *) bstr__alloc (sizeof (struct bStream)); + if (s == NULL) return NULL; + s->parm = parm; + s->buff = bfromcstr (""); +@@ -1276,7 +1919,7 @@ struct bStream * s; + + /* int bsbufflength (struct bStream * s, int sz) + * +- * Set the length of the buffer used by the bsStream. If sz is zero, the ++ * Set the length of the buffer used by the bStream. If sz is zero, the + * length is not set. This function returns with the previous length. + */ + int bsbufflength (struct bStream * s, int sz) { +@@ -1306,7 +1949,7 @@ void * parm; + parm = s->parm; + s->parm = NULL; + s->isEOF = 1; +- free (s); ++ bstr__free (s); + return parm; + } + +@@ -1318,29 +1961,30 @@ void * parm; + * returned, but will be retained for subsequent read operations. + */ + int bsreadlna (bstring r, struct bStream * s, char terminator) { +-int i, l; ++int i, l, ret, rlo; + char * b; + struct tagbstring x; + +- if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0) +- return BSTR_ERR; ++ if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 || ++ r->slen < 0 || r->mlen < r->slen) return BSTR_ERR; + l = s->buff->slen; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + /* First check if the current buffer holds the terminator */ +- b[l] = terminator; ++ b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; + if (i < l) { +- int ret; + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_OK; + } + ++ rlo = r->slen; ++ + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; +@@ -1348,30 +1992,29 @@ struct tagbstring x; + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { +- balloc (r, r->slen + s->maxBuffSz + 1); ++ if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { +- r->data[r->slen] = '\0'; ++ r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_ERR & -(r->slen == rlo); + } +- b[l] = terminator; ++ b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; +- if (i < l) { +- +- /* Terminator found, push over-read back to buffer */ +- i++; +- r->slen += i; +- s->buff->slen = l - i; +- memcpy (s->buff->data, b + i, l - i); +- r->data[r->slen] = '\0'; +- return BSTR_OK; +- } ++ if (i < l) break; + r->slen += l; + } ++ ++ /* Terminator found, push over-read back to buffer */ ++ i++; ++ r->slen += i; ++ s->buff->slen = l - i; ++ bstr__memcpy (s->buff->data, b + i, l - i); ++ r->data[r->slen] = (unsigned char) '\0'; ++ return BSTR_OK; + } + + /* int bsreadlnsa (bstring r, struct bStream * s, bstring term) +@@ -1381,14 +2024,15 @@ struct tagbstring x; + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +-int bsreadlnsa (bstring r, struct bStream * s, const bstring term) { +-int i, l; ++int bsreadlnsa (bstring r, struct bStream * s, const_bstring term) { ++int i, l, ret, rlo; + unsigned char * b; + struct tagbstring x; + struct charField cf; + +- if (s == NULL || s->buff == NULL || r == NULL || term == NULL +- || term->data == NULL || r->mlen <= 0) return BSTR_ERR; ++ if (s == NULL || s->buff == NULL || r == NULL || term == NULL || ++ term->data == NULL || r->mlen <= 0 || r->slen < 0 || ++ r->mlen < r->slen) return BSTR_ERR; + if (term->slen == 1) return bsreadlna (r, s, term->data[0]); + if (term->slen < 1 || buildCharField (&cf, term)) return BSTR_ERR; + +@@ -1398,17 +2042,18 @@ struct charField cf; + x.data = b; + + /* First check if the current buffer holds the terminator */ +- b[l] = term->data[0]; ++ b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; + if (i < l) { +- int ret; + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_OK; + } + ++ rlo = r->slen; ++ + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; +@@ -1416,30 +2061,30 @@ struct charField cf; + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { +- balloc (r, r->slen + s->maxBuffSz + 1); ++ if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) return BSTR_ERR; + b = (unsigned char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { +- r->data[r->slen] = '\0'; ++ r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_ERR & -(r->slen == rlo); + } + +- b[l] = term->data[0]; ++ b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; +- if (i < l) { +- /* Terminator found, push over-read back to buffer */ +- i++; +- r->slen += i; +- s->buff->slen = l - i; +- memcpy (s->buff->data, b + i, l - i); +- r->data[r->slen] = '\0'; +- return BSTR_OK; +- } ++ if (i < l) break; + r->slen += l; + } ++ ++ /* Terminator found, push over-read back to buffer */ ++ i++; ++ r->slen += i; ++ s->buff->slen = l - i; ++ bstr__memcpy (s->buff->data, b + i, l - i); ++ r->data[r->slen] = (unsigned char) '\0'; ++ return BSTR_OK; + } + + /* int bsreada (bstring r, struct bStream * s, int n) +@@ -1451,29 +2096,45 @@ struct charField cf; + * additional characters from the core stream beyond virtual stream pointer. + */ + int bsreada (bstring r, struct bStream * s, int n) { +-int l; ++int l, ret, orslen; + char * b; + struct tagbstring x; + + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 +- || r->slen < 0 || n <= 0) return BSTR_ERR; ++ || r->slen < 0 || r->mlen < r->slen || n <= 0) return BSTR_ERR; + + n += r->slen; + if (n <= 0) return BSTR_ERR; + + l = s->buff->slen; ++ ++ orslen = r->slen; ++ ++ if (0 == l) { ++ if (s->isEOF) return BSTR_ERR; ++ if (r->mlen > n) { ++ l = (int) s->readFnPtr (r->data + r->slen, 1, n - r->slen, s->parm); ++ if (0 >= l || l > n - r->slen) { ++ s->isEOF = 1; ++ return BSTR_ERR; ++ } ++ r->slen += l; ++ r->data[r->slen] = (unsigned char) '\0'; ++ return 0; ++ } ++ } ++ + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + do { + if (l + r->slen >= n) { +- int ret; + x.slen = n - r->slen; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, x.slen); +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_ERR & -(r->slen == orslen); + } + + x.slen = l; +@@ -1488,7 +2149,7 @@ struct tagbstring x; + if (l < 0) l = 0; + if (l == 0) s->isEOF = 1; + s->buff->slen = l; +- return BSTR_ERR & -(r->slen == 0); ++ return BSTR_ERR & -(r->slen == orslen); + } + + /* int bsreadln (bstring r, struct bStream * s, char terminator) +@@ -1513,7 +2174,7 @@ int bsreadln (bstring r, struct bStream + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +-int bsreadlns (bstring r, struct bStream * s, const bstring term) { ++int bsreadlns (bstring r, struct bStream * s, const_bstring term) { + if (s == NULL || s->buff == NULL || r == NULL || term == NULL + || term->data == NULL || r->mlen <= 0) return BSTR_ERR; + if (term->slen == 1) return bsreadln (r, s, term->data[0]); +@@ -1539,15 +2200,15 @@ int bsread (bstring r, struct bStream * + return bsreada (r, s, n); + } + +-/* int bsunread (struct bStream * s, const bstring b) ++/* int bsunread (struct bStream * s, const_bstring b) + * + * Insert a bstring into the bStream at the current position. These + * characters will be read prior to those that actually come from the core + * stream. + */ +-int bsunread (struct bStream * s, const bstring b) { ++int bsunread (struct bStream * s, const_bstring b) { + if (s == NULL || s->buff == NULL) return BSTR_ERR; +- return binsert (s->buff, 0, b, '?'); ++ return binsert (s->buff, 0, b, (unsigned char) '?'); + } + + /* int bspeek (bstring r, const struct bStream * s) +@@ -1556,27 +2217,23 @@ int bsunread (struct bStream * s, const + * read prior to reads from the core stream. + */ + int bspeek (bstring r, const struct bStream * s) { +- if (s == NULL || s->buff == NULL || r == NULL || r->slen > r->mlen || r->slen < 0) return BSTR_ERR; +- r->slen = 0; +- return bconcat (r, s->buff); ++ if (s == NULL || s->buff == NULL) return BSTR_ERR; ++ return bassign (r, s->buff); + } + +-/* bstring bjoin (const struct bstrList * bl, const bstring sep); ++/* bstring bjoin (const struct bstrList * bl, const_bstring sep); + * + * Join the entries of a bstrList into one bstring by sequentially + * concatenating them with the sep string in between. If there is an error + * NULL is returned, otherwise a bstring with the correct result is returned. + */ +-bstring bjoin (const struct bstrList * bl, const bstring sep) { ++bstring bjoin (const struct bstrList * bl, const_bstring sep) { + bstring b; + int i, c, v; + + if (bl == NULL || bl->qty < 0) return NULL; + if (sep != NULL && (sep->slen < 0 || sep->data == NULL)) return NULL; + +- b = (bstring) malloc (sizeof (struct tagbstring)); +- if (b == NULL) return NULL; /* Out of memory */ +- + for (i = 0, c = 1; i < bl->qty; i++) { + v = bl->entry[i]->slen; + if (v < 0) return NULL; /* Invalid input */ +@@ -1585,30 +2242,35 @@ int i, c, v; + } + + if (sep != NULL) c += (bl->qty - 1) * sep->slen; +- b->data = (unsigned char *) malloc (c); +- if (b->data == NULL) return NULL; ++ ++ b = (bstring) bstr__alloc (sizeof (struct tagbstring)); ++ if (NULL == b) return NULL; /* Out of memory */ ++ b->data = (unsigned char *) bstr__alloc (c); ++ if (b->data == NULL) { ++ bstr__free (b); ++ return NULL; ++ } + + b->mlen = c; + b->slen = c-1; + + for (i = 0, c = 0; i < bl->qty; i++) { + if (i > 0 && sep != NULL) { +- memcpy (b->data + c, sep->data, sep->slen); ++ bstr__memcpy (b->data + c, sep->data, sep->slen); + c += sep->slen; + } + v = bl->entry[i]->slen; +- memcpy (b->data + c, bl->entry[i]->data, v); ++ bstr__memcpy (b->data + c, bl->entry[i]->data, v); + c += v; +- + } +- b->data[c] = '\0'; ++ b->data[c] = (unsigned char) '\0'; + return b; + } + + #define BSSSC_BUFF_LEN (256) + +-/* int bssplitscb (struct bStream * s, const bstring splitStr, +- * int (* cb) (void * parm, int ofs, const bstring entry), void * parm) ++/* int bssplitscb (struct bStream * s, const_bstring splitStr, ++ * int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) + * + * Iterate the set of disjoint sequential substrings read from a stream + * divided by any of the characters in splitStr. An empty splitStr causes +@@ -1624,8 +2286,8 @@ int i, c, v; + * return with a negative value, otherwise bssplitscb will continue in an + * undefined manner. + */ +-int bssplitscb (struct bStream * s, const bstring splitStr, +- int (* cb) (void * parm, int ofs, const bstring entry), void * parm) { ++int bssplitscb (struct bStream * s, const_bstring splitStr, ++ int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { + struct charField chrs; + bstring buff; + int i, p, ret; +@@ -1646,16 +2308,21 @@ int i, p, ret; + if (i >= buff->slen) { + bsreada (buff, s, BSSSC_BUFF_LEN); + if (i >= buff->slen) { +- if ((ret = cb (parm, p, buff)) > 0) ret = 0; ++ if (0 < (ret = cb (parm, p, buff))) ret = 0; + break; + } + } + if (testInCharField (&chrs, buff->data[i])) { + struct tagbstring t; ++ unsigned char c; ++ + blk2tbstr (t, buff->data + i + 1, buff->slen - (i + 1)); + if ((ret = bsunread (s, &t)) < 0) break; + buff->slen = i; ++ c = buff->data[i]; ++ buff->data[i] = (unsigned char) '\0'; + if ((ret = cb (parm, p, buff)) < 0) break; ++ buff->data[i] = c; + buff->slen = 0; + p += i + 1; + i = -1; +@@ -1668,25 +2335,155 @@ int i, p, ret; + return ret; + } + ++/* int bssplitstrcb (struct bStream * s, const_bstring splitStr, ++ * int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) ++ * ++ * Iterate the set of disjoint sequential substrings read from a stream ++ * divided by the entire substring splitStr. An empty splitStr causes ++ * each character of the stream to be iterated. ++ * ++ * Note: At the point of calling the cb function, the bStream pointer is ++ * pointed exactly at the position right after having read the split ++ * character. The cb function can act on the stream by causing the bStream ++ * pointer to move, and bssplitscb will continue by starting the next split ++ * at the position of the pointer after the return from cb. ++ * ++ * However, if the cb causes the bStream s to be destroyed then the cb must ++ * return with a negative value, otherwise bssplitscb will continue in an ++ * undefined manner. ++ */ ++int bssplitstrcb (struct bStream * s, const_bstring splitStr, ++ int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { ++bstring buff; ++int i, p, ret; ++ ++ if (cb == NULL || s == NULL || s->readFnPtr == NULL ++ || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; ++ ++ if (splitStr->slen == 1) return bssplitscb (s, splitStr, cb, parm); ++ ++ if (NULL == (buff = bfromcstr (""))) return BSTR_ERR; ++ ++ if (splitStr->slen == 0) { ++ for (i=0; bsreada (buff, s, BSSSC_BUFF_LEN) >= 0; i++) { ++ if ((ret = cb (parm, 0, buff)) < 0) { ++ bdestroy (buff); ++ return ret; ++ } ++ buff->slen = 0; ++ } ++ return BSTR_OK; ++ } else { ++ ret = p = i = 0; ++ for (i=p=0;;) { ++ if ((ret = binstr (buff, 0, splitStr)) >= 0) { ++ struct tagbstring t; ++ blk2tbstr (t, buff->data, ret); ++ i = ret + splitStr->slen; ++ if ((ret = cb (parm, p, &t)) < 0) break; ++ p += i; ++ bdelete (buff, 0, i); ++ } else { ++ bsreada (buff, s, BSSSC_BUFF_LEN); ++ if (bseof (s)) { ++ if ((ret = cb (parm, p, buff)) > 0) ret = 0; ++ break; ++ } ++ } ++ } ++ } ++ ++ bdestroy (buff); ++ return ret; ++} ++ ++/* int bstrListCreate (void) ++ * ++ * Create a bstrList. ++ */ ++struct bstrList * bstrListCreate (void) { ++struct bstrList * sl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); ++ if (sl) { ++ sl->entry = (bstring *) bstr__alloc (1*sizeof (bstring)); ++ if (!sl->entry) { ++ bstr__free (sl); ++ sl = NULL; ++ } else { ++ sl->qty = 0; ++ sl->mlen = 1; ++ } ++ } ++ return sl; ++} ++ + /* int bstrListDestroy (struct bstrList * sl) + * +- * Destroy a bstrList that has been created by bsplit or bsplits. ++ * Destroy a bstrList that has been created by bsplit, bsplits or bstrListCreate. + */ + int bstrListDestroy (struct bstrList * sl) { + int i; +- if (sl == NULL) return BSTR_ERR; ++ if (sl == NULL || sl->qty < 0) return BSTR_ERR; + for (i=0; i < sl->qty; i++) { + if (sl->entry[i]) { + bdestroy (sl->entry[i]); + sl->entry[i] = NULL; + } + } +- sl->qty = -1; +- free (sl); ++ sl->qty = -1; ++ sl->mlen = -1; ++ bstr__free (sl->entry); ++ sl->entry = NULL; ++ bstr__free (sl); ++ return BSTR_OK; ++} ++ ++/* int bstrListAlloc (struct bstrList * sl, int msz) ++ * ++ * Ensure that there is memory for at least msz number of entries for the ++ * list. ++ */ ++int bstrListAlloc (struct bstrList * sl, int msz) { ++bstring * l; ++int smsz; ++size_t nsz; ++ if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || sl->qty > sl->mlen) return BSTR_ERR; ++ if (sl->mlen >= msz) return BSTR_OK; ++ smsz = snapUpSize (msz); ++ nsz = ((size_t) smsz) * sizeof (bstring); ++ if (nsz < (size_t) smsz) return BSTR_ERR; ++ l = (bstring *) bstr__realloc (sl->entry, nsz); ++ if (!l) { ++ smsz = msz; ++ nsz = ((size_t) smsz) * sizeof (bstring); ++ l = (bstring *) bstr__realloc (sl->entry, nsz); ++ if (!l) return BSTR_ERR; ++ } ++ sl->mlen = smsz; ++ sl->entry = l; ++ return BSTR_OK; ++} ++ ++/* int bstrListAllocMin (struct bstrList * sl, int msz) ++ * ++ * Try to allocate the minimum amount of memory for the list to include at ++ * least msz entries or sl->qty whichever is greater. ++ */ ++int bstrListAllocMin (struct bstrList * sl, int msz) { ++bstring * l; ++size_t nsz; ++ if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || sl->qty > sl->mlen) return BSTR_ERR; ++ if (msz < sl->qty) msz = sl->qty; ++ if (sl->mlen == msz) return BSTR_OK; ++ nsz = ((size_t) msz) * sizeof (bstring); ++ if (nsz < (size_t) msz) return BSTR_ERR; ++ l = (bstring *) bstr__realloc (sl->entry, nsz); ++ if (!l) return BSTR_ERR; ++ sl->mlen = msz; ++ sl->entry = l; + return BSTR_OK; + } + +-/* int bsplitcb (const bstring str, unsigned char splitChar, int pos, ++/* int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by the +@@ -1701,7 +2498,7 @@ int i; + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitcb will continue in an undefined manner. + */ +-int bsplitcb (const bstring str, unsigned char splitChar, int pos, ++int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { + int i, p, ret; + +@@ -1715,11 +2512,11 @@ int i, p, ret; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; +- } while (p < str->slen); +- return 0; ++ } while (p <= str->slen); ++ return BSTR_OK; + } + +-/* int bsplitscb (const bstring str, const bstring splitStr, int pos, ++/* int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by any +@@ -1735,7 +2532,7 @@ int i, p, ret; + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitscb will continue in an undefined manner. + */ +-int bsplitscb (const bstring str, const bstring splitStr, int pos, ++int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { + struct charField chrs; + int i, p, ret; +@@ -1759,56 +2556,102 @@ int i, p, ret; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; +- } while (p < str->slen); +- return 0; ++ } while (p <= str->slen); ++ return BSTR_OK; + } + +-#include ++/* int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, ++ * int (* cb) (void * parm, int ofs, int len), void * parm) ++ * ++ * Iterate the set of disjoint sequential substrings over str divided by the ++ * substring splitStr. An empty splitStr causes the whole str to be ++ * iterated once. ++ * ++ * Note: Non-destructive modification of str from within the cb function ++ * while performing this split is not undefined. bsplitstrcb behaves in ++ * sequential lock step with calls to cb. I.e., after returning from a cb ++ * that return a non-negative integer, bsplitscb continues from the position ++ * 1 character after the last detected split character and it will halt ++ * immediately if the length of str falls below this point. However, if the ++ * cb function destroys str, then it *must* return with a negative value, ++ * otherwise bsplitscb will continue in an undefined manner. ++ */ ++int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, ++ int (* cb) (void * parm, int ofs, int len), void * parm) { ++int i, p, ret; + +-#ifdef offsetof +-#define BLE_SZ (offsetof (struct bstrList, entry)) +-#else +-#define BLE_SZ (sizeof (struct bstrList)) +-#endif ++ if (cb == NULL || str == NULL || pos < 0 || pos > str->slen ++ || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; ++ ++ if (0 == splitStr->slen) { ++ for (i=pos; i < str->slen; i++) { ++ if ((ret = cb (parm, i, 1)) < 0) return ret; ++ } ++ return BSTR_OK; ++ } ++ ++ if (splitStr->slen == 1) ++ return bsplitcb (str, splitStr->data[0], pos, cb, parm); ++ ++ for (i=p=pos; i <= str->slen - splitStr->slen; i++) { ++ if (0 == bstr__memcmp (splitStr->data, str->data + i, splitStr->slen)) { ++ if ((ret = cb (parm, p, i - p)) < 0) return ret; ++ i += splitStr->slen; ++ p = i; ++ } ++ } ++ if ((ret = cb (parm, p, str->slen - p)) < 0) return ret; ++ return BSTR_OK; ++} + + struct genBstrList { + bstring b; + struct bstrList * bl; +- int mlen; + }; + + static int bscb (void * parm, int ofs, int len) { +-struct genBstrList * g = (struct genBstrList *)parm; +- if (g->bl->qty >= g->mlen) { +- int mlen = g->mlen * 2; +- struct bstrList * tbl; ++struct genBstrList * g = (struct genBstrList *) parm; ++ if (g->bl->qty >= g->bl->mlen) { ++ int mlen = g->bl->mlen * 2; ++ bstring * tbl; ++ ++ while (g->bl->qty >= mlen) { ++ if (mlen < g->bl->mlen) return BSTR_ERR; ++ mlen += mlen; ++ } + +- while (g->bl->qty >= mlen) mlen += mlen; +- tbl = (struct bstrList *) realloc (g->bl, BLE_SZ + sizeof (bstring) * (mlen)); ++ tbl = (bstring *) bstr__realloc (g->bl->entry, sizeof (bstring) * mlen); + if (tbl == NULL) return BSTR_ERR; +- g->bl = tbl; +- g->mlen = mlen; ++ ++ g->bl->entry = tbl; ++ g->bl->mlen = mlen; + } + + g->bl->entry[g->bl->qty] = bmidstr (g->b, ofs, len); + g->bl->qty++; +- return 0; ++ return BSTR_OK; + } + +-/* struct bstrList * bsplit (const bstring str, unsigned char splitChar) ++/* struct bstrList * bsplit (const_bstring str, unsigned char splitChar) + * + * Create an array of sequential substrings from str divided by the character + * splitChar. + */ +-struct bstrList * bsplit (const bstring str, unsigned char splitChar) { ++struct bstrList * bsplit (const_bstring str, unsigned char splitChar) { + struct genBstrList g; + + if (str == NULL || str->data == NULL || str->slen < 0) return NULL; + +- g.b = str; +- g.mlen = 4; +- g.bl = (struct bstrList *) malloc (BLE_SZ + sizeof (bstring) * g.mlen); ++ g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; ++ g.bl->mlen = 4; ++ g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); ++ if (NULL == g.bl->entry) { ++ bstr__free (g.bl); ++ return NULL; ++ } ++ ++ g.b = (bstring) str; + g.bl->qty = 0; + if (bsplitcb (str, splitChar, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); +@@ -1817,24 +2660,58 @@ struct genBstrList g; + return g.bl; + } + +-/* struct bstrList * bsplits (const bstring str, bstring splitStr) ++/* struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) ++ * ++ * Create an array of sequential substrings from str divided by the entire ++ * substring splitStr. ++ */ ++struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) { ++struct genBstrList g; ++ ++ if (str == NULL || str->data == NULL || str->slen < 0) return NULL; ++ ++ g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); ++ if (g.bl == NULL) return NULL; ++ g.bl->mlen = 4; ++ g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); ++ if (NULL == g.bl->entry) { ++ bstr__free (g.bl); ++ return NULL; ++ } ++ ++ g.b = (bstring) str; ++ g.bl->qty = 0; ++ if (bsplitstrcb (str, splitStr, 0, bscb, &g) < 0) { ++ bstrListDestroy (g.bl); ++ return NULL; ++ } ++ return g.bl; ++} ++ ++/* struct bstrList * bsplits (const_bstring str, bstring splitStr) + * + * Create an array of sequential substrings from str divided by any of the + * characters in splitStr. An empty splitStr causes a single entry bstrList + * containing a copy of str to be returned. + */ +-struct bstrList * bsplits (const bstring str, const bstring splitStr) { ++struct bstrList * bsplits (const_bstring str, const_bstring splitStr) { + struct genBstrList g; + + if ( str == NULL || str->slen < 0 || str->data == NULL || + splitStr == NULL || splitStr->slen < 0 || splitStr->data == NULL) + return NULL; + +- g.b = str; +- g.mlen = 4; +- g.bl = (struct bstrList *) malloc (BLE_SZ + sizeof (bstring) * g.mlen); ++ g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; ++ g.bl->mlen = 4; ++ g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); ++ if (NULL == g.bl->entry) { ++ bstr__free (g.bl); ++ return NULL; ++ } ++ g.b = (bstring) str; + g.bl->qty = 0; ++ + if (bsplitscb (str, splitStr, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; +@@ -1842,7 +2719,7 @@ struct genBstrList g; + return g.bl; + } + +-#if defined(__TURBOC__) ++#if defined (__TURBOC__) && !defined (__BORLANDC__) + # ifndef BSTRLIB_NOVSNP + # define BSTRLIB_NOVSNP + # endif +@@ -1869,6 +2746,8 @@ extern int vsnprintf (char *buf, size_t + #endif + #endif + ++#if !defined (BSTRLIB_NOVSNP) ++ + #ifndef START_VSNBUFF + #define START_VSNBUFF (16) + #endif +@@ -1880,16 +2759,18 @@ extern int vsnprintf (char *buf, size_t + than n, then changing n to the return value will reduce the number of + iterations required. */ + +-/* bstring bformata (bstring b, const char * fmt, ...) ++/* int bformata (bstring b, const char * fmt, ...) + * +- * Takes the same parameters as printf (), but rather than outputting results +- * to stdio, it forms appends the results to a bstring which contains what +- * would have been output. Note that if there is an early generation of a +- * '\0' character, the bstring will be truncated to this end point. ++ * After the first parameter, it takes the same parameters as printf (), but ++ * rather than outputting results to stdio, it appends the results to ++ * a bstring which contains what would have been output. Note that if there ++ * is an early generation of a '\0' character, the bstring will be truncated ++ * to this end point. + */ + int bformata (bstring b, const char * fmt, ...) { + va_list arglist; +-int n, slen, r; ++bstring buff; ++int n, r; + + if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 + || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; +@@ -1898,25 +2779,81 @@ int n, slen, r; + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + +- slen = b->slen; +- if ((n = 2*strlen (fmt)) < START_VSNBUFF) n = START_VSNBUFF; ++ if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) { ++ n = 1; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; ++ } + + for (;;) { +- if (BSTR_OK != balloc (b, n + 2 + slen)) return BSTR_ERR; ++ va_start (arglist, fmt); ++ exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); ++ va_end (arglist); ++ ++ buff->data[n] = (unsigned char) '\0'; ++ buff->slen = (int) (strlen) ((char *) buff->data); ++ ++ if (buff->slen < n) break; + ++ if (r > n) n = r; else n += n; ++ ++ if (BSTR_OK != balloc (buff, n + 2)) { ++ bdestroy (buff); ++ return BSTR_ERR; ++ } ++ } ++ ++ r = bconcat (b, buff); ++ bdestroy (buff); ++ return r; ++} ++ ++/* int bassignformat (bstring b, const char * fmt, ...) ++ * ++ * After the first parameter, it takes the same parameters as printf (), but ++ * rather than outputting results to stdio, it outputs the results to ++ * the bstring parameter b. Note that if there is an early generation of a ++ * '\0' character, the bstring will be truncated to this end point. ++ */ ++int bassignformat (bstring b, const char * fmt, ...) { ++va_list arglist; ++bstring buff; ++int n, r; ++ ++ if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 ++ || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; ++ ++ /* Since the length is not determinable beforehand, a search is ++ performed using the truncating "vsnprintf" call (to avoid buffer ++ overflows) on increasing potential sizes for the output result. */ ++ ++ if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) { ++ n = 1; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; ++ } ++ ++ for (;;) { + va_start (arglist, fmt); +- exvsnprintf (r, (char *) b->data + slen, n + 1, fmt, arglist); ++ exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + +- b->data[n + slen] = '\0'; +- b->slen = slen + (int) (strlen) ((char *) b->data + slen); ++ buff->data[n] = (unsigned char) '\0'; ++ buff->slen = (int) (strlen) ((char *) buff->data); + +- if (b->slen - slen < n) break; ++ if (buff->slen < n) break; + + if (r > n) n = r; else n += n; ++ ++ if (BSTR_OK != balloc (buff, n + 2)) { ++ bdestroy (buff); ++ return BSTR_ERR; ++ } + } + +- return 0; ++ r = bassign (b, buff); ++ bdestroy (buff); ++ return r; + } + + /* bstring bformat (const char * fmt, ...) +@@ -1937,27 +2874,82 @@ int n, r; + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + +- if ((n = 2*strlen (fmt)) < START_VSNBUFF) n = START_VSNBUFF; +- buff = bfromcstr (""); ++ if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) { ++ n = 1; ++ if (NULL == (buff = bfromcstralloc (n + 2, ""))) return NULL; ++ } + + for (;;) { +- if (BSTR_OK != balloc (buff, n + 2)) { +- bdestroy (buff); +- return NULL; +- } +- + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + +- buff->data[n] = '\0'; ++ buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; ++ ++ if (BSTR_OK != balloc (buff, n + 2)) { ++ bdestroy (buff); ++ return NULL; ++ } + } + + return buff; + } + ++/* int bvcformata (bstring b, int count, const char * fmt, va_list arglist) ++ * ++ * The bvcformata function formats data under control of the format control ++ * string fmt and attempts to append the result to b. The fmt parameter is ++ * the same as that of the printf function. The variable argument list is ++ * replaced with arglist, which has been initialized by the va_start macro. ++ * The size of the output is upper bounded by count. If the required output ++ * exceeds count, the string b is not augmented with any contents and a value ++ * below BSTR_ERR is returned. If a value below -count is returned then it ++ * is recommended that the negative of this value be used as an update to the ++ * count in a subsequent pass. On other errors, such as running out of ++ * memory, parameter errors or numeric wrap around BSTR_ERR is returned. ++ * BSTR_OK is returned when the output is successfully generated and ++ * appended to b. ++ * ++ * Note: There is no sanity checking of arglist, and this function is ++ * destructive of the contents of b from the b->slen point onward. If there ++ * is an early generation of a '\0' character, the bstring will be truncated ++ * to this end point. ++ */ ++int bvcformata (bstring b, int count, const char * fmt, va_list arg) { ++int n, r, l; ++ ++ if (b == NULL || fmt == NULL || count <= 0 || b->data == NULL ++ || b->mlen <= 0 || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; ++ ++ if (count > (n = b->slen + count) + 2) return BSTR_ERR; ++ if (BSTR_OK != balloc (b, n + 2)) return BSTR_ERR; ++ ++ exvsnprintf (r, (char *) b->data + b->slen, count + 2, fmt, arg); ++ ++ /* Did the operation complete successfully within bounds? */ ++ ++ if (n >= (l = b->slen + (int) (strlen) ((const char *) b->data + b->slen))) { ++ b->slen = l; ++ return BSTR_OK; ++ } ++ ++ /* Abort, since the buffer was not large enough. The return value ++ tries to help set what the retry length should be. */ ++ ++ b->data[b->slen] = '\0'; ++ if (r > count+1) l = r; else { ++ l = count+count; ++ if (count > l) l = INT_MAX; ++ } ++ n = -l; ++ if (n > BSTR_ERR-1) n = BSTR_ERR-1; ++ return n; ++} ++ ++#endif +diff -urp pads-1.2.orig/lib/bstring/bstrlib.h pads-1.2/lib/bstring/bstrlib.h +--- pads-1.2.orig/lib/bstring/bstrlib.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/lib/bstring/bstrlib.h 2008-07-10 18:09:06.000000000 -0400 +@@ -1,8 +1,8 @@ + /* + * This source file is part of the bstring string library. This code was +- * written by Paul Hsieh in 2002-2004, and is covered by the BSD open source +- * license. Refer to the accompanying documentation for details on usage and +- * license. ++ * written by Paul Hsieh in 2002-2008, and is covered by the BSD open source ++ * license and the GPL. Refer to the accompanying documentation for details ++ * on usage and license. + */ + + /* +@@ -21,80 +21,140 @@ extern "C" { + #include + #include + #include ++#include ++ ++#if !defined (BSTRLIB_VSNP_OK) && !defined (BSTRLIB_NOVSNP) ++# if defined (__TURBOC__) && !defined (__BORLANDC__) ++# define BSTRLIB_NOVSNP ++# endif ++#endif + + #define BSTR_ERR (-1) + #define BSTR_OK (0) ++#define BSTR_BS_BUFF_LENGTH_GET (0) + + typedef struct tagbstring * bstring; ++typedef const struct tagbstring * const_bstring; + + /* Copy functions */ + #define cstr2bstr bfromcstr + extern bstring bfromcstr (const char * str); ++extern bstring bfromcstralloc (int mlen, const char * str); + extern bstring blk2bstr (const void * blk, int len); +-extern char * bstr2cstr (const bstring s, char z); ++extern char * bstr2cstr (const_bstring s, char z); + extern int bcstrfree (char * s); +-extern bstring bstrcpy (const bstring b1); +-extern int bassign (bstring a, const bstring b); ++extern bstring bstrcpy (const_bstring b1); ++extern int bassign (bstring a, const_bstring b); ++extern int bassignmidstr (bstring a, const_bstring b, int left, int len); ++extern int bassigncstr (bstring a, const char * str); ++extern int bassignblk (bstring a, const void * s, int len); + + /* Destroy function */ + extern int bdestroy (bstring b); + +-/* Space allocation hinting function */ ++/* Space allocation hinting functions */ + extern int balloc (bstring s, int len); ++extern int ballocmin (bstring b, int len); + + /* Substring extraction */ +-extern bstring bmidstr (const bstring b, int left, int len); ++extern bstring bmidstr (const_bstring b, int left, int len); + + /* Various standard manipulations */ +-extern int bconcat (bstring b0, const bstring b1); ++extern int bconcat (bstring b0, const_bstring b1); + extern int bconchar (bstring b0, char c); + extern int bcatcstr (bstring b, const char * s); +-extern int bcatblk (bstring b, const unsigned char * s, int len); +-extern int binsert (bstring s1, int pos, const bstring s2, unsigned char fill); ++extern int bcatblk (bstring b, const void * s, int len); ++extern int binsert (bstring s1, int pos, const_bstring s2, unsigned char fill); + extern int binsertch (bstring s1, int pos, int len, unsigned char fill); +-extern int breplace (bstring b1, int pos, int len, const bstring b2, unsigned char fill); ++extern int breplace (bstring b1, int pos, int len, const_bstring b2, unsigned char fill); + extern int bdelete (bstring s1, int pos, int len); +-extern int bsetstr (bstring b0, int pos, const bstring b1, unsigned char fill); ++extern int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill); ++extern int btrunc (bstring b, int n); + + /* Scan/search functions */ +-extern int bstricmp (const bstring b0, const bstring b1); +-extern int bstrnicmp (const bstring b0, const bstring b1, int n); +-extern int biseqcaseless (const bstring b0, const bstring b1); +-extern int biseq (const bstring b0, const bstring b1); +-extern int biseqcstr (const bstring b, const char * s); +-extern int bstrcmp (const bstring b0, const bstring b1); +-extern int bstrncmp (const bstring b0, const bstring b1, int n); +-extern int binstr (const bstring s1, int pos, const bstring s2); +-extern int binstrr (const bstring s1, int pos, const bstring s2); +-extern int bstrchr (const bstring b, int c); +-extern int bstrrchr (const bstring b, int c); +-extern int binchr (const bstring b0, int pos, const bstring b1); +-extern int binchrr (const bstring b0, int pos, const bstring b1); +-extern int bninchr (const bstring b0, int pos, const bstring b1); +-extern int bninchrr (const bstring b0, int pos, const bstring b1); +-extern int bfindreplace (bstring b, const bstring find, const bstring repl, int pos); ++extern int bstricmp (const_bstring b0, const_bstring b1); ++extern int bstrnicmp (const_bstring b0, const_bstring b1, int n); ++extern int biseqcaseless (const_bstring b0, const_bstring b1); ++extern int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len); ++extern int biseq (const_bstring b0, const_bstring b1); ++extern int bisstemeqblk (const_bstring b0, const void * blk, int len); ++extern int biseqcstr (const_bstring b, const char * s); ++extern int biseqcstrcaseless (const_bstring b, const char * s); ++extern int bstrcmp (const_bstring b0, const_bstring b1); ++extern int bstrncmp (const_bstring b0, const_bstring b1, int n); ++extern int binstr (const_bstring s1, int pos, const_bstring s2); ++extern int binstrr (const_bstring s1, int pos, const_bstring s2); ++extern int binstrcaseless (const_bstring s1, int pos, const_bstring s2); ++extern int binstrrcaseless (const_bstring s1, int pos, const_bstring s2); ++extern int bstrchrp (const_bstring b, int c, int pos); ++extern int bstrrchrp (const_bstring b, int c, int pos); ++#define bstrchr(b,c) bstrchrp ((b), (c), 0) ++#define bstrrchr(b,c) bstrrchrp ((b), (c), blength(b)-1) ++extern int binchr (const_bstring b0, int pos, const_bstring b1); ++extern int binchrr (const_bstring b0, int pos, const_bstring b1); ++extern int bninchr (const_bstring b0, int pos, const_bstring b1); ++extern int bninchrr (const_bstring b0, int pos, const_bstring b1); ++extern int bfindreplace (bstring b, const_bstring find, const_bstring repl, int pos); ++extern int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, int pos); + ++/* List of string container functions */ + struct bstrList { +- int qty; +- bstring entry[1]; ++ int qty, mlen; ++ bstring * entry; + }; ++extern struct bstrList * bstrListCreate (void); ++extern int bstrListDestroy (struct bstrList * sl); ++extern int bstrListAlloc (struct bstrList * sl, int msz); ++extern int bstrListAllocMin (struct bstrList * sl, int msz); + + /* String split and join functions */ +-extern struct bstrList * bsplit (const bstring str, unsigned char splitChar); +-extern struct bstrList * bsplits (const bstring str, const bstring splitStr); +-extern bstring bjoin (const struct bstrList * bl, const bstring sep); +-extern int bstrListDestroy (struct bstrList * sl); +-extern int bsplitcb (const bstring str, unsigned char splitChar, int pos, ++extern struct bstrList * bsplit (const_bstring str, unsigned char splitChar); ++extern struct bstrList * bsplits (const_bstring str, const_bstring splitStr); ++extern struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr); ++extern bstring bjoin (const struct bstrList * bl, const_bstring sep); ++extern int bsplitcb (const_bstring str, unsigned char splitChar, int pos, ++ int (* cb) (void * parm, int ofs, int len), void * parm); ++extern int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); +-extern int bsplitscb (const bstring str, const bstring splitStr, int pos, ++extern int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); + + /* Miscellaneous functions */ + extern int bpattern (bstring b, int len); + extern int btoupper (bstring b); + extern int btolower (bstring b); ++extern int bltrimws (bstring b); ++extern int brtrimws (bstring b); ++extern int btrimws (bstring b); ++ ++#if !defined (BSTRLIB_NOVSNP) + extern bstring bformat (const char * fmt, ...); + extern int bformata (bstring b, const char * fmt, ...); ++extern int bassignformat (bstring b, const char * fmt, ...); ++extern int bvcformata (bstring b, int count, const char * fmt, va_list arglist); ++ ++#define bvformata(ret, b, fmt, lastarg) { \ ++bstring bstrtmp_b = (b); \ ++const char * bstrtmp_fmt = (fmt); \ ++int bstrtmp_r = BSTR_ERR, bstrtmp_sz = 16; \ ++ for (;;) { \ ++ va_list bstrtmp_arglist; \ ++ va_start (bstrtmp_arglist, lastarg); \ ++ bstrtmp_r = bvcformata (bstrtmp_b, bstrtmp_sz, bstrtmp_fmt, bstrtmp_arglist); \ ++ va_end (bstrtmp_arglist); \ ++ if (bstrtmp_r >= 0) { /* Everything went ok */ \ ++ bstrtmp_r = BSTR_OK; \ ++ break; \ ++ } else if (-bstrtmp_r <= bstrtmp_sz) { /* A real error? */ \ ++ bstrtmp_r = BSTR_ERR; \ ++ break; \ ++ } \ ++ bstrtmp_sz = -bstrtmp_r; /* Doubled or target size */ \ ++ } \ ++ ret = bstrtmp_r; \ ++} ++ ++#endif + + typedef int (*bNgetc) (void *parm); + typedef size_t (* bNread) (void *buff, size_t elsize, size_t nelem, void *parm); +@@ -102,21 +162,26 @@ typedef size_t (* bNread) (void *buff, s + /* Input functions */ + extern bstring bgets (bNgetc getcPtr, void * parm, char terminator); + extern bstring bread (bNread readPtr, void * parm); ++extern int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator); ++extern int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator); ++extern int breada (bstring b, bNread readPtr, void * parm); + + /* Stream functions */ + extern struct bStream * bsopen (bNread readPtr, void * parm); + extern void * bsclose (struct bStream * s); + extern int bsbufflength (struct bStream * s, int sz); + extern int bsreadln (bstring b, struct bStream * s, char terminator); +-extern int bsreadlns (bstring r, struct bStream * s, const bstring term); ++extern int bsreadlns (bstring r, struct bStream * s, const_bstring term); + extern int bsread (bstring b, struct bStream * s, int n); + extern int bsreadlna (bstring b, struct bStream * s, char terminator); +-extern int bsreadlnsa (bstring r, struct bStream * s, const bstring term); ++extern int bsreadlnsa (bstring r, struct bStream * s, const_bstring term); + extern int bsreada (bstring b, struct bStream * s, int n); +-extern int bsunread (struct bStream * s, const bstring b); ++extern int bsunread (struct bStream * s, const_bstring b); + extern int bspeek (bstring r, const struct bStream * s); +-extern int bssplitscb (struct bStream * s, const bstring splitStr, +- int (* cb) (void * parm, int ofs, const bstring entry), void * parm); ++extern int bssplitscb (struct bStream * s, const_bstring splitStr, ++ int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); ++extern int bssplitstrcb (struct bStream * s, const_bstring splitStr, ++ int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); + extern int bseof (const struct bStream * s); + + struct tagbstring { +@@ -126,9 +191,9 @@ struct tagbstring { + }; + + /* Accessor macros */ +-#define blengthe(b, e) (((b) == (void *)0 || (b)->slen < 0) ? (unsigned int)(e) : ((b)->slen)) ++#define blengthe(b, e) (((b) == (void *)0 || (b)->slen < 0) ? (int)(e) : ((b)->slen)) + #define blength(b) (blengthe ((b), 0)) +-#define bdataofse(b, o, e) (((b) == (void *)0 || (b)->data == (void*)0) ? (unsigned char *)(e) : ((b)->data) + (o)) ++#define bdataofse(b, o, e) (((b) == (void *)0 || (b)->data == (void*)0) ? (char *)(e) : ((char *)(b)->data) + (o)) + #define bdataofs(b, o) (bdataofse ((b), (o), (void *)0)) + #define bdatae(b, e) (bdataofse (b, 0, e)) + #define bdata(b) (bdataofs (b, 0)) +@@ -136,28 +201,101 @@ struct tagbstring { + #define bchar(b, p) bchare ((b), (p), '\0') + + /* Static constant string initialization macro */ +-#define bsStatic(q) {-__LINE__, sizeof(q)-1, (unsigned char *)(q)} ++#define bsStaticMlen(q,m) {(m), (int) sizeof(q)-1, (unsigned char *) ("" q "")} ++#if defined(_MSC_VER) ++# define bsStatic(q) bsStaticMlen(q,-32) ++#endif ++#ifndef bsStatic ++# define bsStatic(q) bsStaticMlen(q,-__LINE__) ++#endif ++ ++/* Static constant block parameter pair */ ++#define bsStaticBlkParms(q) ((void *)("" q "")), ((int) sizeof(q)-1) + + /* Reference building macros */ + #define cstr2tbstr btfromcstr +-#define btfromcstr(t,s) { \ +- (t).data = (unsigned char *) (s); \ +- (t).slen = (int) (strlen) ((char *)(t).data); \ +- (t).mlen = -1; \ ++#define btfromcstr(t,s) { \ ++ (t).data = (unsigned char *) (s); \ ++ (t).slen = ((t).data) ? ((int) (strlen) ((char *)(t).data)) : 0; \ ++ (t).mlen = -1; \ + } + #define blk2tbstr(t,s,l) { \ ++ (t).data = (unsigned char *) (s); \ + (t).slen = l; \ + (t).mlen = -1; \ +- (t).data = (unsigned char *) (s); \ ++} ++#define btfromblk(t,s,l) blk2tbstr(t,s,l) ++#define bmid2tbstr(t,b,p,l) { \ ++ const_bstring bstrtmp_s = (b); \ ++ if (bstrtmp_s && bstrtmp_s->data && bstrtmp_s->slen >= 0) { \ ++ int bstrtmp_left = (p); \ ++ int bstrtmp_len = (l); \ ++ if (bstrtmp_left < 0) { \ ++ bstrtmp_len += bstrtmp_left; \ ++ bstrtmp_left = 0; \ ++ } \ ++ if (bstrtmp_len > bstrtmp_s->slen - bstrtmp_left) \ ++ bstrtmp_len = bstrtmp_s->slen - bstrtmp_left; \ ++ if (bstrtmp_len <= 0) { \ ++ (t).data = (unsigned char *)""; \ ++ (t).slen = 0; \ ++ } else { \ ++ (t).data = bstrtmp_s->data + bstrtmp_left; \ ++ (t).slen = bstrtmp_len; \ ++ } \ ++ } else { \ ++ (t).data = (unsigned char *)""; \ ++ (t).slen = 0; \ ++ } \ ++ (t).mlen = -__LINE__; \ ++} ++#define btfromblkltrimws(t,s,l) { \ ++ int bstrtmp_idx = 0, bstrtmp_len = (l); \ ++ unsigned char * bstrtmp_s = (s); \ ++ if (bstrtmp_s && bstrtmp_len >= 0) { \ ++ for (; bstrtmp_idx < bstrtmp_len; bstrtmp_idx++) { \ ++ if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ ++ } \ ++ } \ ++ (t).data = bstrtmp_s + bstrtmp_idx; \ ++ (t).slen = bstrtmp_len - bstrtmp_idx; \ ++ (t).mlen = -__LINE__; \ ++} ++#define btfromblkrtrimws(t,s,l) { \ ++ int bstrtmp_len = (l) - 1; \ ++ unsigned char * bstrtmp_s = (s); \ ++ if (bstrtmp_s && bstrtmp_len >= 0) { \ ++ for (; bstrtmp_len >= 0; bstrtmp_len--) { \ ++ if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ ++ } \ ++ } \ ++ (t).data = bstrtmp_s; \ ++ (t).slen = bstrtmp_len + 1; \ ++ (t).mlen = -__LINE__; \ ++} ++#define btfromblktrimws(t,s,l) { \ ++ int bstrtmp_idx = 0, bstrtmp_len = (l) - 1; \ ++ unsigned char * bstrtmp_s = (s); \ ++ if (bstrtmp_s && bstrtmp_len >= 0) { \ ++ for (; bstrtmp_idx <= bstrtmp_len; bstrtmp_idx++) { \ ++ if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ ++ } \ ++ for (; bstrtmp_len >= bstrtmp_idx; bstrtmp_len--) { \ ++ if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ ++ } \ ++ } \ ++ (t).data = bstrtmp_s + bstrtmp_idx; \ ++ (t).slen = bstrtmp_len + 1 - bstrtmp_idx; \ ++ (t).mlen = -__LINE__; \ + } + + /* Write protection macros */ +-#define bwriteprotect(t) { if ((t).mlen >= 0) (t).mlen = -1; } +-#define bwriteallow(t) { if ((t).mlen == -1) (t).mlen = (t).slen + ((t).slen == 0); } ++#define bwriteprotect(t) { if ((t).mlen >= 0) (t).mlen = -1; } ++#define bwriteallow(t) { if ((t).mlen == -1) (t).mlen = (t).slen + ((t).slen == 0); } ++#define biswriteprotected(t) ((t).mlen <= 0) + + #ifdef __cplusplus + } + #endif + +- + #endif diff --git a/pads-1.2-cleanup.patch b/pads-1.2-cleanup.patch new file mode 100644 index 0000000..ab63f0c --- /dev/null +++ b/pads-1.2-cleanup.patch @@ -0,0 +1,931 @@ +diff -urp pads-1.2.orig/src/configuration.c pads-1.2/src/configuration.c +--- pads-1.2.orig/src/configuration.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/configuration.c 2008-06-30 13:28:28.000000000 -0400 +@@ -26,6 +26,9 @@ + * + **************************************************************************/ + #include "configuration.h" ++#include "util.h" ++#include "bstring/util.h" ++#include "monnet.h" + + /* Variable Declarations */ + +@@ -44,7 +47,7 @@ void init_configuration (bstring filenam + + verbose_message("config - Processing '%s'.", bdata(filename)); + +- if ((fp = fopen(bdata(filename), "r")) == NULL) { ++ if ((fp = fopen((char *)bdata(filename), "r")) == NULL) { + err_message("Unable to open configuration file - %s", bdata(filename)); + } + +@@ -59,7 +62,7 @@ void init_configuration (bstring filenam + /* Clean Up */ + bdestroy(filedata); + bstrListDestroy(lines); +- close(fp); ++ fclose(fp); + } + + /* ---------------------------------------------------------- +@@ -147,7 +150,7 @@ void parse_line (bstring line) + + } else if ((biseqcstr(param, "network")) == 1) { + /* NETWORK */ +- parse_networks(bdata(value)); ++ parse_networks((char *)bdata(value)); + + } + +diff -urp pads-1.2.orig/src/global.h pads-1.2/src/global.h +--- pads-1.2.orig/src/global.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/global.h 2008-06-30 13:28:28.000000000 -0400 +@@ -25,6 +25,9 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef GLOBAL_HEADER ++#define GLOBAL_HEADER ++ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif +@@ -68,6 +71,7 @@ + #include + #include + #include ++#include + + #include "bstring/bstrlib.h" + +@@ -160,3 +164,6 @@ extern GC gc; + + /* vim:expandtab:cindent:smartindent:ts=4:tw=0:sw=4: + */ ++ ++#endif ++ +diff -urp pads-1.2.orig/src/identification.c pads-1.2/src/identification.c +--- pads-1.2.orig/src/identification.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/identification.c 2008-06-30 13:28:28.000000000 -0400 +@@ -26,6 +26,9 @@ + * + **************************************************************************/ + #include "identification.h" ++#include "util.h" ++#include "storage.h" ++#include "output/output.h" + + Signature *signature_list; + +@@ -57,7 +60,7 @@ int init_identification() + } + + /* Open Signature File */ +- if ((fp = fopen(bdata(filename), "r")) == NULL) { ++ if ((fp = fopen((char *)bdata(filename), "r")) == NULL) { + err_message("Unable to open signature file - %s", bdata(filename)); + } + +@@ -73,7 +76,7 @@ int init_identification() + bdestroy(filename); + bdestroy(filedata); + bstrListDestroy(lines); +- close(fp); ++ fclose(fp); + + return 0; + } +@@ -91,7 +94,7 @@ int init_identification() + int parse_raw_signature (bstring line, int lineno) + { + struct bstrList *raw_sig; +- struct bstrList *title; ++ struct bstrList *title = NULL; + Signature *sig; + bstring pcre_string; + const char *err; /* PCRE */ +@@ -101,7 +104,7 @@ int parse_raw_signature (bstring line, i + + /* Check to see if this line has something to read. */ + if (line->data[0] == '\0' || line->data[0] == '#') +- return; ++ return -1; + + /* Split Line */ + if ((raw_sig = bsplit(line, ',')) == NULL) +@@ -125,8 +128,10 @@ int parse_raw_signature (bstring line, i + + /* Split Title */ + if (raw_sig->entry[1] != NULL && ret != -1) +- if ((title = bsplit(raw_sig->entry[1], '/')) == NULL) +- ret = -1; ++ title = bsplit(raw_sig->entry[1], '/'); ++ if (title == NULL) ++ return -1; ++ + if (title->qty < 3) + ret = -1; + +@@ -145,7 +150,7 @@ int parse_raw_signature (bstring line, i + + /* PCRE */ + if (pcre_string != NULL) { +- if ((sig->regex = pcre_compile (bdata(pcre_string), 0, &err, &erroffset, NULL)) == NULL) { ++ if ((sig->regex = pcre_compile ((char *)bdata(pcre_string), 0, &err, &erroffset, NULL)) == NULL) { + err_message("Unable to compile signature: %s at line %d (%s)", + err, lineno, bdata(line)); + ret = -1; +@@ -265,7 +270,6 @@ int pcre_identify (struct in_addr ip_add + Signature *list = signature_list; + int rc; + int ovector[15]; +- int i; + bstring app; + + while (list != NULL) { +@@ -312,18 +316,18 @@ bstring get_app_name (Signature *sig, + + /* Create Application string using the values in signature[i].title. */ + if (sig->title.app != NULL) { +- strlcpy(app, bdata(sig->title.app), MAX_APP); ++ strlcpy(app, (char *)bdata(sig->title.app), MAX_APP); + } + if (sig->title.ver != NULL) { + if (sig->title.ver->slen > 0) { + strcat(app, " "); +- strlcat(app, bdata(sig->title.ver), MAX_VER); ++ strlcat(app, (char *)bdata(sig->title.ver), MAX_VER); + } + } + if (sig->title.misc != NULL) { + if (sig->title.misc->slen > 0) { + strcat(app, " ("); +- strlcat(app, bdata(sig->title.misc), MAX_MISC); ++ strlcat(app, (char *)bdata(sig->title.misc), MAX_MISC); + strcat(app, ")"); + } + } +@@ -416,7 +420,8 @@ void print_signature() + printf("2a: %s\n", bdata(list->title.app)); + printf("2b: %s\n", bdata(list->title.ver)); + printf("2c: %s\n", bdata(list->title.misc)); +- printf("3: %s\n", list->regex); ++ // FIXME: This is a compiled expression ++ // printf("3: %s\n", list->regex); + printf("\n"); + + i++; +diff -urp pads-1.2.orig/src/mac-resolution.c pads-1.2/src/mac-resolution.c +--- pads-1.2.orig/src/mac-resolution.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/mac-resolution.c 2008-06-30 13:28:28.000000000 -0400 +@@ -32,6 +32,7 @@ + #ifndef DISABLE_VENDOR + + #include "mac-resolution.h" ++#include "util.h" + + Vendor *vendor_list = NULL; + +@@ -60,7 +61,7 @@ int init_mac_resolution (void) { + } + + /* Open Signature File */ +- if ((fp = fopen(bdata(filename), "r")) == NULL) { ++ if ((fp = fopen((char *)bdata(filename), "r")) == NULL) { + err_message("Unable to open MAC resolution file - %s", bdata(filename)); + } + +@@ -79,7 +80,7 @@ int init_mac_resolution (void) { + bdestroy(filedata); + if (lines != NULL) + bstrListDestroy(lines); +- close(fp); ++ fclose(fp); + + return 0; + } +@@ -99,10 +100,8 @@ int parse_raw_mac (bstring line) + char vendor[80]; + int m1, m2, m3; + +- int pos; +- + /* Parse out the contents of the line. */ +- if (sscanf(bdata(line), "%02X:%02X:%02X %80[^,\n],\n", &m1, &m2, &m3, vendor) != 4) ++ if (sscanf((char *)bdata(line), "%02X:%02X:%02X %80[^,\n],\n", &m1, &m2, &m3, vendor) != 4) + return -1; + + mac[0] = (char) (m1); +@@ -215,7 +214,7 @@ void show_vendor (void){ + list = vendor_list; + + while(list != NULL) { +- printf("Mac: %s\nVendor: %s\n\n", list->mac, bdata(list->vendor)); ++ printf("Mac: %u\nVendor: %s\n\n", list->mac, bdata(list->vendor)); + list = list->next; + } + } +diff -urp pads-1.2.orig/src/monnet.c pads-1.2/src/monnet.c +--- pads-1.2.orig/src/monnet.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/monnet.c 2008-06-30 13:28:28.000000000 -0400 +@@ -27,7 +27,10 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include ++#include + #include "monnet.h" ++#include "util.h" + + struct mon_net *mn; + +@@ -45,7 +48,6 @@ void parse_networks (char *cmdline) + { + int i = 0; + char network[16], netmask[3], tmp[16]; +- struct in_addr in_net; + + /* Make sure something was defined. */ + if (cmdline == NULL) +@@ -81,7 +83,7 @@ void parse_networks (char *cmdline) + i++; + } + +- *cmdline++; ++ cmdline++; + } + } + +diff -urp pads-1.2.orig/src/output/output.c pads-1.2/src/output/output.c +--- pads-1.2.orig/src/output/output.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output.c 2008-06-30 13:28:28.000000000 -0400 +@@ -26,6 +26,10 @@ + * + **************************************************************************/ + #include "output.h" ++#include "output-screen.h" ++#include "output-csv.h" ++#include "output-fifo.h" ++#include "storage.h" + + /* Global Variables */ + OutputPluginList *output_plugin_list; +@@ -149,7 +153,7 @@ int print_asset (struct in_addr ip_addr, + + /* Make sure that a record was found. */ + if (rec == NULL) +- return; ++ return -1; + + /* Cycle through output plugins and print to those that are active. */ + head = output_plugin_list; +@@ -182,7 +186,7 @@ int print_arp_asset (struct in_addr ip_a + + /* Find Asset */ + ArpAsset *list; +- ArpAsset *rec; ++ ArpAsset *rec = NULL; + + list = (ArpAsset *)get_arp_pointer(); + while (list != NULL) { +@@ -199,7 +203,7 @@ int print_arp_asset (struct in_addr ip_a + + /* Make sure that a record was found. */ + if (rec == NULL) +- return; ++ return -1; + + /* Cycle through output plugins and print to those that are active. */ + head = output_plugin_list; +@@ -298,8 +302,8 @@ void end_output (void) + #ifdef DEBUG + int debug_output_list (void) + { +- OutputPluginList *head, *head2; +- OutputPlugin *tmp, *tmp2; ++ OutputPluginList *head; ++ OutputPlugin *tmp; + int i = 1; + + printf("output_plugin_list:\n"); +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-06-30 13:28:28.000000000 -0400 +@@ -24,7 +24,10 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include + #include "output-csv.h" ++#include "util.h" ++#include "storage.h" + + OutputCSVConf output_csv_conf; + +@@ -40,7 +43,6 @@ int + setup_output_csv (void) + { + OutputPlugin *plugin; +- bstring name; + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +@@ -68,7 +70,7 @@ setup_output_csv (void) + * : will read in the file and add each asset + * : to the asset data structure. + * INPUT : 0 - CSV filename +- * RETURN : None! ++ * RETURN : 0 success, -1 fail + * --------------------------------------------------------- */ + int + init_output_csv (bstring filename) +@@ -84,14 +86,15 @@ init_output_csv (bstring filename) + output_csv_conf.filename = bstrcpy(bfromcstr("assets.csv")); + + /* Check to see if *filename exists. */ +- if ((fp = fopen(bdata(output_csv_conf.filename), "r")) == NULL) { ++ if ((fp = fopen((char *)bdata(output_csv_conf.filename), "r")) == NULL) { + + /* File does not exist, create new.. */ +- if ((output_csv_conf.file = fopen(bdata(output_csv_conf.filename), "w")) != NULL) { ++ if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "w")) != NULL) { + fprintf(output_csv_conf.file, "asset,port,proto,service,application,discovered\n"); + + } else { + err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); ++ return -1; + } + + } else { +@@ -101,12 +104,13 @@ init_output_csv (bstring filename) + read_report_file(); + + /* Open file and assign it to the global FILE pointer. */ +- if ((output_csv_conf.file = fopen(bdata(output_csv_conf.filename), "a")) == NULL) { ++ if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "a")) == NULL) { + err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); ++ return -1; + } + } + +- return; ++ return 0; + } + + /* ---------------------------------------------------------- +@@ -129,7 +133,7 @@ read_report_file (void) + printf("[-] Processing Existing %s\n", bdata(output_csv_conf.filename)); + + /* Open Signature File */ +- if ((fp = fopen(bdata(output_csv_conf.filename), "r")) == NULL) { ++ if ((fp = fopen((char *)bdata(output_csv_conf.filename), "r")) == NULL) { + err_message("Unable to open CSV file - %s", bdata(output_csv_conf.filename)); + } + +@@ -144,7 +148,7 @@ read_report_file (void) + /* Clean Up */ + bdestroy(filedata); + bstrListDestroy(lines); +- close(fp); ++ fclose(fp); + } + + /* ---------------------------------------------------------- +@@ -172,7 +176,7 @@ parse_raw_report (bstring line) + + /* Check to see if this line has something to read. */ + if (line->data[0] == '\0' || line->data[0] == '#') +- return; ++ return -1; + + /* Break line apart. */ + if ((list = bsplit(line, ',')) == NULL) +@@ -186,13 +190,13 @@ parse_raw_report (bstring line) + } + + /* Place data from 'list' into temporary data storage. */ +- if ((inet_aton(bdata(list->entry[0]), &ip_addr)) == -1) ++ if ((inet_aton((char *)bdata(list->entry[0]), &ip_addr)) == -1) + ret = -1; + +- if ((port = htons(atoi(bdata(list->entry[1])))) == -1) ++ if ((port = htons(atoi((char *)bdata(list->entry[1])))) == -1) + ret = -1; + +- if ((proto = atoi(bdata(list->entry[2]))) == -1) ++ if ((proto = atoi((char *)bdata(list->entry[2]))) == -1) + ret = -1; + + if ((service = bstrcpy(list->entry[3])) == NULL) +@@ -201,7 +205,7 @@ parse_raw_report (bstring line) + if ((application = bstrcpy(list->entry[4])) == NULL) + ret = -1; + +- if ((discovered = atol(bdata(list->entry[5]))) == -1) ++ if ((discovered = atol((char *)bdata(list->entry[5]))) == -1) + ret = -1; + + /* Make sure that this line contains 'good' data. */ +@@ -211,7 +215,7 @@ parse_raw_report (bstring line) + /* Add Asset to Data Structure */ + if (proto == 0 && ret != -1) { + /* ARP */ +- mac2hex(bdata(application), mac_addr, MAC_LEN); ++ mac2hex((char *)bdata(application), mac_addr, MAC_LEN); + add_arp_asset(ip_addr, mac_addr, discovered); + } else { + /* Everything Else */ +@@ -249,8 +253,9 @@ print_asset_csv (Asset *rec) + if (gc.hide_unknowns == 0 || ((biseqcstr(rec->service, "unknown") != 0) && + (biseqcstr(rec->application, "unknown") != 0))) { + fprintf(output_csv_conf.file, "%s,%d,%d,%s,%s,%d\n", +- inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, bdata(rec->service), +- bdata(rec->application), rec->discovered); ++ inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, ++ bdata(rec->service), bdata(rec->application), ++ (int)rec->discovered); + fflush(output_csv_conf.file); + } + } else { +@@ -277,11 +282,13 @@ print_arp_asset_csv (ArpAsset *rec) + /* Print to File */ + if (output_csv_conf.file != NULL) { + if (rec->mac_resolved != NULL) { +- fprintf(output_csv_conf.file, "%s,0,0,ARP (%s),%s,%d\n", inet_ntoa(rec->ip_addr), +- bdata(rec->mac_resolved), hex2mac(rec->mac_addr), rec->discovered); ++ fprintf(output_csv_conf.file, "%s,0,0,ARP (%s),%s,%d\n", ++ inet_ntoa(rec->ip_addr), bdata(rec->mac_resolved), ++ hex2mac(rec->mac_addr), (int)rec->discovered); + } else { +- fprintf(output_csv_conf.file, "%s,0,0,ARP,%s,%d\n", inet_ntoa(rec->ip_addr), +- hex2mac(rec->mac_addr), rec->discovered); ++ fprintf(output_csv_conf.file, "%s,0,0,ARP,%s,%d\n", ++ inet_ntoa(rec->ip_addr), hex2mac(rec->mac_addr), ++ (int)rec->discovered); + } + + fflush(output_csv_conf.file); +@@ -311,5 +318,7 @@ end_output_csv () + + if (output_csv_conf.filename != NULL) + bdestroy(output_csv_conf.filename); ++ ++ return 0; + } + +diff -urp pads-1.2.orig/src/output/output-csv.h pads-1.2/src/output/output-csv.h +--- pads-1.2.orig/src/output/output-csv.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-csv.h 2008-06-30 13:28:28.000000000 -0400 +@@ -25,6 +25,8 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef OUTPUT_CSV_HEADER ++#define OUTPUT_CSV_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -64,3 +66,5 @@ int print_asset_csv (Asset *rec); + int print_arp_asset_csv (ArpAsset *rec); + int end_output_csv (void); + ++#endif ++ +diff -urp pads-1.2.orig/src/output/output-fifo.c pads-1.2/src/output/output-fifo.c +--- pads-1.2.orig/src/output/output-fifo.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-fifo.c 2008-06-30 13:28:45.000000000 -0400 +@@ -25,7 +25,9 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include + #include "output-fifo.h" ++#include "util.h" + + /* + * MODULE NOTES +@@ -66,7 +68,6 @@ int + setup_output_fifo (void) + { + OutputPlugin *plugin; +- bstring name; + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +@@ -92,15 +93,11 @@ setup_output_fifo (void) + * DESCRIPTION : This function will initialize the FIFO + * : file. + * INPUT : 0 - FIFO filename +- * RETURN : None! ++ * RETURN : 0 success, -1 failure + * --------------------------------------------------------- */ + int + init_output_fifo (bstring fifo_file) + { +- FILE *fp; +- register u_int len = 0; +- char *filename; +- + verbose_message("Initializing FIFO output plugin."); + + /* Make sure report_file isn't NULL. */ +@@ -109,13 +106,13 @@ init_output_fifo (bstring fifo_file) + + output_fifo_conf.filename = bstrcpy(fifo_file); + +- mkfifo (bdata(fifo_file), S_IFIFO | 0755); ++ mkfifo ((char *)bdata(fifo_file), 0755); + + verbose_message("Open FIFO File\n"); +- if ((output_fifo_conf.file = fopen(bdata(fifo_file), "w+")) == NULL) ++ if ((output_fifo_conf.file = fopen((char*)bdata(fifo_file), "w+")) == NULL) + err_message("Unable to open FIFO file (%s)!\n", bdata(fifo_file)); + +- return; ++ return 0; + } + + /* ---------------------------------------------------------- +@@ -138,8 +135,9 @@ print_asset_fifo (Asset *rec) + if (gc.hide_unknowns == 0 || ((biseq(rec->service, bfromcstr("unknown")) != 0) && + (biseq(rec->application, bfromcstr("unknown")) != 0))) { + fprintf(output_fifo_conf.file, "01,%s,%d,%d,%s,%s,%d\n", +- inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, bdata(rec->service), +- bdata(rec->application), rec->discovered); ++ inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, ++ bdata(rec->service), bdata(rec->application), ++ (int)rec->discovered); + fflush(output_fifo_conf.file); + } + } else { +@@ -165,11 +163,13 @@ print_arp_asset_fifo (ArpAsset *rec) + /* Print to File */ + if (output_fifo_conf.file != NULL) { + if (rec->mac_resolved != NULL) { +- fprintf(output_fifo_conf.file, "02,%s,%s,%s,%d\n", inet_ntoa(rec->ip_addr), +- rec->mac_resolved, hex2mac(&rec->mac_addr), rec->discovered); ++ fprintf(output_fifo_conf.file, "02,%s,%s,%s,%d\n", ++ inet_ntoa(rec->ip_addr), bdata(rec->mac_resolved), ++ hex2mac(rec->mac_addr), (int)rec->discovered); + } else { +- fprintf(output_fifo_conf.file, "02,%s,unknown,%s,%d\n", inet_ntoa(rec->ip_addr), +- hex2mac(&rec->mac_addr), rec->discovered); ++ fprintf(output_fifo_conf.file, "02,%s,unknown,%s,%d\n", ++ inet_ntoa(rec->ip_addr), hex2mac(rec->mac_addr), ++ (int)rec->discovered); + } + + fflush(output_fifo_conf.file); +@@ -196,7 +196,8 @@ print_stat_fifo (Asset *rec) + { + if (output_fifo_conf.file != NULL) { + fprintf(output_fifo_conf.file, "03,%s,%d,%d,%d\n", +- inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, time(NULL)); ++ inet_ntoa(rec->ip_addr), ntohs(rec->port), rec->proto, ++ (int)time(NULL)); + fflush(output_fifo_conf.file); + + } else { +diff -urp pads-1.2.orig/src/output/output-fifo.h pads-1.2/src/output/output-fifo.h +--- pads-1.2.orig/src/output/output-fifo.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-fifo.h 2008-06-30 13:28:28.000000000 -0400 +@@ -25,6 +25,8 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef OUTPUT_FIFO_HEADER ++#define OUTPUT_FIFO_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -56,9 +58,11 @@ typedef struct _OutputFIFOConf + + + /* PROTOTYPES -------------------------------------- */ ++int setup_output_fifo (void); + int init_output_fifo (bstring fifo_file); + int print_asset_fifo (Asset *rec); + int print_arp_asset_fifo (ArpAsset *rec); + int print_stat_fifo (Asset *rec); + int end_output_fifo (void); + ++#endif +diff -urp pads-1.2.orig/src/output/output.h pads-1.2/src/output/output.h +--- pads-1.2.orig/src/output/output.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output.h 2008-06-30 13:28:28.000000000 -0400 +@@ -25,6 +25,8 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef OUTPUT_HEADER ++#define OUTPUT_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -77,3 +79,4 @@ int print_arp_asset (struct in_addr ip_a + int print_stat(struct in_addr ip_addr, u_int16_t port, unsigned short proto); + void end_output (void); + ++#endif +diff -urp pads-1.2.orig/src/output/output-screen.c pads-1.2/src/output/output-screen.c +--- pads-1.2.orig/src/output/output-screen.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-screen.c 2008-06-30 13:28:28.000000000 -0400 +@@ -24,7 +24,9 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include + #include "output-screen.h" ++#include "util.h" + + /* ---------------------------------------------------------- + * FUNCTION : setup_output_screen +@@ -38,7 +40,6 @@ int + setup_output_screen (void) + { + OutputPlugin *plugin; +- bstring name; + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +diff -urp pads-1.2.orig/src/output/output-screen.h pads-1.2/src/output/output-screen.h +--- pads-1.2.orig/src/output/output-screen.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/output-screen.h 2008-06-30 13:28:28.000000000 -0400 +@@ -25,6 +25,8 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef OUTPUT_SCREEN_HEADER ++#define OUTPUT_SCREEN_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -43,16 +45,12 @@ + #include "output.h" + + +-/* TYPEDEFS ---------------------------------------- */ +-typedef struct _OutputCSVConf +-{ +- FILE *file; +-} OutputCSVConf; +- +- + /* PROTOTYPES -------------------------------------- */ + int setup_output_screen (void); + int init_output_screen (bstring args); + int print_asset_screen (Asset *rec); + int print_arp_asset_screen (ArpAsset *rec); + int end_output_screen (void); ++ ++#endif ++ +diff -urp pads-1.2.orig/src/packet.c pads-1.2/src/packet.c +--- pads-1.2.orig/src/packet.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/packet.c 2008-06-30 13:28:28.000000000 -0400 +@@ -26,6 +26,10 @@ + * + **************************************************************************/ + #include "packet.h" ++#include "output/output.h" ++#include "storage.h" ++#include "monnet.h" ++#include "identification.h" + + /* ---------------------------------------------------------- + * FUNCTION : process_eth +@@ -157,9 +161,9 @@ void process_arp (const struct pcap_pkth + case ARPOP_REPLY: + memcpy(&ip_addr.s_addr, arph->arp_spa, sizeof(u_int8_t) * 4); + +- if (check_arp_asset(ip_addr, arph->arp_sha) == 1) { +- add_arp_asset(ip_addr, arph->arp_sha, 0); +- print_arp_asset (ip_addr, arph->arp_sha); ++ if (check_arp_asset(ip_addr, (char *)arph->arp_sha) == 1) { ++ add_arp_asset(ip_addr, (char *)arph->arp_sha, 0); ++ print_arp_asset (ip_addr, (char *)arph->arp_sha); + } + + break; +@@ -222,7 +226,7 @@ void process_tcp (const struct pcap_pkth + * Check to see if this ACK packet needs to be + * identified. + */ +- payload = (u_char *)(packet + sizeof(struct tcphdr) + len); ++ payload = (char *)(packet + sizeof(struct tcphdr) + len); + + /* Attempt to identify this asset. */ + if(tcp_identify(ip_src, tcph->th_sport, payload, +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-06-30 13:28:28.000000000 -0400 +@@ -26,6 +26,13 @@ + * + **************************************************************************/ + #include "pads.h" ++#include "util.h" ++#include "storage.h" ++#include "output/output.h" ++#include "identification.h" ++#include "mac-resolution.h" ++#include "monnet.h" ++#include "configuration.h" + + /* Variable Declarations */ + GC gc; /* Global Configuration */ +@@ -34,6 +41,9 @@ proc_t processor; + char **prog_argv; + int prog_argc; + ++/* Function Declarations */ ++static int process_cmdline (int argc, char *argv[]); ++ + /* ---------------------------------------------------------- + * FUNCTION : process_pkt + * DESCRIPTION : This function takes data from libpcap and +@@ -210,7 +220,7 @@ main_pads (void) + if (gc.pcap_file) { + /* Read from PCAP file specified by '-r' switch. */ + log_message("Reading from file %s\n", bdata(gc.pcap_file)); +- if (!(gc.handle = pcap_open_offline(bdata(gc.pcap_file), errbuf))) { ++ if (!(gc.handle = pcap_open_offline((char *)bdata(gc.pcap_file), errbuf))) { + err_message("Unable to open %s. (%s)", bdata(gc.pcap_file), errbuf); + } + +@@ -268,7 +278,7 @@ main_pads (void) + /* Open banner dump file if specified (-d). */ + if (gc.dump_file) { + verbose_message("Opening Banner Dump File"); +- if (!(gc.dumper = pcap_dump_open(gc.handle, bdata(gc.dump_file)))) ++ if (!(gc.dumper = pcap_dump_open(gc.handle, (char *)bdata(gc.dump_file)))) + err_message("Cannot open dump file - %s\n", pcap_geterr(gc.handle)); + } + +@@ -323,7 +333,7 @@ end_pads(void) + + /* Remove PID File */ + if (gc.daemon_mode == 1) +- if ((unlink(bdata(gc.pid_file))) != 0) ++ if ((unlink((char *)bdata(gc.pid_file))) != 0) + log_message("WARNING: Unable to remove PID file - %s\n", bdata(gc.pid_file)); + + /* End Modules */ +@@ -370,7 +380,7 @@ end_pads(void) + * RETURN : 0 - Success + * : -1 - Error + * ---------------------------------------------------------- */ +-int ++static int + process_cmdline (int argc, char *argv[]) + { + int ch; +@@ -477,11 +487,6 @@ sig_hup_handler(int signal) + int + main(int argc, char *argv[]) + { +- /* Variables */ +- int i; +- struct pcap_pkthdr header; /* The header that pcap gives us */ +- const u_char *packet; /* The actual packet */ +- + /* Copy Command Line Args */ + prog_argc = argc; + prog_argv = argv; +diff -urp pads-1.2.orig/src/storage.c pads-1.2/src/storage.c +--- pads-1.2.orig/src/storage.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/storage.c 2008-06-30 13:28:28.000000000 -0400 +@@ -24,7 +24,10 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include ++#include + #include "storage.h" ++#include "mac-resolution.h" + + Asset *asset_list; + ArpAsset *arp_asset_list; +@@ -400,7 +403,7 @@ inline Asset * + find_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto) + { + Asset *list; +- Asset *rec; ++ Asset *rec = NULL; + + list = asset_list; + +@@ -469,7 +472,7 @@ void print_database () + while (rec != NULL) { + printf("%d: %s,%d,%d,%d,%s,%s,%d\n", + id, inet_ntoa(rec->ip_addr), ntohs(rec->port), +- rec->proto, rec->discovered, ++ rec->proto, (int)rec->discovered, + bdata(rec->service), bdata(rec->application), + rec->i_attempts); + rec = rec->next; +@@ -482,7 +485,7 @@ void print_database () + arp = arp_asset_list; + while (arp != NULL) { + printf("%d: %s,%s,%d\n", id, inet_ntoa(arp->ip_addr), +- ether_ntoa(&arp->mac_addr), arp->discovered); ++ ether_ntoa((struct ether_addr *)arp->mac_addr), (int)arp->discovered); + arp = arp->next; + id++; + } +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/util.c 2008-06-30 13:28:28.000000000 -0400 +@@ -25,8 +25,10 @@ + * $Id: pads-1.2-cleanup.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#include ++#include + #include "util.h" +- ++#include "pads.h" + + /* ---------------------------------------------------------- + * FUNCTION : strip_comment +@@ -60,11 +62,12 @@ strip_comment (char *string) + int + chomp (char *string, int size) + { +- for (size; size >= 0; size--) { ++ while (size >= 0) { + if (string[size] == '\n') { + string[size] = '\0'; + return 1; + } ++ size--; + } + + return 0; +@@ -121,7 +124,7 @@ init_pid_file (bstring pid_file, bstring + gc.pid_file = bfromcstr("/var/run/pads.pid"); + + /* Create PID File */ +- if ((fp = fopen(bdata(gc.pid_file), "w")) != NULL) { ++ if ((fp = fopen((char *)bdata(gc.pid_file), "w")) != NULL) { + pid = (int) getpid(); + fprintf(fp, "%d\n", pid); + fclose(fp); +@@ -133,11 +136,11 @@ init_pid_file (bstring pid_file, bstring + if (user == NULL || group == NULL) + return; + +- if ((this_group = getgrnam(bdata(group))) == NULL) ++ if ((this_group = getgrnam((char *)bdata(group))) == NULL) + err_message("'%s' group does not appear to exist.", bdata(group)); +- if ((this_user = getpwnam(bdata(user))) == NULL) ++ if ((this_user = getpwnam((char *)bdata(user))) == NULL) + err_message("'%s' user does not appear to exist.", bdata(user)); +- if ((chown(pid_file, this_user->pw_uid, this_group->gr_gid)) != 0) ++ if ((chown((char *)bdata(pid_file), this_user->pw_uid, this_group->gr_gid)) != 0) + err_message("Unable to change PID file's ownership."); + + } +@@ -343,7 +346,7 @@ strlcpy(char *dst, const char *src, size + size_t + strlcat(char *dst, const char *src, size_t len) { + char *dstptr = dst; +- size_t dstlen, tocopy; ++ size_t dstlen, tocopy = len; + const char *srcptr = src; + + while (tocopy-- && *dstptr) dstptr++; +@@ -384,10 +387,10 @@ drop_privs (bstring newuser, bstring new + if (newuser == NULL || newgroup == NULL) + return; + +- if ((this_group = getgrnam(bdata(newgroup))) == NULL) ++ if ((this_group = getgrnam((char *)bdata(newgroup))) == NULL) + err_message("'%s' group does not appear to exist.", bdata(newgroup)); + +- if ((this_user = getpwnam(bdata(newuser))) == NULL) ++ if ((this_user = getpwnam((char *)bdata(newuser))) == NULL) + err_message("'%s' user does not appear to exist.", bdata(newuser)); + + /* Set Group */ +@@ -458,7 +461,7 @@ mac2hex(const char *mac, char *dst, int + * RETURN : 0 - MAC Address String + * ---------------------------------------------------------- */ + char * +-hex2mac(unsigned const char *mac) ++hex2mac(const char *mac) + { + static char buf[18]; + +diff -urp pads-1.2.orig/src/util.h pads-1.2/src/util.h +--- pads-1.2.orig/src/util.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/util.h 2008-06-30 13:28:28.000000000 -0400 +@@ -53,6 +53,6 @@ size_t strlcat(char *dst, const char *sr + #endif + void drop_privs (bstring newuser, bstring newgroup); + void mac2hex(const char *mac, char *dst, int len); +-char *hex2mac(unsigned const char *mac); ++char *hex2mac(const char *mac); + + /* GLOBALS ----------------------------------------- */ diff --git a/pads-1.2-daemon.patch b/pads-1.2-daemon.patch new file mode 100644 index 0000000..4ea55c4 --- /dev/null +++ b/pads-1.2-daemon.patch @@ -0,0 +1,102 @@ +diff -urp pads-1.2.orig/src/configuration.c pads-1.2/src/configuration.c +--- pads-1.2.orig/src/configuration.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/configuration.c 2008-07-15 15:59:49.000000000 -0400 +@@ -115,7 +115,7 @@ void parse_line (bstring line) + else + gc.daemon_mode = 0; + } +- ++ become_daemon(); + } else if ((biseqcstr(param, "pid_file")) == 1) { + /* PID FILE */ + gc.pid_file = bstrcpy(value); +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-07-12 08:36:10.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-15 16:02:25.000000000 -0400 +@@ -236,21 +236,13 @@ init_pads (void) + if ((activate_output_plugin(name, gc.report_file)) == -1) + err_message("Error: 'activate_output_plugin' in function 'init_pads' failed."); + bdestroy(name); ++ become_daemon(); + } + + /* Initialize Modules */ + init_identification(); + init_mac_resolution(); + +- /* Daemon Mode: fork child process */ +- if (gc.daemon_mode) { +- verbose_message("[-] Daemonizing...\n"); +- if (daemon(0, 0) < 0) { +- err_message("Daemonize failed"); +- } +- init_pid_file(gc.pid_file, gc.priv_user, gc.priv_group); +- } +- + /* Signal Trapping */ + (void) signal(SIGTERM, sig_term_handler); + (void) signal(SIGINT, sig_int_handler); +@@ -291,9 +283,13 @@ main_pads (void) + + /* Determine Sniffing Interface */ + if (!gc.dev) { ++ char *dev; + verbose_message("Looking for sniffing interface"); +- if (!(gc.dev = pcap_lookupdev(errbuf))) +- err_message("Unable to find a sniffing interface! (%s)", errbuf); ++ dev = pcap_lookupdev(errbuf); ++ if (!dev) ++ err_message("Unable to find a sniffing interface! (%s)", ++ errbuf); ++ gc.dev = strdup(dev); + } + + /* Set up libpcap connection. */ +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/util.c 2008-07-15 16:02:38.000000000 -0400 +@@ -81,7 +81,7 @@ chomp (char *string, int size) + * INPUT : 0 - PID filename + * RETURN : None! + * ---------------------------------------------------------- */ +-void ++static void + init_pid_file (bstring pid_file, bstring user, bstring group) + { + int pid; +@@ -116,6 +116,23 @@ init_pid_file (bstring pid_file, bstring + } + + /* ---------------------------------------------------------- ++ * * FUNCTION : become_daemon ++ * * DESCRIPTION : This function makes pads into a daemon ++ * * RETURN : none ++ * * ---------------------------------------------------------- */ ++void become_daemon(void) ++{ ++ if (gc.daemon_mode) { ++ /* Daemon Mode: fork child process */ ++ verbose_message("[-] Daemonizing...\n"); ++ if (daemon(0, 0) < 0) { ++ err_message("Daemonize failed"); ++ } ++ init_pid_file(gc.pid_file, gc.priv_user, gc.priv_group); ++ } ++} ++ ++/* ---------------------------------------------------------- + * FUNCTION : copy_argv + * DESCRIPTION : This function will flatten argv into a + * : single string. This function was taken +diff -urp pads-1.2.orig/src/util.h pads-1.2/src/util.h +--- pads-1.2.orig/src/util.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/util.h 2008-07-15 16:03:04.000000000 -0400 +@@ -39,7 +39,7 @@ + /* PROTOTYPES -------------------------------------- */ + void strip_comment (char *string); + int chomp (char *string, int size); +-void init_pid_file (bstring pid_file, bstring user, bstring group); ++void become_daemon(void); + char *copy_argv(register char **argv); + void log_message (const char *msg, ...) + #ifdef __GNUC__ diff --git a/pads-1.2-daemonize.patch b/pads-1.2-daemonize.patch new file mode 100644 index 0000000..1e0d801 --- /dev/null +++ b/pads-1.2-daemonize.patch @@ -0,0 +1,75 @@ +diff -urp pads-1.2.orig/etc/pads.conf pads-1.2/etc/pads.conf +--- pads-1.2.orig/etc/pads.conf 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/etc/pads.conf 2008-07-01 15:54:01.000000000 -0400 +@@ -15,7 +15,7 @@ + # ------------------------- + # This parameter determines whether the application will go into the background. + # 0 = Disable, 1 = Enable +-daemon 0 ++daemon 1 + + # pid_file + # ------------------------- +@@ -62,13 +62,13 @@ pid_file /var/run/pads.pid + # ------------------------- + # This output plugin displays PADS data to the screen. It is mainly used for + # debugging purposes. +-output screen ++#output screen + + # output: csv + # ------------------------- + # This output plugin writes PADS data to a CSV file. Optionally, a CSV filename + # can be specified as an argument. +-output csv: assets.csv ++output csv: /etc/pads-assets.csv + + # output: fifo + # ------------------------- +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-07-01 15:53:30.000000000 -0400 +@@ -130,7 +130,8 @@ read_report_file (void) + struct bstrList *lines; + int i; + +- printf("[-] Processing Existing %s\n", bdata(output_csv_conf.filename)); ++ ++ log_message("[-] Processing Existing %s\n", bdata(output_csv_conf.filename)); + + /* Open Signature File */ + if ((fp = fopen((char *)bdata(output_csv_conf.filename), "r")) == NULL) { +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-01 15:53:30.000000000 -0400 +@@ -195,6 +195,9 @@ init_pads (void) + /* Process the command line parameters. */ + process_cmdline(prog_argc, prog_argv); + ++ if (!gc.daemon_mode) ++ print_header(); ++ + /* Initialize Output Module */ + init_output(); + +@@ -523,7 +526,6 @@ main(int argc, char *argv[]) + prog_argv = argv; + + /* Main Program */ +- print_header(); + main_pads(); + + return(0); +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-07-01 12:46:15.000000000 -0400 ++++ pads-1.2/src/util.c 2008-07-01 15:53:30.000000000 -0400 +@@ -85,7 +85,8 @@ daemonize () + { + pid_t pid; + +- printf("[-] Daemonizing...\n"); ++ if (!gc.daemon_mode) ++ printf("[-] Daemonizing...\n"); + + pid = fork(); + if (pid > 0) { diff --git a/pads-1.2-disable-debug.patch b/pads-1.2-disable-debug.patch new file mode 100644 index 0000000..4fd8665 --- /dev/null +++ b/pads-1.2-disable-debug.patch @@ -0,0 +1,12 @@ +diff -ur pads-1.2.orig/src/global.h pads-1.2/src/global.h +--- pads-1.2.orig/src/global.h 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/global.h 2008-07-01 13:57:59.000000000 -0400 +@@ -45,7 +45,7 @@ + + #define I_ATTEMPTS 4 + +-#define DEBUG ++//#define DEBUG + + #define PADS_SIGNATURE_LIST "pads-signature-list" + #define PADS_ETHER_CODES "pads-ether-codes" diff --git a/pads-1.2-ether-codes-update.patch b/pads-1.2-ether-codes-update.patch new file mode 100644 index 0000000..cd448df --- /dev/null +++ b/pads-1.2-ether-codes-update.patch @@ -0,0 +1,6223 @@ +--- pads-1.2.orig/etc/pads-ether-codes 2005-02-10 01:05:01.000000000 -0500 ++++ pads-1.2/etc/pads-ether-codes 2004-07-20 10:33:42.000000000 -0400 +@@ -32,7 +40,7 @@ + 00:00:14 Netronix + 00:00:15 Datapoint Corporation + 00:00:16 Du Pont Pixel Systems . +-00:00:17 Private ++00:00:17 Tekelec + 00:00:18 Webster Computer Corporation + 00:00:19 Applied Dynamics International + 00:00:1A Advanced Micro Devices +@@ -47,11 +55,11 @@ + 00:00:23 Abb Industrial Systems Ab + 00:00:24 Connect As + 00:00:25 Ramtek Corp. +-00:00:26 Sha-ken Co., Ltd. ++00:00:26 Sha-Ken Co., Ltd. + 00:00:27 Japan Radio Company + 00:00:28 Prodigy Systems Corporation + 00:00:29 Imc Networks Corp. +-00:00:2A Trw - Sedd/inp ++00:00:2A Trw - Sedd/Inp + 00:00:2B Crisp Automation, Inc + 00:00:2C Autotote Limited + 00:00:2D Chromatics Inc +@@ -91,10 +99,10 @@ + 00:00:4F Logicraft, Inc. + 00:00:50 Radisys Corporation + 00:00:51 Hob Electronic Gmbh & Co. Kg +-00:00:52 Intrusion.com, Inc. ++00:00:52 Intrusion.Com, Inc. + 00:00:53 Compucorp + 00:00:54 Modicon, Inc. +-00:00:55 Commissariat A L`energie Atom. ++00:00:55 Commissariat A L`Energie Atom. + 00:00:56 Dr. B. Struck + 00:00:57 Scitex Corporation Ltd. + 00:00:58 Racore Computer Products Inc. +@@ -108,7 +116,7 @@ + 00:00:60 Kontron Elektronik Gmbh + 00:00:61 Gateway Communications + 00:00:62 Bull Hn Information Systems +-00:00:63 Dr.ing.seufert Gmbh ++00:00:63 Dr.Ing.Seufert Gmbh + 00:00:64 Yokogawa Digital Computer Corp + 00:00:65 Network Associates, Inc. + 00:00:66 Talaris Systems, Inc. +@@ -116,11 +124,11 @@ + 00:00:68 Rosemount Controls + 00:00:69 Concord Communications Inc + 00:00:6A Computer Consoles Inc. +-00:00:6B Silicon Graphics Inc./mips ++00:00:6B Silicon Graphics Inc./Mips + 00:00:6C Private + 00:00:6D Cray Communications, Ltd. + 00:00:6E Artisoft, Inc. +-00:00:6F Madge Networks Ltd. ++00:00:6F Madge Ltd. + 00:00:70 Hcl Limited + 00:00:71 Adra Systems Inc. + 00:00:72 Miniware Technology +@@ -136,8 +144,8 @@ + 00:00:7C Ampere Incorporated + 00:00:7D Sun Microsystems, Inc. + 00:00:7E Clustrix Corporation +-00:00:7F Linotype-hell Ag +-00:00:80 Cray Communications A/s ++00:00:7F Linotype-Hell Ag ++00:00:80 Cray Communications A/S + 00:00:81 Bay Networks + 00:00:82 Lectra Systemes Sa + 00:00:83 Tadpole Technology Plc +@@ -149,7 +157,7 @@ + 00:00:89 Cayman Systems Inc. + 00:00:8A Datahouse Information Systems + 00:00:8B Infotron +-00:00:8C Alloy Computer Products (australia) Pty Ltd ++00:00:8C Alloy Computer Products (Australia) Pty Ltd + 00:00:8D Verdix Corporation + 00:00:8E Solbourne Computer, Inc. + 00:00:8F Raytheon Company +@@ -163,11 +171,11 @@ + 00:00:97 Epoch Systems + 00:00:98 Crosscomm Corporation + 00:00:99 Mtx, Inc. +-00:00:9A Rc Computer A/s ++00:00:9A Rc Computer A/S + 00:00:9B Information International, Inc +-00:00:9C Rolm Mil-spec Computers ++00:00:9C Rolm Mil-Spec Computers + 00:00:9D Locus Computing Corporation +-00:00:9E Marli S.a. ++00:00:9E Marli S.A. + 00:00:9F Ameristar Technologies Inc. + 00:00:A0 Tokyo Sanyo Electric Co. Ltd. + 00:00:A1 Marquette Electric Co. +@@ -185,34 +193,34 @@ + 00:00:AD Bruker Instruments Inc. + 00:00:AE Dassault Electronique + 00:00:AF Nuclear Data Instrumentation +-00:00:B0 Rnd-rad Network Devices ++00:00:B0 Rnd-Rad Network Devices + 00:00:B1 Alpha Microsystems Inc. + 00:00:B2 Televideo Systems, Inc. + 00:00:B3 Cimlinc Incorporated + 00:00:B4 Edimax Computer Company + 00:00:B5 Datability Software Sys. Inc. +-00:00:B6 Micro-matic Research ++00:00:B6 Micro-Matic Research + 00:00:B7 Dove Computer Corporation + 00:00:B8 Seikosha Co., Ltd. + 00:00:B9 Mcdonnell Douglas Computer Sys + 00:00:BA Siig, Inc. +-00:00:BB Tri-data +-00:00:BC Allen-bradley Co. Inc. ++00:00:BB Tri-Data ++00:00:BC Allen-Bradley Co. Inc. + 00:00:BD Mitsubishi Cable Company + 00:00:BE The Nti Group + 00:00:BF Symmetric Computer Systems + 00:00:C0 Western Digital Corporation +-00:00:C1 Madge Networks Ltd. ++00:00:C1 Madge Ltd. + 00:00:C2 Information Presentation Tech. + 00:00:C3 Harris Corp Computer Sys Div + 00:00:C4 Waters Div. Of Millipore +-00:00:C5 Farallon Computing/netopia ++00:00:C5 Farallon Computing/Netopia + 00:00:C6 Eon Systems + 00:00:C7 Arix Corporation + 00:00:C8 Altos Computer Systems + 00:00:C9 Emulex Corporation + 00:00:CA Applitek +-00:00:CB Compu-shack Electronic Gmbh ++00:00:CB Compu-Shack Electronic Gmbh + 00:00:CC Densan Co., Ltd. + 00:00:CD Allied Telesyn Research Ltd. + 00:00:CE Megadata Corp. +@@ -267,8 +275,8 @@ + 00:00:FF Camtec Electronics Ltd. + 00:01:00 Equip'trans + 00:01:01 Private +-00:01:02 3com Corporation +-00:01:03 3Com 3CRWE62092A ++00:01:02 3Com Corporation ++00:01:03 3Com Corporation + 00:01:04 Dvico Co., Ltd. + 00:01:05 Beckhoff Gmbh + 00:01:06 Tews Datentechnik Gmbh +@@ -279,12 +287,12 @@ + 00:01:0B Space Cyberlink, Inc. + 00:01:0C System Talks Inc. + 00:01:0D Coreco, Inc. +-00:01:0E Bri-link Technologies Co., Ltd ++00:01:0E Bri-Link Technologies Co., Ltd + 00:01:0F Nishan Systems, Inc. + 00:01:10 Gotham Networks + 00:01:11 Idigm Inc. + 00:01:12 Shark Multimedia Inc. +-00:01:13 Olympus Optical Co., Ltd. ++00:01:13 Olympus Corporation + 00:01:14 Kanda Tsushin Kogyo Co., Ltd. + 00:01:15 Extratech Corporation + 00:01:16 Netspect Technologies, Inc. +@@ -297,8 +305,8 @@ + 00:01:1D Centillium Communications + 00:01:1E Precidia Technologies, Inc. + 00:01:1F Rc Networks, Inc. +-00:01:20 Oscilloquartz S.a. +-00:01:21 Rapidstream Inc. ++00:01:20 Oscilloquartz S.A. ++00:01:21 Watchguard Technologies, Inc. + 00:01:22 Trend Communications, Ltd. + 00:01:23 Digital Electronics Corp. + 00:01:24 Acer Incorporated +@@ -337,9 +345,9 @@ + 00:01:45 Winsystems, Inc. + 00:01:46 Tesco Controls, Inc. + 00:01:47 Zhone Technologies +-00:01:48 X-traweb Inc. +-00:01:49 T.d.t. Transfer Data Test Gmbh +-00:01:4A Sony Computer Science Labs., I ++00:01:48 X-Traweb Inc. ++00:01:49 T.D.T. Transfer Data Test Gmbh ++00:01:4A Sony Corporation + 00:01:4B Ennovate Networks, Inc. + 00:01:4C Berkeley Process Control + 00:01:4D Shin Kin Enterprises Co., Ltd +@@ -349,16 +357,16 @@ + 00:01:51 Ensemble Communications + 00:01:52 Chromatek Inc. + 00:01:53 Archtek Telecom Corporation +-00:01:54 G3m Corporation ++00:01:54 G3M Corporation + 00:01:55 Promise Technology, Inc. +-00:01:56 Firewiredirect.com, Inc. ++00:01:56 Firewiredirect.Com, Inc. + 00:01:57 Syswave Co., Ltd +-00:01:58 Electro Industries/gauge Tech ++00:01:58 Electro Industries/Gauge Tech + 00:01:59 S1 Corporation + 00:01:5A Digital Video Broadcasting +-00:01:5B Italtel S.p.a/rf-up-i ++00:01:5B Italtel S.P.A/Rf-Up-I + 00:01:5C Cadant Inc. +-00:01:5D Pirus Networks ++00:01:5D Sun Microsystems, Inc + 00:01:5E Best Technology Co., Ltd. + 00:01:5F Digital Design Gmbh + 00:01:60 Elmex Co., Ltd. +@@ -367,14 +375,14 @@ + 00:01:63 Cisco Systems, Inc. + 00:01:64 Cisco Systems, Inc. + 00:01:65 Airswitch Corporation +-00:01:66 Tc Group A/s +-00:01:67 Hioki E.e. Corporation ++00:01:66 Tc Group A/S ++00:01:67 Hioki E.E. Corporation + 00:01:68 Vitana Corporation + 00:01:69 Celestix Networks Pte Ltd. + 00:01:6A Alitec + 00:01:6B Lightchip, Inc. + 00:01:6C Foxconn +-00:01:6D Triton Network Systems ++00:01:6D Carriercomm Inc. + 00:01:6E Conklin Corporation + 00:01:6F Haitai Electronics Co., Ltd. + 00:01:70 Ese Embedded System Engineer'g +@@ -389,7 +397,7 @@ + 00:01:79 Wireless Technology, Inc. + 00:01:7A Chengdu Maipu Electric Industrial Co., Ltd. + 00:01:7B Heidelberger Druckmaschinen Ag +-00:01:7C Ag-e Gmbh ++00:01:7C Ag-E Gmbh + 00:01:7D Thermoquest + 00:01:7E Adtek System Science Co., Ltd. + 00:01:7F Experience Music Project +@@ -400,7 +408,7 @@ + 00:01:84 Sieb & Meyer Ag + 00:01:85 Aloka Co., Ltd. + 00:01:86 Disch Gmbh +-00:01:87 I2se Gmbh ++00:01:87 I2Se Gmbh + 00:01:88 Lxco Technologies Ag + 00:01:89 Refraction Technology, Inc. + 00:01:8A Roi Computer Ag +@@ -409,7 +417,7 @@ + 00:01:8D Audesi Technologies + 00:01:8E Logitec Corporation + 00:01:8F Kenetec, Inc. +-00:01:90 Smk-m ++00:01:90 Smk-M + 00:01:91 Syred Data Systems + 00:01:92 Texas Digital Systems + 00:01:93 Hanbyul Telecom Co., Ltd. +@@ -422,23 +430,23 @@ + 00:01:9A Leunig Gmbh + 00:01:9B Kyoto Microcomputer Co., Ltd. + 00:01:9C Jds Uniphase Inc. +-00:01:9D E-control Systems, Inc. ++00:01:9D E-Control Systems, Inc. + 00:01:9E Ess Technology, Inc. + 00:01:9F Phonex Broadband + 00:01:A0 Infinilink Corporation +-00:01:A1 Mag-tek, Inc. ++00:01:A1 Mag-Tek, Inc. + 00:01:A2 Logical Co., Ltd. + 00:01:A3 Genesys Logic, Inc. + 00:01:A4 Microlink Corporation + 00:01:A5 Nextcomm, Inc. +-00:01:A6 Scientific-atlanta Arcodan A/s ++00:01:A6 Scientific-Atlanta Arcodan A/S + 00:01:A7 Unex Technology Corporation + 00:01:A8 Welltech Computer Co., Ltd. + 00:01:A9 Bmw Ag + 00:01:AA Airspan Communications, Ltd. + 00:01:AB Main Street Networks + 00:01:AC Sitara Networks, Inc. +-00:01:AD Coach Master International D.b.a. Cmi Worldwide, Inc. ++00:01:AD Coach Master International D.B.A. Cmi Worldwide, Inc. + 00:01:AE Trex Enterprises + 00:01:AF Motorola Computer Group + 00:01:B0 Fulltek Technology Co., Ltd. +@@ -447,28 +455,29 @@ + 00:01:B3 Precision Electronic Manufacturing + 00:01:B4 Wayport, Inc. + 00:01:B5 Turin Networks, Inc. +-00:01:B6 Saejin T&m Co., Ltd. ++00:01:B6 Saejin T&M Co., Ltd. + 00:01:B7 Centos, Inc. + 00:01:B8 Netsensity, Inc. + 00:01:B9 Skf Condition Monitoring +-00:01:BA Ic-net, Inc. ++00:01:BA Ic-Net, Inc. + 00:01:BB Frequentis + 00:01:BC Brains Corporation +-00:01:BD Peterson Electro-musical Products, Inc. ++00:01:BD Peterson Electro-Musical Products, Inc. + 00:01:BE Gigalink Co., Ltd. + 00:01:BF Teleforce Co., Ltd. + 00:01:C0 Compulab, Ltd. +-00:01:C1 Exbit Technology ++00:01:C1 Vitesse Semiconductor Corporation + 00:01:C2 Ark Research Corp. + 00:01:C3 Acromag, Inc. + 00:01:C4 Neowave, Inc. + 00:01:C5 Simpler Networks + 00:01:C6 Quarry Technologies + 00:01:C7 Cisco Systems, Inc. ++00:01:C8 Thomas Conrad Corp. + 00:01:C8 Conrad Corp. + 00:01:C9 Cisco Systems, Inc. + 00:01:CA Geocast Network Systems, Inc. +-00:01:CB Netgame, Ltd. ++00:01:CB Evr + 00:01:CC Japan Total Design Communication Co., Ltd. + 00:01:CD Artem + 00:01:CE Custom Micro Products, Ltd. +@@ -495,12 +504,12 @@ + 00:01:E3 Siemens Ag + 00:01:E4 Sitera, Inc. + 00:01:E5 Supernet, Inc. +-00:01:E6 Hewlett-packard Company +-00:01:E7 Hewlett-packard Company ++00:01:E6 Hewlett-Packard Company ++00:01:E7 Hewlett-Packard Company + 00:01:E8 Force10 Networks, Inc. +-00:01:E9 Litton Marine Systems B.v. ++00:01:E9 Litton Marine Systems B.V. + 00:01:EA Cirilium Corp. +-00:01:EB C-com Corporation ++00:01:EB C-Com Corporation + 00:01:EC Ericsson Group + 00:01:ED Seta Corp. + 00:01:EE Comtrol Europe, Ltd. +@@ -510,7 +519,7 @@ + 00:01:F2 Mark Of The Unicorn, Inc. + 00:01:F3 Qps, Inc. + 00:01:F4 Enterasys Networks +-00:01:F5 Erim S.a. ++00:01:F5 Erim S.A. + 00:01:F6 Association Of Musical Electronics Industry + 00:01:F7 Image Display Systems, Inc. + 00:01:F8 Adherent Systems, Ltd. +@@ -527,31 +536,31 @@ + 00:02:03 Woonsang Telecom, Inc. + 00:02:04 Bodmann Industries Elektronik Gmbh + 00:02:05 Hitachi Denshi, Ltd. +-00:02:06 Telital R&d Denmark A/s +-00:02:07 Private ++00:02:06 Telital R&D Denmark A/S ++00:02:07 Visionglobal Network Corp. + 00:02:08 Unify Networks, Inc. + 00:02:09 Shenzhen Sed Information Technology Co., Ltd. + 00:02:0A Gefran Spa + 00:02:0B Native Networks, Inc. +-00:02:0C Metro-optix +-00:02:0D Micronpc.com ++00:02:0C Metro-Optix ++00:02:0D Micronpc.Com + 00:02:0E Laurel Networks, Inc. + 00:02:0F Aatr + 00:02:10 Fenecom + 00:02:11 Nature Worldwide Technology Corp. + 00:02:12 Sierracom +-00:02:13 S.d.e.l. ++00:02:13 S.D.E.L. + 00:02:14 Dtvro +-00:02:15 Cotas Computer Technology A/b ++00:02:15 Cotas Computer Technology A/B + 00:02:16 Cisco Systems, Inc. + 00:02:17 Cisco Systems, Inc. + 00:02:18 Advanced Scientific Corp + 00:02:19 Paralon Technologies + 00:02:1A Zuma Networks +-00:02:1B Kollmorgen-servotronix ++00:02:1B Kollmorgen-Servotronix + 00:02:1C Network Elements, Inc. + 00:02:1D Data General Communication Ltd. +-00:02:1E Simtel S.r.l. ++00:02:1E Simtel S.R.L. + 00:02:1F Aculab Plc + 00:02:20 Canon Aptex, Inc. + 00:02:21 Dsp Application, Ltd. +@@ -568,9 +577,9 @@ + 00:02:2C Abb Bomem, Inc. + 00:02:2D Agere Systems + 00:02:2E Teac Corp. R& D +-00:02:2F P-cube, Ltd. ++00:02:2F P-Cube, Ltd. + 00:02:30 Intersoft Electronics +-00:02:31 Ingersoll-rand ++00:02:31 Ingersoll-Rand + 00:02:32 Avision, Inc. + 00:02:33 Mantra Communications, Inc. + 00:02:34 Imperial Technology, Inc. +@@ -583,16 +592,16 @@ + 00:02:3B Redback Networks + 00:02:3C Creative Technology, Ltd. + 00:02:3D Nuspeed, Inc. +-00:02:3E Selta Telematica S.p.a ++00:02:3E Selta Telematica S.P.A + 00:02:3F Compal Electronics, Inc. + 00:02:40 Seedek Co., Ltd. +-00:02:41 Amer.com ++00:02:41 Amer.Com + 00:02:42 Videoframe Systems + 00:02:43 Raysis Co., Ltd. + 00:02:44 Surecom Technology Co. + 00:02:45 Lampus Co, Ltd. +-00:02:46 All-win Tech Co., Ltd. +-00:02:47 Great Dragon Information Technology (group) Co., Ltd. ++00:02:46 All-Win Tech Co., Ltd. ++00:02:47 Great Dragon Information Technology (Group) Co., Ltd. + 00:02:48 Pilz Gmbh & Co. + 00:02:49 Aviv Infocom Co, Ltd. + 00:02:4A Cisco Systems, Inc. +@@ -600,7 +609,7 @@ + 00:02:4C Sibyte, Inc. + 00:02:4D Mannesman Dematic Colby Pty. Ltd. + 00:02:4E Datacard Group +-00:02:4F Ipm Datacom S.r.l. ++00:02:4F Ipm Datacom S.R.L. + 00:02:50 Geyser Networks, Inc. + 00:02:51 Soma Networks + 00:02:52 Carrier Corporation +@@ -610,10 +619,10 @@ + 00:02:56 Alpha Processor, Inc. + 00:02:57 Microcom Corp. + 00:02:58 Flying Packets Communications +-00:02:59 Tsann Kuen China (shanghai)enterprise Co., Ltd. It Group ++00:02:59 Tsann Kuen China (Shanghai)Enterprise Co., Ltd. It Group + 00:02:5A Catena Networks + 00:02:5B Cambridge Silicon Radio +-00:02:5C Sci Systems (kunshan) Co., Ltd. ++00:02:5C Sci Systems (Kunshan) Co., Ltd. + 00:02:5D Calix Networks + 00:02:5E High Technology Ltd + 00:02:5F Nortel Networks +@@ -621,7 +630,7 @@ + 00:02:61 I3 Micro Technology Ab + 00:02:62 Soyo Group Soyo Com Tech Co., Ltd + 00:02:63 Ups Manufacturing Srl +-00:02:64 Audioramp.com ++00:02:64 Audioramp.Com + 00:02:65 Virditech Co. Ltd. + 00:02:66 Thermalogic Corporation + 00:02:67 Node Runner, Inc. +@@ -635,25 +644,25 @@ + 00:02:6F Senao International Co., Ltd. + 00:02:70 Crewave Co., Ltd. + 00:02:71 Vpacket Communications +-00:02:72 Cc&c Technologies, Inc. ++00:02:72 Cc&C Technologies, Inc. + 00:02:73 Coriolis Networks + 00:02:74 Tommy Technologies Corp. + 00:02:75 Smart Technologies, Inc. + 00:02:76 Primax Electronics Ltd. + 00:02:77 Cash Systemes Industrie +-00:02:78 Samsung Electro-mechanics Co., Ltd. ++00:02:78 Samsung Electro-Mechanics Co., Ltd. + 00:02:79 Control Applications, Ltd. + 00:02:7A Ioi Technology Corporation + 00:02:7B Amplify Net, Inc. + 00:02:7C Trilithic, Inc. + 00:02:7D Cisco Systems, Inc. + 00:02:7E Cisco Systems, Inc. +-00:02:7F Ask-technologies.com ++00:02:7F Ask-Technologies.Com + 00:02:80 Mu Net, Inc. +-00:02:81 Madge Networks Limited ++00:02:81 Madge Ltd. + 00:02:82 Viaclix, Inc. + 00:02:83 Spectrum Controls, Inc. +-00:02:84 Alstom T&d P&c ++00:02:84 Alstom T&D P&C + 00:02:85 Riverstone Networks + 00:02:86 Occam Networks + 00:02:87 Adapcom +@@ -661,7 +670,7 @@ + 00:02:89 Dne Technologies + 00:02:8A Ambit Microsystems Corporation + 00:02:8B Vdsl Systems Oy +-00:02:8C Micrel-synergy Semiconductor ++00:02:8C Micrel-Synergy Semiconductor + 00:02:8D Movita Technologies, Inc. + 00:02:8E Rapid 5 Networks, Inc. + 00:02:8F Globetek, Inc. +@@ -670,14 +679,14 @@ + 00:02:92 Logic Innovations, Inc. + 00:02:93 Solid Data Systems + 00:02:94 Tokyo Sokushin Co., Ltd. +-00:02:95 Ip.access Limited ++00:02:95 Ip.Access Limited + 00:02:96 Lectron Co,. Ltd. +-00:02:97 C-cor.net ++00:02:97 C-Cor.Net + 00:02:98 Broadframe Corporation + 00:02:99 Apex, Inc. + 00:02:9A Storage Apps + 00:02:9B Kreatel Communications Ab +-00:02:9C 3com ++00:02:9C 3Com + 00:02:9D Merix Corp. + 00:02:9E Information Equipment Co., Ltd. + 00:02:9F L-3 Communication Aviation Recorders +@@ -690,11 +699,11 @@ + 00:02:A6 Effinet Systems Co., Ltd. + 00:02:A7 Vivace Networks + 00:02:A8 Air Link Technology +-00:02:A9 Racom, S.r.o. ++00:02:A9 Racom, S.R.O. + 00:02:AA Plcom Co., Ltd. + 00:02:AB Ctc Union Technologies Co., Ltd. +-00:02:AC 3par Data +-00:02:AD Asahi Optical Co., Ltd. ++00:02:AC 3Par Data ++00:02:AD Pentax Corpotation + 00:02:AE Scannex Electronics Ltd. + 00:02:AF Telecruz Technology, Inc. + 00:02:B0 Hokubu Communication & Industrial Co., Ltd. +@@ -721,11 +730,11 @@ + 00:02:C5 Evertz Microsystems Ltd. + 00:02:C6 Data Track Technology Plc + 00:02:C7 Alps Electric Co., Ltd. +-00:02:C8 Technocom Communications Technology (pte) Ltd ++00:02:C8 Technocom Communications Technology (Pte) Ltd + 00:02:C9 Mellanox Technologies + 00:02:CA Endpoints, Inc. + 00:02:CB Tristate Ltd. +-00:02:CC M.c.c.i ++00:02:CC M.C.C.I + 00:02:CD Teledream, Inc. + 00:02:CE Foxjet, Inc. + 00:02:CF Zygate Communications, Inc. +@@ -748,18 +757,18 @@ + 00:02:E0 Etas Gmbh + 00:02:E1 Integrated Network Corporation + 00:02:E2 Ndc Infared Engineering +-00:02:E3 Lite-on Communications, Inc. ++00:02:E3 Lite-On Communications, Inc. + 00:02:E4 Jc Hyun Systems, Inc. + 00:02:E5 Timeware Ltd. + 00:02:E6 Gould Instrument Systems, Inc. + 00:02:E7 Cab Gmbh & Co Kg +-00:02:E8 E.d.&a. +-00:02:E9 Cs Systemes De Securite - C3s +-00:02:EA Videonics, Inc. ++00:02:E8 E.D.&A. ++00:02:E9 Cs Systemes De Securite - C3S ++00:02:EA Focus Enhancements + 00:02:EB Pico Communications + 00:02:EC Maschoff Design Engineering + 00:02:ED Dxo Telecom Co., Ltd. +-00:02:EE Nokia Danmark A/s ++00:02:EE Nokia Danmark A/S + 00:02:EF Ccc Network Systems Group Ltd. + 00:02:F0 Ame Optimedia Technology Co., Ltd. + 00:02:F1 Pinetron Co., Ltd. +@@ -772,14 +781,14 @@ + 00:02:F8 Seakr Engineering, Inc. + 00:02:F9 Mimos Semiconductor Sdn Bhd + 00:02:FA Dx Antenna Co., Ltd. +-00:02:FB Baumuller Aulugen-systemtechnik Gmbh ++00:02:FB Baumuller Aulugen-Systemtechnik Gmbh + 00:02:FC Cisco Systems, Inc. + 00:02:FD Cisco Systems, Inc. + 00:02:FE Viditec, Inc. +-00:02:FF Handan Broad Infocom ++00:02:FF Handan Broadinfocom + 00:03:00 Netcontinuum, Inc. + 00:03:01 Avantas Networks Corporation +-00:03:02 Oasys Telecom, Inc. ++00:03:02 Charles Industries, Ltd. + 00:03:03 Jama Electronics Co., Ltd. + 00:03:04 Pacific Broadband Communications + 00:03:05 Smart Network Devices Gmbh +@@ -792,10 +801,10 @@ + 00:03:0C Telesoft Technologies Ltd. + 00:03:0D Uniwill Computer Corp. + 00:03:0E Core Communications Co., Ltd. +-00:03:0F Digital China (shanghai) Networks Ltd. ++00:03:0F Digital China (Shanghai) Networks Ltd. + 00:03:10 Link Evolution Corp. + 00:03:11 Micro Technology Co., Ltd. +-00:03:12 Tr-systemtechnik Gmbh ++00:03:12 Tr-Systemtechnik Gmbh + 00:03:13 Access Media Spa + 00:03:14 Teleware Network Systems + 00:03:15 Cidco Incorporated +@@ -813,11 +822,11 @@ + 00:03:21 Reco Research Co., Ltd. + 00:03:22 Idis Co., Ltd. + 00:03:23 Cornet Technology, Inc. +-00:03:24 Tottori Sanyo Electric Co., Ltd. ++00:03:24 Sanyo Multimedia Tottori Co., Ltd. + 00:03:25 Arima Computer Corp. + 00:03:26 Iwasaki Information Systems Co., Ltd. + 00:03:27 Act'l +-00:03:28 Private ++00:03:28 Mace Group, Inc. + 00:03:29 F3, Inc. + 00:03:2A Unidata Communication Systems, Inc. + 00:03:2B Gai Datenfunksysteme Gmbh +@@ -844,19 +853,19 @@ + 00:03:40 Floware Wireless Systems, Ltd. + 00:03:41 Axon Digital Design + 00:03:42 Nortel Networks +-00:03:43 Martin Professional A/s +-00:03:44 Tietech.co., Ltd. ++00:03:43 Martin Professional A/S ++00:03:44 Tietech.Co., Ltd. + 00:03:45 Routrek Networks Corporation + 00:03:46 Hitachi Kokusai Electric, Inc. + 00:03:47 Intel Corporation + 00:03:48 Norscan Instruments, Ltd. +-00:03:49 Vidicode Datacommunicatie B.v. ++00:03:49 Vidicode Datacommunicatie B.V. + 00:03:4A Rias Corporation + 00:03:4B Nortel Networks + 00:03:4C Shanghai Digivision Technology Co., Ltd. + 00:03:4D Chiaro Networks, Ltd. + 00:03:4E Pos Data Company, Ltd. +-00:03:4F Sur-gard Security ++00:03:4F Sur-Gard Security + 00:03:50 Bticino Spa + 00:03:51 Diebold, Inc. + 00:03:52 Colubris Networks +@@ -864,13 +873,13 @@ + 00:03:54 Fiber Logic Communications + 00:03:55 Terabeam Internet Systems + 00:03:56 Wincor Nixdorf Gmbh & Co Kg +-00:03:57 Intervoice-brite, Inc. ++00:03:57 Intervoice-Brite, Inc. + 00:03:58 Icable System Co., Ltd. + 00:03:59 Digitalsis + 00:03:5A Photron Limited + 00:03:5B Bridgewave Communications + 00:03:5C Saint Song Corp. +-00:03:5D Bosung Hi-net Co., Ltd. ++00:03:5D Bosung Hi-Net Co., Ltd. + 00:03:5E Metropolitan Area Networks, Inc. + 00:03:5F Prueftechnik Condition Monitoring Gmbh & Co. Kg + 00:03:60 Pac Interactive Technology, Inc. +@@ -887,12 +896,12 @@ + 00:03:6B Cisco Systems, Inc. + 00:03:6C Cisco Systems, Inc. + 00:03:6D Runtop, Inc. +-00:03:6E Nicon Systems (pty) Limited ++00:03:6E Nicon Systems (Pty) Limited + 00:03:6F Telsey Spa + 00:03:70 Nxtv, Inc. + 00:03:71 Acomz Networks Corp. + 00:03:72 Ulan +-00:03:73 Aselsan A.s ++00:03:73 Aselsan A.S + 00:03:74 Hunter Watertech + 00:03:75 Netmedia, Inc. + 00:03:76 Graphtec Technology, Inc. +@@ -907,7 +916,7 @@ + 00:03:7F Atheros Communications, Inc. + 00:03:80 Ssh Communications Security Corp. + 00:03:81 Ingenico International +-00:03:82 A-one Co., Ltd. ++00:03:82 A-One Co., Ltd. + 00:03:83 Metera Networks, Inc. + 00:03:84 Aeta + 00:03:85 Actelis Networks, Inc. +@@ -916,13 +925,13 @@ + 00:03:88 Fastfame Technology Co., Ltd. + 00:03:89 Plantronics + 00:03:8A America Online, Inc. +-00:03:8B Plus-one I&t, Inc. ++00:03:8B Plus-One I&T, Inc. + 00:03:8C Total Impact + 00:03:8D Pcs Revenue Control Systems, Inc. + 00:03:8E Atoga Systems, Inc. + 00:03:8F Weinschel Corporation + 00:03:90 Digital Video Communications, Inc. +-00:03:91 Private ++00:03:91 Advanced Digital Broadcast, Ltd. + 00:03:92 Hyundai Teletek Co., Ltd. + 00:03:93 Apple Computer, Inc. + 00:03:94 Connect One +@@ -943,7 +952,7 @@ + 00:03:A3 Mavix, Ltd. + 00:03:A4 Data Storage And Information Management + 00:03:A5 Medea Corporation +-00:03:A6 Private ++00:03:A6 Traxit Technology, Inc. + 00:03:A7 Unixtar Technology, Inc. + 00:03:A8 Idot Computers, Inc. + 00:03:A9 Axcent Media Ag +@@ -971,7 +980,7 @@ + 00:03:BF Centerpoint Broadband Technologies, Inc. + 00:03:C0 Rftnc Co., Ltd. + 00:03:C1 Packet Dynamics Ltd +-00:03:C2 Solphone K.k. ++00:03:C2 Solphone K.K. + 00:03:C3 Micronik Multimedia + 00:03:C4 Tomra Systems Asa + 00:03:C5 Mobotix Ag +@@ -1022,9 +1031,9 @@ + 00:03:F2 Seneca Networks + 00:03:F3 Dazzle Multimedia, Inc. + 00:03:F4 Netburner +-00:03:F5 Chip2chip ++00:03:F5 Chip2Chip + 00:03:F6 Allegro Networks, Inc. +-00:03:F7 Plast-control Gmbh ++00:03:F7 Plast-Control Gmbh + 00:03:F8 Sancastle Technologies, Inc. + 00:03:F9 Pleiades Communications, Inc. + 00:03:FA Timetra Networks +@@ -1032,7 +1041,7 @@ + 00:03:FC Intertex Data Ab + 00:03:FD Cisco Systems, Inc. + 00:03:FE Cisco Systems, Inc. +-00:03:FF Connectix ++00:03:FF Microsoft Corporation + 00:04:00 Lexmark International, Inc. + 00:04:01 Osaki Electric Co., Ltd. + 00:04:02 Nexsan Technologies, Ltd. +@@ -1044,7 +1053,7 @@ + 00:04:08 Sanko Electronics Co., Ltd. + 00:04:09 Cratos Networks + 00:04:0A Sage Systems +-00:04:0B 3com Europe Ltd. ++00:04:0B 3Com Europe Ltd. + 00:04:0C Kanno Work's Ltd. + 00:04:0D Avaya, Inc. + 00:04:0E Avm Gmbh +@@ -1055,9 +1064,9 @@ + 00:04:13 Snom Technology Ag + 00:04:14 Umezawa Musen Denki Co., Ltd. + 00:04:15 Rasteme Systems Co., Ltd. +-00:04:16 Parks S/a Comunicacoes Digitais ++00:04:16 Parks S/A Comunicacoes Digitais + 00:04:17 Elau Ag +-00:04:18 Teltronic S.a.u. ++00:04:18 Teltronic S.A.U. + 00:04:19 Fibercycle Networks, Inc. + 00:04:1A Ines Gmbh + 00:04:1B Digital Interfaces Ltd. +@@ -1069,7 +1078,7 @@ + 00:04:21 Ocular Networks + 00:04:22 Gordon Kapes, Inc. + 00:04:23 Intel Corporation +-00:04:24 Tmc S.r.l. ++00:04:24 Tmc S.R.L. + 00:04:25 Atmel Corporation + 00:04:26 Autosys + 00:04:27 Cisco Systems, Inc. +@@ -1084,7 +1093,7 @@ + 00:04:30 Netgem + 00:04:31 Globalstreams, Inc. + 00:04:32 Voyetra Turtle Beach, Inc. +-00:04:33 Cyberboard A/s ++00:04:33 Cyberboard A/S + 00:04:34 Accelent Systems, Inc. + 00:04:35 Comptek International, Inc. + 00:04:36 Elansat Technologies, Inc. +@@ -1118,12 +1127,12 @@ + 00:04:52 Rocketlogix, Inc. + 00:04:53 Yottayotta, Inc. + 00:04:54 Quadriga Uk +-00:04:55 Antara.net ++00:04:55 Antara.Net + 00:04:56 Pipinghot Networks + 00:04:57 Universal Access Technology, Inc. + 00:04:58 Fusion X Co., Ltd. + 00:04:59 Veristar Corporation +-00:04:5A Linksys WPC11, WUSB11 ++00:04:5A The Linksys Group, Inc. + 00:04:5B Techsan Electronics Co., Ltd. + 00:04:5C Mobiwave Pte Ltd + 00:04:5D Beka Elektronik +@@ -1132,9 +1141,9 @@ + 00:04:60 Knilink Technology, Inc. + 00:04:61 Epox Computer Co., Ltd. + 00:04:62 Dakos Data & Communication Co., Ltd. +-00:04:63 Philips Communication Security & Imaging ++00:04:63 Bosch Security Systems + 00:04:64 Fantasma Networks, Inc. +-00:04:65 I.s.t Isdn-support Technik Gmbh ++00:04:65 I.S.T Isdn-Support Technik Gmbh + 00:04:66 Armitel Co. + 00:04:67 Wuhan Research Institute Of Mii + 00:04:68 Vivity, Inc. +@@ -1144,14 +1153,14 @@ + 00:04:6C Cyber Technology Co., Ltd. + 00:04:6D Cisco Systems, Inc. + 00:04:6E Cisco Systems, Inc. +-00:04:6F Digitel S/a Industria Eletronica ++00:04:6F Digitel S/A Industria Eletronica + 00:04:70 Ipunplugged Ab + 00:04:71 Iprad + 00:04:72 Telelynx, Inc. + 00:04:73 Photonex Corporation + 00:04:74 Legrand +-00:04:75 3Com Corporation +-00:04:76 3Com Corporation ++00:04:75 3 Com Corporation ++00:04:76 3 Com Corporation + 00:04:77 Scalant Systems, Inc. + 00:04:78 G. Star Technology Corporation + 00:04:79 Radius Co., Ltd. +@@ -1169,7 +1178,7 @@ + 00:04:85 Picolight + 00:04:86 Ittc, University Of Kansas + 00:04:87 Cogency Semiconductor, Inc. +-00:04:88 Eurotherm Action Incorporated. ++00:04:88 Eurotherm Controls + 00:04:89 Yafo Networks, Inc. + 00:04:8A Temia Vertriebs Gmbh + 00:04:8B Poscon Corporation +@@ -1195,7 +1204,7 @@ + 00:04:9F Metrowerks + 00:04:A0 Verity Instruments, Inc. + 00:04:A1 Pathway Connectivity +-00:04:A2 L.s.i. Japan Co., Ltd. ++00:04:A2 L.S.I. Japan Co., Ltd. + 00:04:A3 Microchip Technology, Inc. + 00:04:A4 Netenabled, Inc. + 00:04:A5 Barco Projection Systems Nv +@@ -1215,10 +1224,10 @@ + 00:04:B3 Videotek, Inc. + 00:04:B4 Ciac + 00:04:B5 Equitrac Corporation +-00:04:B6 Tellumat (pty) Ltd. +-00:04:B7 Amb I.t. Holding ++00:04:B6 Stratex Networks, Inc. ++00:04:B7 Amb I.T. Holding + 00:04:B8 Kumahira Co., Ltd. +-00:04:B9 S.i. Soubou, Inc. ++00:04:B9 S.I. Soubou, Inc. + 00:04:BA Kdd Media Will Corporation + 00:04:BB Bardac Corporation + 00:04:BC Giantec, Inc. +@@ -1229,7 +1238,7 @@ + 00:04:C1 Cisco Systems, Inc. + 00:04:C2 Magnipix, Inc. + 00:04:C3 Castor Informatique +-00:04:C4 Allen & Health Limited ++00:04:C4 Allen & Heath Limited + 00:04:C5 Ase Technologies, Usa + 00:04:C6 Yamaha Motor Co., Ltd. + 00:04:C7 Netmount +@@ -1237,11 +1246,11 @@ + 00:04:C9 Micro Electron Co., Ltd. + 00:04:CA Freems Corp. + 00:04:CB Tdsoft Communication, Ltd. +-00:04:CC Peek Traffic B.v. ++00:04:CC Peek Traffic B.V. + 00:04:CD Informedia Research Group + 00:04:CE Patria Ailon + 00:04:CF Seagate Technology +-00:04:D0 Softlink S.r.o. ++00:04:D0 Softlink S.R.O. + 00:04:D1 Drew Technologies, Inc. + 00:04:D2 Adcon Telemetry Ag + 00:04:D3 Toyokeiki Co., Ltd. +@@ -1259,7 +1268,7 @@ + 00:04:DF Teracom Telematica Ltda. + 00:04:E0 Procket Networks + 00:04:E1 Infinior Microsystems +-00:04:E2 SMC SMC2632W ++00:04:E2 Smc Networks, Inc. + 00:04:E3 Accton Technology Corp. + 00:04:E4 Daeryung Ind., Inc. + 00:04:E5 Glonet Systems, Inc. +@@ -1267,7 +1276,7 @@ + 00:04:E7 Lightpointe Communications, Inc + 00:04:E8 Ier, Inc. + 00:04:E9 Infiniswitch Corporation +-00:04:EA Hewlett-packard Company ++00:04:EA Hewlett-Packard Company + 00:04:EB Paxonet Communications, Inc. + 00:04:EC Memobox Sa + 00:04:ED Billion Electric Co., Ltd. +@@ -1276,7 +1285,7 @@ + 00:04:F0 International Computers, Ltd + 00:04:F1 Wherenet + 00:04:F2 Circa Communications, Ltd. +-00:04:F3 Fs Forth-systeme Gmbh ++00:04:F3 Fs Forth-Systeme Gmbh + 00:04:F4 Infinite Electronics Inc. + 00:04:F5 Snowshore Networks, Inc. + 00:04:F6 Amphus +@@ -1285,7 +1294,7 @@ + 00:04:F9 Xtera Communications, Inc. + 00:04:FA Mist Inc. + 00:04:FB Commtech, Inc. +-00:04:FC Stratus Computer (de), Inc. ++00:04:FC Stratus Computer (De), Inc. + 00:04:FD Japan Control Engineering Co., Ltd. + 00:04:FE Pelago Networks + 00:04:FF Acronet Co., Ltd. +@@ -1303,8 +1312,8 @@ + 00:05:0B Sicom Systems, Inc. + 00:05:0C Network Photonics, Inc. + 00:05:0D Midstream Technologies, Inc. +-00:05:0E 3ware, Inc. +-00:05:0F Tanaka S/s Ltd. ++00:05:0E 3Ware, Inc. ++00:05:0F Tanaka S/S Ltd. + 00:05:10 Infinite Shanghai Communication Terminals Ltd. + 00:05:11 Complementary Technologies Ltd + 00:05:12 Meshnetworks, Inc. +@@ -1315,17 +1324,17 @@ + 00:05:17 Shellcomm, Inc. + 00:05:18 Jupiters Technology + 00:05:19 Siemens Building Technologies Ag, +-00:05:1A 3com Europe Ltd. ++00:05:1A 3Com Europe Ltd. + 00:05:1B Magic Control Technology Corporation + 00:05:1C Xnet Technology Corp. + 00:05:1D Airocon, Inc. +-00:05:1E Rhapsody Networks ++00:05:1E Brocade Communications Systems, Inc. + 00:05:1F Taijin Media Co., Ltd. + 00:05:20 Smartronix, Inc. + 00:05:21 Control Microsystems +-00:05:22 Lea*d Corporation, Inc. ++00:05:22 Lea*D Corporation, Inc. + 00:05:23 Avl List Gmbh +-00:05:24 Btl System (hk) Limited ++00:05:24 Btl System (Hk) Limited + 00:05:25 Puretek Industrial Co., Ltd. + 00:05:26 Ipas Gmbh + 00:05:27 Sj Tek Co. Ltd +@@ -1359,7 +1368,7 @@ + 00:05:43 Iq Wireless Gmbh + 00:05:44 Valley Technologies, Inc. + 00:05:45 Internet Photonics +-00:05:46 K-solutions Inc. ++00:05:46 K-Solutions Inc. + 00:05:47 Starent Networks + 00:05:48 Disco Corporation + 00:05:49 Salira Optical Network Systems +@@ -1369,7 +1378,7 @@ + 00:05:4D Brans Technologies, Inc. + 00:05:4E Philips Components + 00:05:4F Private +-00:05:50 Digi-tech Communications Limited ++00:05:50 Digi-Tech Communications Limited + 00:05:51 F & S Elektronik Systeme Gmbh + 00:05:52 Xycotec Computer Gmbh + 00:05:53 Dvc Company, Inc. +@@ -1378,25 +1387,25 @@ + 00:05:56 360 Systems + 00:05:57 Agile Tv Corporation + 00:05:58 Synchronous, Inc. +-00:05:59 Intracom S.a. ++00:05:59 Intracom S.A. + 00:05:5A Power Dsine Ltd. + 00:05:5B Charles Industries, Ltd. + 00:05:5C Kowa Company, Ltd. +-00:05:5D D-Link DWL-650, DWL-650H ++00:05:5D D-Link Systems, Inc. + 00:05:5E Cisco Systems, Inc. + 00:05:5F Cisco Systems, Inc. +-00:05:60 Leader Comm.co., Ltd ++00:05:60 Leader Comm.Co., Ltd + 00:05:61 Nac Image Technology, Inc. + 00:05:62 Digital View Limited +-00:05:63 J-works, Inc. ++00:05:63 J-Works, Inc. + 00:05:64 Tsinghua Bitway Co., Ltd. + 00:05:65 Tailyn Communication Company Ltd. +-00:05:66 Secui.com Corporation ++00:05:66 Secui.Com Corporation + 00:05:67 Etymonic Design, Inc. + 00:05:68 Piltofish Networks Ab + 00:05:69 Vmware, Inc. +-00:05:6A Private +-00:05:6B C.p. Technology Co., Ltd. ++00:05:6A Heuft Systemtechnik Gmbh ++00:05:6B C.P. Technology Co., Ltd. + 00:05:6C Hung Chang Co., Ltd. + 00:05:6D Pacific Corporation + 00:05:6E National Enhance Technology, Inc. +@@ -1406,7 +1415,7 @@ + 00:05:72 Deonet Co., Ltd. + 00:05:73 Cisco Systems, Inc. + 00:05:74 Cisco Systems, Inc. +-00:05:75 Cds-electronics Bv ++00:05:75 Cds-Electronics Bv + 00:05:76 Nsm Technology Ltd. + 00:05:77 Sm Information & Communication + 00:05:78 Private +@@ -1431,7 +1440,7 @@ + 00:05:8B Ipmental, Inc. + 00:05:8C Opentech Inc. + 00:05:8D Lynx Photonic Networks, Inc. +-00:05:8E Ahead Communications System Gmbh ++00:05:8E Flextronics International Gmbh & Co. Nfg. Kg + 00:05:8F Clcsoft Co. + 00:05:90 Swissvoice Ltd. + 00:05:91 Active Silicon Ltd. +@@ -1441,8 +1450,8 @@ + 00:05:95 Alesis Corporation + 00:05:96 Genotech Co., Ltd. + 00:05:97 Eagle Traffic Control Systems +-00:05:98 Cronos S.r.l. +-00:05:99 Pei Electronics, Inc. ++00:05:98 Cronos S.R.L. ++00:05:99 Drs Test And Energy Management Or Drs-Tem + 00:05:9A Cisco Systems, Inc. + 00:05:9B Cisco Systems, Inc. + 00:05:9C Kleinknecht Gmbh, Ing. Buero +@@ -1464,11 +1473,11 @@ + 00:05:AC Northern Digital, Inc. + 00:05:AD Topspin Communications, Inc. + 00:05:AE Mediaport Usa +-00:05:AF Innoscan Computing A/s ++00:05:AF Innoscan Computing A/S + 00:05:B0 Korea Computer Technology Co., Ltd. + 00:05:B1 Asb Technology Bv + 00:05:B2 Medison Co., Ltd. +-00:05:B3 Asahi-engineering Co., Ltd. ++00:05:B3 Asahi-Engineering Co., Ltd. + 00:05:B4 Aceex Corporation + 00:05:B5 Broadcom Technologies + 00:05:B6 Insys Microelectronics Gmbh +@@ -1482,13 +1491,13 @@ + 00:05:BE Kongsberg Seatex As + 00:05:BF Justezy Technology, Inc. + 00:05:C0 Digital Network Alacarte Co., Ltd. +-00:05:C1 A-kyung Motion, Inc. +-00:05:C2 Digital Archway, Inc. ++00:05:C1 A-Kyung Motion, Inc. ++00:05:C2 Soronti, Inc. + 00:05:C3 Pacific Instruments, Inc. + 00:05:C4 Telect, Inc. + 00:05:C5 Flaga Hf + 00:05:C6 Triz Communications +-00:05:C7 I/f-com A/s ++00:05:C7 I/F-Com A/S + 00:05:C8 Verytech + 00:05:C9 Lg Innotek + 00:05:CA Hitron Technology, Inc. +@@ -1517,7 +1526,7 @@ + 00:05:E1 Trellis Photonics, Ltd. + 00:05:E2 Creativ Network Technologies + 00:05:E3 Lightsand Communications, Inc. +-00:05:E4 Red Lion Controls L.p. ++00:05:E4 Red Lion Controls L.P. + 00:05:E5 Renishaw Plc + 00:05:E6 Egenera, Inc. + 00:05:E7 Netrake Corp. +@@ -1543,19 +1552,19 @@ + 00:05:FB Sharegate, Inc. + 00:05:FC Schenck Pegasus Corp. + 00:05:FD Packetlight Networks Ltd. +-00:05:FE Traficon N.v. ++00:05:FE Traficon N.V. + 00:05:FF Sns Solutions, Inc. + 00:06:00 Tokyo Electronic Industry Co., Ltd. + 00:06:01 Otanikeiki Co., Ltd. + 00:06:02 Cirkitech Electronics Co. + 00:06:03 Baker Hughes Inc. +-00:06:04 @track Communications, Inc. ++00:06:04 @Track Communications, Inc. + 00:06:05 Inncom International, Inc. + 00:06:06 Rapidwan, Inc. + 00:06:07 Omni Directional Control Technology Inc. +-00:06:08 At-sky Sas ++00:06:08 At-Sky Sas + 00:06:09 Crossport Systems +-00:06:0A Blue2space ++00:06:0A Blue2Space + 00:06:0B Paceline Systems Corporation + 00:06:0C Melco Industries, Inc. + 00:06:0D Wave7 Optics +@@ -1582,7 +1591,7 @@ + 00:06:22 Chung Fu Chen Yeh Enterprise Corp. + 00:06:23 Mge Ups Systems France + 00:06:24 Gentner Communications Corp. +-00:06:25 Linksys WPC11 v2.5, D-Link DCF-650W, Linksys WPC11 v3 ++00:06:25 The Linksys Group, Inc. + 00:06:26 Mwe Gmbh + 00:06:27 Uniwide Technologies, Inc. + 00:06:28 Cisco Systems, Inc. +@@ -1590,7 +1599,7 @@ + 00:06:2A Cisco Systems, Inc. + 00:06:2B Intraserver Technology + 00:06:2C Network Robots, Inc. +-00:06:2D Touchstar Technologies, L.l.c. ++00:06:2D Touchstar Technologies, L.L.C. + 00:06:2E Aristos Logic Corp. + 00:06:2F Pivotech Systems Inc. + 00:06:30 Adtranz Sweden +@@ -1600,8 +1609,8 @@ + 00:06:34 Gte Airfone Inc. + 00:06:35 Packetair Networks, Inc. + 00:06:36 Jedai Broadband Networks +-00:06:37 Toptrend-meta Information (shenzhen) Inc. +-00:06:38 Sungjin C&c Co., Ltd. ++00:06:37 Toptrend-Meta Information (Shenzhen) Inc. ++00:06:38 Sungjin C&C Co., Ltd. + 00:06:39 Newtec + 00:06:3A Dura Micro, Inc. + 00:06:3B Arcturus Networks, Inc. +@@ -1616,15 +1625,15 @@ + 00:06:44 Neix Inc. + 00:06:45 Meisei Electric Co. Ltd. + 00:06:46 Shenzhen Xunbao Network Technology Co Ltd +-00:06:47 Etrali S.a. ++00:06:47 Etrali S.A. + 00:06:48 Seedsware, Inc. + 00:06:49 Quante +-00:06:4A Honeywell Co., Ltd. (korea) ++00:06:4A Honeywell Co., Ltd. (Korea) + 00:06:4B Alexon Co., Ltd. + 00:06:4C Invicta Networks, Inc. + 00:06:4D Sencore + 00:06:4E Broad Net Technology Inc. +-00:06:4F Pro-nets Technology Corporation ++00:06:4F Pro-Nets Technology Corporation + 00:06:50 Tiburon Networks, Inc. + 00:06:51 Aspen Networks Inc. + 00:06:52 Cisco Systems, Inc. +@@ -1634,7 +1643,7 @@ + 00:06:56 Tactel Ab + 00:06:57 Market Central, Inc. + 00:06:58 Helmut Fischer Gmbh & Co. Kg +-00:06:59 Eal (apeldoorn) B.v. ++00:06:59 Eal (Apeldoorn) B.V. + 00:06:5A Strix Systems + 00:06:5B Dell Computer Corp. + 00:06:5C Malachite Technologies, Inc. +@@ -1654,7 +1663,7 @@ + 00:06:6A Infinicon Systems, Inc. + 00:06:6B Sysmex Corporation + 00:06:6C Robinson Corporation +-00:06:6D Compuprint S.p.a. ++00:06:6D Compuprint S.P.A. + 00:06:6E Delta Electronics, Inc. + 00:06:6F Korea Data Systems + 00:06:70 Upponetti Oy +@@ -1668,7 +1677,7 @@ + 00:06:78 Marantz Japan, Inc. + 00:06:79 Konami Corporation + 00:06:7A Jmp Systems +-00:06:7B Toplink C&c Corporation ++00:06:7B Toplink C&C Corporation + 00:06:7C Cisco Systems, Inc. + 00:06:7D Takasago Ltd. + 00:06:7E Wincom Systems, Inc. +@@ -1683,9 +1692,9 @@ + 00:06:87 Omnitron Systems Technology, Inc. + 00:06:88 Telways Communication Co., Ltd. + 00:06:89 Ylez Technologies Pte Ltd +-00:06:8A Neuronnet Co. Ltd. R&d Center ++00:06:8A Neuronnet Co. Ltd. R&D Center + 00:06:8B Airrunner Technologies, Inc. +-00:06:8C 3com Corporation ++00:06:8C 3Com Corporation + 00:06:8D Sangate Systems + 00:06:8E Hid Corporation + 00:06:8F Telemonitor, Inc. +@@ -1711,12 +1720,12 @@ + 00:06:A3 Bitran Corporation + 00:06:A4 Innowell Corp. + 00:06:A5 Pinon Corp. +-00:06:A6 Artistic Licence (uk) Ltd ++00:06:A6 Artistic Licence (Uk) Ltd + 00:06:A7 Primarion + 00:06:A8 Kc Technology, Inc. + 00:06:A9 Universal Instruments Corp. + 00:06:AA Miltope Corporation +-00:06:AB W-link Systems, Inc. ++00:06:AB W-Link Systems, Inc. + 00:06:AC Intersoft Co. + 00:06:AD Kb Electronics Ltd. + 00:06:AE Himachal Futuristic Communications Ltd +@@ -1727,10 +1736,10 @@ + 00:06:B3 Diagraph Corporation + 00:06:B4 Vorne Industries, Inc. + 00:06:B5 Luminent, Inc. +-00:06:B6 Nir-or Israel Ltd. ++00:06:B6 Nir-Or Israel Ltd. + 00:06:B7 Telem Gmbh + 00:06:B8 Bandspeed Pty Ltd +-00:06:B9 A5tek Corp. ++00:06:B9 A5Tek Corp. + 00:06:BA Westwave Communications + 00:06:BB Ati Technologies Inc. + 00:06:BC Macrolink, Inc. +@@ -1744,33 +1753,33 @@ + 00:06:C4 Piolink Inc. + 00:06:C5 Innovi Technologies Limited + 00:06:C6 Lesswire Ag +-00:06:C7 Rfnet Technologies Pte Ltd (s) ++00:06:C7 Rfnet Technologies Pte Ltd (S) + 00:06:C8 Sumitomo Metal Micro Devices, Inc. + 00:06:C9 Technical Marketing Research, Inc. +-00:06:CA American Computer & Digital Components, Inc. (acdc) +-00:06:CB Jotron Electronics A/s ++00:06:CA American Computer & Digital Components, Inc. (Acdc) ++00:06:CB Jotron Electronics A/S + 00:06:CC Jmi Electronics Co., Ltd. + 00:06:CD Creoscitex Corporation Ltd. + 00:06:CE Dateno +-00:06:CF Thales Avionics In-flight Systems, Llc ++00:06:CF Thales Avionics In-Flight Systems, Llc + 00:06:D0 Elgar Electronics Corp. + 00:06:D1 Tahoe Networks, Inc. + 00:06:D2 Tundra Semiconductor Corp. +-00:06:D3 Alpha Telecom, Inc. U.s.a. ++00:06:D3 Alpha Telecom, Inc. U.S.A. + 00:06:D4 Interactive Objects, Inc. + 00:06:D5 Diamond Systems Corp. + 00:06:D6 Cisco Systems, Inc. + 00:06:D7 Cisco Systems, Inc. + 00:06:D8 Maple Optical Systems +-00:06:D9 Ipm-net S.p.a. ++00:06:D9 Ipm-Net S.P.A. + 00:06:DA Itran Communications Ltd. + 00:06:DB Ichips Co., Ltd. +-00:06:DC Syabas Technology (amquest) ++00:06:DC Syabas Technology (Amquest) + 00:06:DD At & T Laboratories - Cambridge Ltd + 00:06:DE Flash Technology + 00:06:DF Aidonic Corporation + 00:06:E0 Mat Co., Ltd. +-00:06:E1 Techno Trade S.a ++00:06:E1 Techno Trade S.A + 00:06:E2 Ceemax Technology Co., Ltd. + 00:06:E3 Quantitative Imaging Corporation + 00:06:E4 Citel Technologies Ltd. +@@ -1779,11 +1788,11 @@ + 00:06:E7 Bit Blitz Communications Inc. + 00:06:E8 Optical Network Testing, Inc. + 00:06:E9 Intime Corp. +-00:06:EA Elzet80 Mikrocomputer Gmbh&co. Kg ++00:06:EA Elzet80 Mikrocomputer Gmbh&Co. Kg + 00:06:EB Global Data +-00:06:EC M/a Com Private Radio System Inc. ++00:06:EC M/A Com Private Radio System Inc. + 00:06:ED Inara Networks +-00:06:EE Shenyang Neu-era Information & Technology Stock Co., Ltd ++00:06:EE Shenyang Neu-Era Information & Technology Stock Co., Ltd + 00:06:EF Maxxan Systems, Inc. + 00:06:F0 Digeo, Inc. + 00:06:F1 Optillion +@@ -1793,13 +1802,13 @@ + 00:06:F8 Private + 00:06:F9 Mitsui Zosen Systems Research Inc. + 00:06:FA Ip Square Co, Ltd. +-00:06:FB Hitachi Koki Co., Ltd. ++00:06:FB Hitachi Printing Solutions, Ltd. + 00:06:FC Fnet Co., Ltd. + 00:06:FD Comjet Information Systems Corp. + 00:06:FE Celion Networks, Inc. + 00:06:FF Sheba Systems Co., Ltd. + 00:07:00 Zettamedia Korea +-00:07:01 Racal-datacom ++00:07:01 Racal-Datacom + 00:07:02 Varian Medical Systems + 00:07:03 Csee Transport + 00:07:05 Endress & Hauser Gmbh & Co +@@ -1809,9 +1818,9 @@ + 00:07:09 Westerstrand Urfabrik Ab + 00:07:0A Unicom Automation Co., Ltd. + 00:07:0B Octal, Sa +-00:07:0C Sva-intrusion.com Co. Ltd. ++00:07:0C Sva-Intrusion.Com Co. Ltd. + 00:07:0D Cisco Systems Inc. +-00:07:0E Cisco AIR-PCM352 ++00:07:0E Cisco Systems Inc. + 00:07:0F Fujant, Inc. + 00:07:10 Adax, Inc. + 00:07:11 Acterna +@@ -1825,9 +1834,9 @@ + 00:07:19 Mobiis Co., Ltd. + 00:07:1A Finedigital Inc. + 00:07:1B Position Technology Inc. +-00:07:1C At&t Fixed Wireless Services +-00:07:1D Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.a. +-00:07:1E Tri-m Engineering / Nupak Dev. Corp. ++00:07:1C At&T Fixed Wireless Services ++00:07:1D Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A. ++00:07:1E Tri-M Engineering / Nupak Dev. Corp. + 00:07:1F European Systems Integration + 00:07:20 Trutzschler Gmbh & Co. Kg + 00:07:21 Formac Elektronik Gmbh +@@ -1835,7 +1844,7 @@ + 00:07:23 Elcon Systemtechnik Gmbh + 00:07:24 Telemax Co., Ltd. + 00:07:25 Bematech International Corp. +-00:07:27 Zi Corporation (hk) Ltd. ++00:07:27 Zi Corporation (Hk) Ltd. + 00:07:28 Neo Telecom + 00:07:29 Kistler Instrumente Ag + 00:07:2A Innovance Networks +@@ -1848,7 +1857,7 @@ + 00:07:31 Spiricon, Inc. + 00:07:32 Aaeon Technology Inc. + 00:07:33 Dancontrol Engineering +-00:07:34 Agile Storage, Inc. ++00:07:34 Onstor, Inc. + 00:07:35 Flarion Technologies, Inc. + 00:07:36 Data Video Technologies Co., Ltd. + 00:07:37 Soriya Co. Ltd. +@@ -1858,7 +1867,7 @@ + 00:07:3B Tenovis Gmbh & Co Kg + 00:07:3C Telecom Design + 00:07:3D Nanjing Postel Telecommunications Co., Ltd. +-00:07:3E China Great-wall Computer Shenzhen Co., Ltd. ++00:07:3E China Great-Wall Computer Shenzhen Co., Ltd. + 00:07:3F Woojyun Systec Co., Ltd. + 00:07:40 Melco Inc. + 00:07:41 Sierra Automated Systems +@@ -1876,8 +1885,8 @@ + 00:07:4D Zebra Technologies Corp. + 00:07:4E Naughty Boy Co., Ltd. + 00:07:4F Cisco Systems, Inc. +-00:07:50 Cisco AIR-LMC352 +-00:07:51 M.u.t. - Gmbh ++00:07:50 Cisco Systems, Inc. ++00:07:51 M.U.T. - Gmbh + 00:07:52 Rhythm Watch Co., Ltd. + 00:07:53 Beijing Qxcomm Technology Co., Ltd. + 00:07:54 Xyterra Computing, Inc. +@@ -1900,7 +1909,7 @@ + 00:07:65 Jade Quantum Technologies, Inc. + 00:07:66 Chou Chin Industrial Co., Ltd. + 00:07:67 Yuxing Electronics Company Limited +-00:07:68 Danfoss A/s ++00:07:68 Danfoss A/S + 00:07:69 Italiana Macchi Spa + 00:07:6A Nexteye Co., Ltd. + 00:07:6B Stralfors Ab +@@ -1910,7 +1919,7 @@ + 00:07:6F Synoptics Limited + 00:07:70 Locusnetworks Corporation + 00:07:71 Embedded System Corporation +-00:07:72 Shanghai Bell Company Limited ++00:07:72 Alcatel Shanghai Bell Co., Ltd. + 00:07:73 Ascom Powerline Communications Ltd. + 00:07:74 Guangzhou Thinker Technology Co. Ltd. + 00:07:75 Valence Semiconductor, Inc. +@@ -1939,12 +1948,12 @@ + 00:07:8D Netengines Ltd. + 00:07:8E Garz & Friche Gmbh + 00:07:8F Emkay Innovative Products +-00:07:90 Tri-m Technologies (s) Limited ++00:07:90 Tri-M Technologies (S) Limited + 00:07:91 International Data Communications, Inc. + 00:07:92 Suetron Electronic Gmbh +-00:07:93 Private ++00:07:93 Shin Satellite Public Company Limited + 00:07:94 Simple Devices, Inc. +-00:07:95 Elitegroup Computer System Co. (ecs) ++00:07:95 Elitegroup Computer System Co. (Ecs) + 00:07:96 Lsi Systems, Inc. + 00:07:97 Netpower Co., Ltd. + 00:07:98 Selea Srl +@@ -1955,24 +1964,24 @@ + 00:07:9D Musashi Co., Ltd. + 00:07:9E Ilinx Co., Ltd. + 00:07:9F Action Digital Inc. +-00:07:A0 E-watch Inc. +-00:07:A1 Viasys Critical Care ++00:07:A0 E-Watch Inc. ++00:07:A1 Viasys Healthcare Gmbh + 00:07:A2 Opteon Corporation + 00:07:A3 Ositis Software, Inc. + 00:07:A4 Gn Netcom Ltd. +-00:07:A5 Y.d.k Co. Ltd. ++00:07:A5 Y.D.K Co. Ltd. + 00:07:A6 Home Automation, Inc. +-00:07:A7 A-z Inc. ++00:07:A7 A-Z Inc. + 00:07:A8 Haier Group Technologies Ltd. + 00:07:A9 Novasonics + 00:07:AA Quantum Data Inc. + 00:07:AC Eolring +-00:07:AD Pentacon Gmbh Foto-und Feinwerktechnik ++00:07:AD Pentacon Gmbh Foto-Und Feinwerktechnik + 00:07:AE Layer N Networks +-00:07:AF N-tron Corp. ++00:07:AF N-Tron Corp. + 00:07:B0 Office Details, Inc. + 00:07:B1 Equator Technologies +-00:07:B2 Transaccess S.a. ++00:07:B2 Transaccess S.A. + 00:07:B3 Cisco Systems Inc. + 00:07:B4 Cisco Systems Inc. + 00:07:B5 Any One Wireless Ltd. +@@ -1981,7 +1990,7 @@ + 00:07:B8 American Predator Corp. + 00:07:B9 Ginganet Corporation + 00:07:BA Xebeo Communications, Inc. +-00:07:BB Confluence Networks ++00:07:BB Candera Inc. + 00:07:BC Identix Inc. + 00:07:BD Radionet Ltd. + 00:07:BE Datalogic Spa +@@ -2005,9 +2014,9 @@ + 00:07:D0 Automat Engenharia De Automaoa Ltda. + 00:07:D1 Spectrum Signal Processing Inc. + 00:07:D2 Logopak Systeme +-00:07:D3 Stork Digital Imaging B.v. ++00:07:D3 Stork Digital Imaging B.V. + 00:07:D4 Zhejiang Yutong Network Communication Co Ltd. +-00:07:D5 3e Technologies Int;., Inc. ++00:07:D5 3E Technologies Int;., Inc. + 00:07:D6 Commil Ltd. + 00:07:D7 Caporis Networks Ag + 00:07:D8 Hitron Systems Inc. +@@ -2055,12 +2064,12 @@ + 00:08:02 Compaq Computer Corporation + 00:08:03 Cos Tron + 00:08:04 Ica Inc. +-00:08:05 Techno-holon Corporation ++00:08:05 Techno-Holon Corporation + 00:08:06 Raonet Systems, Inc. + 00:08:07 Access Devices Limited + 00:08:08 Ppt Vision, Inc. + 00:08:09 Systemonic Ag +-00:08:0A Espera-werke Gmbh ++00:08:0A Espera-Werke Gmbh + 00:08:0B Birka Bpa Informationssystem Ab + 00:08:0C Vda Elettronica Srl + 00:08:0D Toshiba +@@ -2072,18 +2081,18 @@ + 00:08:13 Diskbank, Inc. + 00:08:14 Til Technologies + 00:08:15 Cats Co., Ltd. +-00:08:16 Bluetags A/s ++00:08:16 Bluetags A/S + 00:08:17 Emergecore Networks Llc + 00:08:18 Pixelworks, Inc. + 00:08:19 Banksys + 00:08:1A Sanrad Intelligence Storage Communications (2000) Ltd. + 00:08:1B Windigo Systems +-00:08:1C @pos.com ++00:08:1C @Pos.Com + 00:08:1D Ipsil, Incorporated + 00:08:1E Repeatit Ab + 00:08:1F Pou Yuen Tech Corp. Ltd. + 00:08:20 Cisco Systems Inc. +-00:08:21 Cisco AIR-PCM352 ++00:08:21 Cisco Systems Inc. + 00:08:22 Inpro Comm + 00:08:23 Texa Corp. + 00:08:24 Promatek Industries Ltd. +@@ -2104,7 +2113,7 @@ + 00:08:52 Davolink Co. Inc. + 00:08:53 Schleicher Gmbh & Co. Relaiswerke Kg + 00:08:54 Netronix, Inc. +-00:08:55 Nasa-goddard Space Flight Center ++00:08:55 Nasa-Goddard Space Flight Center + 00:08:56 Gamatronic Electronic Industries Ltd. + 00:08:57 Polaris Networks, Inc. + 00:08:58 Novatechnology Inc. +@@ -2113,18 +2122,18 @@ + 00:08:5B Hanbit Electronics Co., Ltd. + 00:08:5C Shanghai Dare Technologies Co. Ltd. + 00:08:5D Aastra +-00:08:5E Pco Computer Optics Gmbh +-00:08:5F Picanol N.v. ++00:08:5E Pco Ag ++00:08:5F Picanol N.V. + 00:08:60 Lodgenet Entertainment Corp. + 00:08:61 Softenergy Co., Ltd. + 00:08:62 Nec Eluminant Technologies, Inc. + 00:08:63 Entrisphere Inc. +-00:08:64 Fasy S.p.a. ++00:08:64 Fasy S.P.A. + 00:08:65 Jascom Co., Ltd + 00:08:66 Dsx Access Systems, Inc. + 00:08:67 Uptime Devices + 00:08:68 Puroptix +-00:08:69 Command-e Technology Co.,ltd. ++00:08:69 Command-E Technology Co.,Ltd. + 00:08:6A Industrie Technik Ips Gmbh + 00:08:6B Mipsys + 00:08:6C Plasmon Lms +@@ -2134,33 +2143,33 @@ + 00:08:70 Rasvia Systems, Inc. + 00:08:71 Northdata Co., Ltd. + 00:08:72 Sorenson Technologies, Inc. +-00:08:73 Dap Design B.v. ++00:08:73 Dap Design B.V. + 00:08:74 Dell Computer Corp. + 00:08:75 Acorp Electronics Corp. + 00:08:76 Sdsystem +-00:08:77 Liebert Hiross S.p.a. ++00:08:77 Liebert Hiross S.P.A. + 00:08:78 Benchmark Storage Innovations + 00:08:79 Cem Corporation + 00:08:7A Wipotec Gmbh +-00:08:7B Rtx Telecom A/s ++00:08:7B Rtx Telecom A/S + 00:08:7C Cisco Systems, Inc. + 00:08:7D Cisco Systems Inc. +-00:08:7E Bon Electro-telecom Inc. ++00:08:7E Bon Electro-Telecom Inc. + 00:08:7F Spaun Electronic Gmbh & Co. Kg + 00:08:80 Broadtel Canada Communications Inc. +-00:08:81 Digital Hands Co.,ltd. ++00:08:81 Digital Hands Co.,Ltd. + 00:08:82 Sigma Corporation +-00:08:83 Hewlett-packard Company ++00:08:83 Hewlett-Packard Company + 00:08:84 Index Braille Ab + 00:08:85 Ems Dr. Thomas Wuensche + 00:08:86 Hansung Teliann, Inc. +-00:08:87 Private ++00:08:87 Maschinenfabrik Reinhausen Gmbh + 00:08:88 Oullim Information Technology Inc,. + 00:08:89 Echostar Technologies Corp +-00:08:8A Minds@work ++00:08:8A Minds@Work + 00:08:8B Tropic Networks Inc. + 00:08:8C Quanta Network Systems Inc. +-00:08:8D Sigma-links Inc. ++00:08:8D Sigma-Links Inc. + 00:08:8E Nihon Computer Co., Ltd. + 00:08:8F Advanced Digital Technology + 00:08:90 Avilinks Sa +@@ -2168,7 +2177,7 @@ + 00:08:92 Em Solutions + 00:08:93 Private + 00:08:94 Innovision Multimedia Ltd. +-00:08:95 Private ++00:08:95 Dirc Technologie Gmbh & Co.Kg + 00:08:96 Printronix, Inc. + 00:08:97 Quake Technologies + 00:08:98 Gigabit Optics Corporation +@@ -2176,8 +2185,8 @@ + 00:08:9A Alcatel Microelectronics + 00:08:9B Icp Electronics Inc. + 00:08:9C Elecs Industry Co., Ltd. +-00:08:9D Uhd-elektronik +-00:08:9E Beijing Enter-net Co.ltd ++00:08:9D Uhd-Elektronik ++00:08:9E Beijing Enter-Net Co.Ltd + 00:08:9F Efm Networks + 00:08:A0 Stotz Feinmesstechnik Gmbh + 00:08:A1 Cnet Technology Inc. +@@ -2190,58 +2199,58 @@ + 00:08:A8 Systec Co., Ltd. + 00:08:A9 Sangsang Technology, Inc. + 00:08:AA Karam +-00:08:AB Enerlinx.com, Inc. ++00:08:AB Enerlinx.Com, Inc. + 00:08:AC Private +-00:08:AD Toyo-linx Co., Ltd. ++00:08:AD Toyo-Linx Co., Ltd. + 00:08:AE Packetfront + 00:08:AF Novatec Corporation + 00:08:B0 Bktel Communications Gmbh + 00:08:B1 Proquent Systems +-00:08:B2 Shenzhen Compass Technology Development Co.,ltd ++00:08:B2 Shenzhen Compass Technology Development Co.,Ltd + 00:08:B3 Fastwel + 00:08:B4 Syspol + 00:08:B5 Tai Guen Enterprise Co., Ltd + 00:08:B6 Routefree, Inc. + 00:08:B7 Hit Incorporated +-00:08:B8 E.f. Johnson ++00:08:B8 E.F. Johnson + 00:08:B9 Kaon Media Co., Ltd. + 00:08:BA Erskine Systems Ltd + 00:08:BB Netexcell + 00:08:BC Ilevo Ab +-00:08:BD Tepg-us ++00:08:BD Tepg-Us + 00:08:BE Xenpak Msa Group + 00:08:BF Aptus Elektronik Ab + 00:08:C0 Asa Systems + 00:08:C1 Avistar Communications Corporation + 00:08:C2 Cisco Systems +-00:08:C3 Contex A/s +-00:08:C4 Private ++00:08:C3 Contex A/S ++00:08:C4 Hikari Co.,Ltd. + 00:08:C5 Liontech Co., Ltd. + 00:08:C6 Philips Consumer Communications + 00:08:C7 Compaq Computer Corporation + 00:08:C8 Soneticom, Inc. + 00:08:C9 Technisat Digital Gmbh +-00:08:CA Twinhan Technology Co.,ltd ++00:08:CA Twinhan Technology Co.,Ltd + 00:08:CB Zeta Broadband Inc. + 00:08:CC Remotec, Inc. +-00:08:CD With-net Inc ++00:08:CD With-Net Inc + 00:08:CE Private + 00:08:CF Nippon Koei Power Systems Co., Ltd. + 00:08:D0 Musashi Engineering Co., Ltd. + 00:08:D1 Karel Inc. + 00:08:D2 Zoom Networks Inc. +-00:08:D3 Hercules Technologies S.a. ++00:08:D3 Hercules Technologies S.A. + 00:08:D4 Ineoquest Technologies, Inc + 00:08:D5 Vanguard Managed Solutions + 00:08:D6 Hassnet Inc. + 00:08:D7 How Corporation + 00:08:D8 Dowkey Microwave +-00:08:D9 Mitadenshi Co.,ltd ++00:08:D9 Mitadenshi Co.,Ltd + 00:08:DA Sofaware Technologies Ltd. + 00:08:DB Corrigent Systems + 00:08:DC Wiznet + 00:08:DD Telena Communications, Inc. +-00:08:DE 3up Systems ++00:08:DE 3Up Systems + 00:08:DF Alistel Inc. + 00:08:E0 Ato Technology Ltd. + 00:08:E1 Barix Ag +@@ -2250,31 +2259,31 @@ + 00:08:E4 Envenergy Inc + 00:08:E5 Idk Corporation + 00:08:E6 Littlefeet +-00:08:E7 Shi Controlsystems,ltd. ++00:08:E7 Shi Controlsystems,Ltd. + 00:08:E8 Excel Master Ltd. + 00:08:E9 Nextgig + 00:08:EA Motion Control Engineering, Inc +-00:08:EB Romwin Co.,ltd. ++00:08:EB Romwin Co.,Ltd. + 00:08:EC Zonu, Inc. +-00:08:ED St&t Instrument Corp. ++00:08:ED St&T Instrument Corp. + 00:08:EE Logic Product Development +-00:08:EF Dibal,s.a. ++00:08:EF Dibal,S.A. + 00:08:F0 Next Generation Systems, Inc. + 00:08:F1 Voltaire +-00:08:F2 Private ++00:08:F2 C&S Technology + 00:08:F3 Wany + 00:08:F4 Bluetake Technology Co., Ltd. +-00:08:F5 Yestechnology Co.,ltd. +-00:08:F6 Sumitomo Electric Hightechs.co.,ltd. +-00:08:F7 Hitachi Ltd, Semiconductor & Integrated Circuits Gr ++00:08:F5 Yestechnology Co.,Ltd. ++00:08:F6 Sumitomo Electric Hightechs.Co.,Ltd. ++00:08:F7 Hitachi Ltd, Semiconductor &Amp; Integrated Circuits Gr + 00:08:F8 Guardall Ltd + 00:08:F9 Padcom, Inc. +-00:08:FA Karl E.brinkmann Gmbh +-00:08:FB Private ++00:08:FA Karl E.Brinkmann Gmbh ++00:08:FB Sonosite, Inc. + 00:08:FC Gigaphoton Inc. + 00:08:FD Bluekorea Co., Ltd. +-00:08:FE Private +-00:08:FF Trilogy Broadcast (holdings) Ltd ++00:08:FE Unik C&C Co.,Ltd. ++00:08:FF Trilogy Broadcast (Holdings) Ltd + 00:09:00 Tmt + 00:09:01 Shenzhen Shixuntong Information & Technoligy Co + 00:09:02 Redline Communications Inc. +@@ -2284,13 +2293,13 @@ + 00:09:06 Esteem Networks + 00:09:07 Chrysalis Development + 00:09:08 Vtech Technology Corp. +-00:09:09 Telenor Connect A/s ++00:09:09 Telenor Connect A/S + 00:09:0A Snedfar Technology Co., Ltd. + 00:09:0B Mtl Instruments Plc + 00:09:0C Mayekawa Mfg. Co. Ltd. +-00:09:0D Private ++00:09:0D Leader Electronics Corp. + 00:09:0E Helix Technology Inc. +-00:09:0F Private ++00:09:0F Fortinet Inc. + 00:09:10 Simple Access Inc. + 00:09:11 Cisco Systems + 00:09:12 Cisco Systems +@@ -2299,50 +2308,50 @@ + 00:09:15 Cas Corp. + 00:09:16 Listman Home Technologies, Inc. + 00:09:17 Wem Technology Inc +-00:09:18 Samsung Techwin Co.,ltd ++00:09:18 Samsung Techwin Co.,Ltd + 00:09:19 Mds Gateways + 00:09:1A Macat Optics & Electronics Co., Ltd. + 00:09:1B Digital Generation Inc. + 00:09:1C Cachevision, Inc + 00:09:1D Proteam Computer Corporation + 00:09:1E Firstech Technology Corp. +-00:09:1F A&d Co., Ltd. +-00:09:20 Private ++00:09:1F A&Amp;D Co., Ltd. ++00:09:20 Epox Computer Co.,Ltd. + 00:09:21 Planmeca Oy + 00:09:22 Touchless Sensor Technology Ag + 00:09:23 Heaman System Co., Ltd + 00:09:24 Telebau Gmbh + 00:09:25 Vsn Systemen Bv + 00:09:26 Yoda Communications, Inc. +-00:09:27 Toyokeiki Co.,ltd. ++00:09:27 Toyokeiki Co.,Ltd. + 00:09:28 Telecore Inc +-00:09:29 Sanyo Industries (uk) Limited +-00:09:2A Mytecs Co.,ltd. ++00:09:29 Sanyo Industries (Uk) Limited ++00:09:2A Mytecs Co.,Ltd. + 00:09:2B Iqstor Networks, Inc. + 00:09:2C Hitpoint Inc. + 00:09:2D High Tech Computer, Corp. +-00:09:2E B&tech System Inc. ++00:09:2E B&Tech System Inc. + 00:09:2F Akom Technology Corporation + 00:09:30 Aeroconcierge Inc. + 00:09:31 Future Internet, Inc. + 00:09:32 Omnilux + 00:09:33 Optovalley Co. Ltd. +-00:09:34 Dream-multimedia-tv Gmbh ++00:09:34 Dream-Multimedia-Tv Gmbh + 00:09:35 Sandvine Incorporated +-00:09:36 Ipetronik Gmbh & Co.kg ++00:09:36 Ipetronik Gmbh & Co.Kg + 00:09:37 Inventec Appliance Corp + 00:09:38 Allot Communications +-00:09:39 Shibasoku Co.,ltd. ++00:09:39 Shibasoku Co.,Ltd. + 00:09:3A Molex Fiber Optics + 00:09:3B Hyundai Networks Inc. +-00:09:3C Jacques Technologies P/l +-00:09:3D Private +-00:09:3E C&i Technologies +-00:09:3F Double-win Enterpirse Co., Ltd ++00:09:3C Jacques Technologies P/L ++00:09:3D Newisys,Inc. ++00:09:3E C&I Technologies ++00:09:3F Double-Win Enterpirse Co., Ltd + 00:09:40 Agfeo Gmbh & Co. Kg +-00:09:41 Allied Telesis K.k. ++00:09:41 Allied Telesis K.K. + 00:09:42 Cresco, Ltd. +-00:09:43 Cisco AIR-LMC352 ++00:09:43 Cisco Systems + 00:09:44 Cisco Systems + 00:09:45 Palmmicro Communications Inc + 00:09:46 Cluster Labs Gmbh +@@ -2351,31 +2360,31 @@ + 00:09:49 Glyph Technologies Inc. + 00:09:4A Homenet Communications + 00:09:4B Fillfactory Nv +-00:09:4C Communication Weaver Co.,ltd. ++00:09:4C Communication Weaver Co.,Ltd. + 00:09:4D Braintree Communications Pty Ltd + 00:09:4E Bartech Systems International, Inc +-00:09:4F Private ++00:09:4F Elmegt Gmbh & Co. Kg + 00:09:50 Independent Storage Corporation +-00:09:51 Private ++00:09:51 Apogee Instruments, Inc + 00:09:52 Auerswald Gmbh & Co. Kg +-00:09:53 Linkage System Integration Co.ltd. ++00:09:53 Linkage System Integration Co.Ltd. + 00:09:54 Amit Spol. S. R. O. + 00:09:55 Young Generation International Corp. +-00:09:56 Network Systems Group, Ltd. (nsg) ++00:09:56 Network Systems Group, Ltd. (Nsg) + 00:09:57 Supercaller, Inc. +-00:09:58 Intelnet S.a. ++00:09:58 Intelnet S.A. + 00:09:59 Sitecsoft + 00:09:5A Racewood Technology +-00:09:5B Netgear MA701, MA401RA +-00:09:5C Private ++00:09:5B Netgear, Inc. ++00:09:5C Philips Medical Systems - Cardiac And Monitoring Systems (Cm + 00:09:5D Dialogue Technology Corp. + 00:09:5E Masstech Group Inc. + 00:09:5F Telebyte, Inc. + 00:09:60 Yozan Inc. + 00:09:61 Switchgear And Instrumentation Ltd + 00:09:62 Filetrac As +-00:09:63 Private +-00:09:64 Hi-techniques ++00:09:63 Dominion Lasercom Inc. ++00:09:64 Hi-Techniques + 00:09:65 Private + 00:09:66 Thales Navigation + 00:09:67 Tachyon, Inc +@@ -2386,23 +2395,23 @@ + 00:09:6C Imedia Semiconductor Corp. + 00:09:6D Powernet Technologies Corp. + 00:09:6E Giant Electronics Ltd. +-00:09:6F Beijing Zhongqing Elegant Tech. Corp.,limited ++00:09:6F Beijing Zhongqing Elegant Tech. Corp.,Limited + 00:09:70 Vibration Research Corporation + 00:09:71 Time Management, Inc. +-00:09:72 Securebase,inc ++00:09:72 Securebase,Inc + 00:09:73 Lenten Technology Co., Ltd. + 00:09:74 Innopia Technologies, Inc. + 00:09:75 Fsona Communications Corporation +-00:09:76 Private ++00:09:76 Datasoft Isdn Systems Gmbh + 00:09:77 Brunner Elektronik Ag + 00:09:78 Aiji System Co., Ltd. + 00:09:79 Advanced Television Systems Committee, Inc. + 00:09:7A Louis Design Labs. + 00:09:7B Cisco Systems +-00:09:7C Cisco AIR-LMC352 ++00:09:7C Cisco Systems + 00:09:7D Secwell Networks Oy + 00:09:7E Imi Technology Co., Ltd +-00:09:7F Private ++00:09:7F Vsecure 2000 Ltd. + 00:09:80 Power Zenith Inc. + 00:09:81 Newport Networks + 00:09:82 Loewe Opta Gmbh +@@ -2410,31 +2419,31 @@ + 00:09:84 Mycasa Network Inc. + 00:09:85 Auto Telecom Company + 00:09:86 Metalink Ltd. +-00:09:87 Nishi Nippon Electric Wire & Cable Co.,ltd. ++00:09:87 Nishi Nippon Electric Wire & Cable Co.,Ltd. + 00:09:88 Nudian Electron Co., Ltd. + 00:09:89 Vividlogic Inc. + 00:09:8A Equallogic Inc + 00:09:8B Entropic Communications, Inc. + 00:09:8C Possio Ab +-00:09:8D Dct Ltd (digital Communication Technologies Ltd) ++00:09:8D Dct Ltd (Digital Communication Technologies Ltd) + 00:09:8E Ipcas Gmbh + 00:09:8F Cetacean Networks + 00:09:90 Acksys Communications & Systems + 00:09:91 Ge Fanuc Automation Manufacturing, Inc. +-00:09:92 Interepoch Technology,inc. ++00:09:92 Interepoch Technology,Inc. + 00:09:93 Visteon Corporation + 00:09:94 Cronyx Engineering + 00:09:95 Castle Technology Ltd + 00:09:96 Rdi + 00:09:97 Nortel Networks +-00:09:98 Private ++00:09:98 Capinfo Company Limited + 00:09:99 Cp Georges Renault + 00:09:9A Elmo Company, Limited + 00:09:9B Western Telematic Inc. + 00:09:9C Naval Research Laboratory + 00:09:9D Haliplex Communications + 00:09:9E Testech, Inc. +-00:09:9F Private ++00:09:9F Videx Inc. + 00:09:A0 Microtechno Corporation + 00:09:A1 Telewise Communications, Inc. + 00:09:A2 Interface Co., Ltd. +@@ -2442,33 +2451,33 @@ + 00:09:A4 Hartec Corporation + 00:09:A5 Hansung Eletronic Industries Development Co., Ltd + 00:09:A6 Ignis Optics, Inc. +-00:09:A7 Bang & Olufsen A/s ++00:09:A7 Bang & Olufsen A/S + 00:09:A8 Eastmode Pte Ltd + 00:09:A9 Ikanos Communications + 00:09:AA Data Comm For Business, Inc. + 00:09:AB Netcontrol Oy + 00:09:AC Lanvoice + 00:09:AD Hyundai Syscomm, Inc. +-00:09:AE Okano Electric Co.,ltd +-00:09:AF E-generis ++00:09:AE Okano Electric Co.,Ltd ++00:09:AF E-Generis + 00:09:B0 Onkyo Corporation + 00:09:B1 Kanematsu Electronics, Ltd. +-00:09:B2 L&f Inc. ++00:09:B2 L&F Inc. + 00:09:B3 Mcm Systems Ltd + 00:09:B4 Kisan Telecom Co., Ltd. +-00:09:B5 3j Tech. Co., Ltd. ++00:09:B5 3J Tech. Co., Ltd. + 00:09:B6 Cisco Systems + 00:09:B7 Cisco Systems + 00:09:B8 Entise Systems + 00:09:B9 Action Imaging Solutions + 00:09:BA Maku Informationstechik Gmbh + 00:09:BB Mathstar, Inc. +-00:09:BC Private ++00:09:BC Digital Safety Technologies Inc. + 00:09:BD Epygi Technologies, Ltd. +-00:09:BE Mamiya-op Co.,ltd. +-00:09:BF Nintendo Co.,ltd. +-00:09:C0 6wind +-00:09:C1 Proces-data A/s ++00:09:BE Mamiya-Op Co.,Ltd. ++00:09:BF Nintendo Co.,Ltd. ++00:09:C0 6Wind ++00:09:C1 Proces-Data A/S + 00:09:C2 Private + 00:09:C3 Netas + 00:09:C4 Medicore Co., Ltd +@@ -2477,10 +2486,10 @@ + 00:09:C7 Movistec + 00:09:C8 Sinagawa Tsushin Keisou Service + 00:09:C9 Bluewinc Co., Ltd. +-00:09:CA Imaxnetworks(shenzhen)limited. ++00:09:CA Imaxnetworks(Shenzhen)Limited. + 00:09:CB Hbrain + 00:09:CC Moog Gmbh +-00:09:CD Hudson Soft Co.,ltd. ++00:09:CD Hudson Soft Co.,Ltd. + 00:09:CE Spacebridge Semiconductor Corp. + 00:09:CF Iad Gmbh + 00:09:D0 Versatel Networks +@@ -2492,35 +2501,35 @@ + 00:09:D6 Knc One Gmbh + 00:09:D7 Dc Security Products + 00:09:D8 Private +-00:09:D9 Private ++00:09:D9 Neoscale Systems, Inc + 00:09:DA Control Module Inc. + 00:09:DB Espace + 00:09:DC Galaxis Technology Ag + 00:09:DD Mavin Technology Inc. + 00:09:DE Samjin Information & Communications Co., Ltd. +-00:09:DF Vestel Komunikasyon Sanayi Ve Ticaret A.s. +-00:09:E0 Xemics S.a. ++00:09:DF Vestel Komunikasyon Sanayi Ve Ticaret A.S. ++00:09:E0 Xemics S.A. + 00:09:E1 Gemtek Technology Co., Ltd. + 00:09:E2 Sinbon Electronics Co., Ltd. +-00:09:E3 Angel Iglesias S.a. ++00:09:E3 Angel Iglesias S.A. + 00:09:E4 K Tech Infosystem Inc. + 00:09:E5 Hottinger Baldwin Messtechnik Gmbh + 00:09:E6 Cyber Switching Inc. + 00:09:E7 Adc Techonology +-00:09:E8 Cisco AIR-LMC352 ++00:09:E8 Cisco Systems + 00:09:E9 Cisco Systems + 00:09:EA Yem Inc. + 00:09:EB Humandata Ltd. + 00:09:EC Daktronics, Inc. + 00:09:ED Cipheroptics +-00:09:EE Meikyo Electric Co.,ltd ++00:09:EE Meikyo Electric Co.,Ltd + 00:09:EF Vocera Communications + 00:09:F0 Shimizu Technology Inc. + 00:09:F1 Yamaki Electric Corporation + 00:09:F2 Cohu, Inc., Electronics Division + 00:09:F3 Well Communication Corp. + 00:09:F4 Alcon Laboratories, Inc. +-00:09:F5 Emerson Network Power Co.,ltd ++00:09:F5 Emerson Network Power Co.,Ltd + 00:09:F6 Shenzhen Eastern Digital Tech Ltd. + 00:09:F7 Sed, A Division Of Calian + 00:09:F8 Unimo Technology Co., Ltd. +@@ -2529,17 +2538,17 @@ + 00:09:FC Ipflex Inc. + 00:09:FD Ubinetics Limited + 00:09:FE Daisy Technologies, Inc. +-00:09:FF X.net 2000 Gmbh ++00:09:FF X.Net 2000 Gmbh + 00:0A:00 Mediatek Corp. + 00:0A:01 Sohoware, Inc. + 00:0A:02 Annso Co., Ltd. +-00:0A:03 Endesa Servicios, S.l. +-00:0A:04 3com Europe Ltd ++00:0A:03 Endesa Servicios, S.L. ++00:0A:04 3Com Europe Ltd + 00:0A:05 Widax Corp. + 00:0A:06 Teledex Llc +-00:0A:07 Beijing Comsys Technologies Co.,ltd. ++00:0A:07 Webwayone Ltd + 00:0A:08 Alpine Electronics, Inc. +-00:0A:09 Private ++00:0A:09 Taracom Integrated Products, Inc. + 00:0A:0A Sunix Co., Ltd. + 00:0A:0B Sealevel Systems, Inc. + 00:0A:0C Scientific Research Corporation +@@ -2550,7 +2559,7 @@ + 00:0A:11 Expet Technologies, Inc + 00:0A:12 Azylex Technology, Inc + 00:0A:13 Silent Witness +-00:0A:14 Teco A.s. ++00:0A:14 Teco A.S. + 00:0A:15 Silicon Data, Inc + 00:0A:16 Lassen Research + 00:0A:17 Nestar Communications, Inc +@@ -2560,7 +2569,7 @@ + 00:0A:1B Stream Labs + 00:0A:1C Bridge Information Co., Ltd. + 00:0A:1D Optical Communications Products Inc. +-00:0A:1E Red-m (communications) Limited ++00:0A:1E Red-M (Communications) Limited + 00:0A:1F Art Ware Telecommunication Co., Ltd. + 00:0A:20 Sva Networks, Inc. + 00:0A:21 Integra Telecom Co. Ltd +@@ -2568,17 +2577,17 @@ + 00:0A:23 Parama Networks Inc + 00:0A:24 Octave Communications + 00:0A:25 Ceragon Networks +-00:0A:26 Private ++00:0A:26 Ceia S.P.A. + 00:0A:27 Apple Computer, Inc. +-00:0A:28 Motorola Personal Communications Sector ++00:0A:28 Motorola + 00:0A:29 Pan Dacom Networking Ag + 00:0A:2A Qsi Systems Inc. + 00:0A:2B Etherstuff + 00:0A:2C Active Tchnology Corporation + 00:0A:2D Private + 00:0A:2E Maple Networks Co., Ltd +-00:0A:2F Private +-00:0A:30 Johnson Controls-asg ++00:0A:2F Artnix Inc. ++00:0A:30 Johnson Controls-Asg + 00:0A:31 Hcv Wireless + 00:0A:32 Xsido Corporation + 00:0A:33 Sierra Logic, Inc. +@@ -2587,19 +2596,19 @@ + 00:0A:36 Synelec Telecom Multimedia + 00:0A:37 Procera Networks, Inc. + 00:0A:38 Netlock Technologies, Inc. +-00:0A:39 Private +-00:0A:3A J-three International Holding Co., Ltd. ++00:0A:39 Lopa Information Technology ++00:0A:3A J-Three International Holding Co., Ltd. + 00:0A:3B Gct Semiconductor, Inc + 00:0A:3C Enerpoint Ltd. +-00:0A:3D Elo Sistemas Eletronicos S.a. ++00:0A:3D Elo Sistemas Eletronicos S.A. + 00:0A:3E Eads Telecom + 00:0A:3F Data East Corporation + 00:0A:40 Crown Audio +-00:0A:41 Cisco AIR-PCM352 ++00:0A:41 Cisco Systems + 00:0A:42 Cisco Systems + 00:0A:43 Chunghwa Telecom Co., Ltd. + 00:0A:44 Avery Dennison Deutschland Gmbh +-00:0A:45 Audio-technica Corp. ++00:0A:45 Audio-Technica Corp. + 00:0A:46 Aro Controls Sas + 00:0A:47 Allied Vision Technologies + 00:0A:48 Albatron Technology +@@ -2617,26 +2626,26 @@ + 00:0A:54 Laguna Hills, Inc. + 00:0A:55 Markem Corporation + 00:0A:56 Hitachi Maxell Ltd. +-00:0A:57 Hewlett-packard Company - Standards +-00:0A:58 Ingenieur-buero Freyer & Siegel ++00:0A:57 Hewlett-Packard Company - Standards ++00:0A:58 Ingenieur-Buero Freyer & Siegel + 00:0A:59 Hw Server +-00:0A:5A Greennet Technologies Co.,ltd. +-00:0A:5B Power-one As +-00:0A:5C Carel S.p.a. +-00:0A:5D Puc Founder (msc) Berhad +-00:0A:5E 3com Corporation ++00:0A:5A Greennet Technologies Co.,Ltd. ++00:0A:5B Power-One As ++00:0A:5C Carel S.P.A. ++00:0A:5D Puc Founder (Msc) Berhad ++00:0A:5E 3Com Corporation + 00:0A:5F Almedio Inc. + 00:0A:60 Autostar Technology Pte Ltd + 00:0A:61 Cellinx Systems Inc. + 00:0A:62 Crinis Networks, Inc. + 00:0A:63 Dhd Gmbh + 00:0A:64 Eracom Technologies +-00:0A:65 Gentechmedia.co.,ltd. +-00:0A:66 Mitsubishi Electric System & Service Co.,ltd. ++00:0A:65 Gentechmedia.Co.,Ltd. ++00:0A:66 Mitsubishi Electric System & Service Co.,Ltd. + 00:0A:67 Ongcorp + 00:0A:68 Solarflare Communications, Inc. + 00:0A:69 Sunny Bell Technology Co., Ltd. +-00:0A:6A Svm Microwaves S.r.o. ++00:0A:6A Svm Microwaves S.R.O. + 00:0A:6B Tadiran Telecom Business Systems Ltd + 00:0A:6C Walchem Corporation + 00:0A:6D Eks Elektronikservice Gmbh +@@ -2648,27 +2657,27 @@ + 00:0A:73 Scientific Atlanta + 00:0A:74 Manticom Networks Inc. + 00:0A:75 Cat Electronics +-00:0A:76 Beida Jade Bird Huaguang Technology Co.,ltd ++00:0A:76 Beida Jade Bird Huaguang Technology Co.,Ltd + 00:0A:77 Bluewire Technologies Llc + 00:0A:78 Olitec +-00:0A:79 Corega K.k. ++00:0A:79 Corega K.K. + 00:0A:7A Kyoritsu Electric Co., Ltd. +-00:0A:7B Private ++00:0A:7B Cornelius Consult + 00:0A:7C Tecton Ltd + 00:0A:7D Valo, Inc. + 00:0A:7E The Advantage Group + 00:0A:7F Teradon Industries, Inc + 00:0A:80 Telkonet Inc. +-00:0A:81 Teima Audiotex S.l. +-00:0A:82 Tatsuta System Electronics Co.,ltd. +-00:0A:83 Salto Systems S.l. ++00:0A:81 Teima Audiotex S.L. ++00:0A:82 Tatsuta System Electronics Co.,Ltd. ++00:0A:83 Salto Systems S.L. + 00:0A:84 Rainsun Enterprise Co., Ltd. +-00:0A:85 Plat'c2,inc ++00:0A:85 Plat'c2,Inc + 00:0A:86 Lenze + 00:0A:87 Integrated Micromachines Inc. +-00:0A:88 Incypher S.a. ++00:0A:88 Incypher S.A. + 00:0A:89 Creval Systems, Inc. +-00:0A:8A Cisco AIR-PCM352 ++00:0A:8A Cisco Systems + 00:0A:8B Cisco Systems + 00:0A:8C Guardware Systems Ltd. + 00:0A:8D Eurotherm Limited +@@ -2682,19 +2691,19 @@ + 00:0A:95 Apple Computer, Inc. + 00:0A:96 Mewtel Technology Inc. + 00:0A:97 Sonicblue, Inc. +-00:0A:98 M+f Gwinner Gmbh & Co ++00:0A:98 M+F Gwinner Gmbh & Co + 00:0A:99 Dataradio Inc. + 00:0A:9A Aiptek International Inc + 00:0A:9B Towa Meccs Corporation + 00:0A:9C Server Technology, Inc. + 00:0A:9D King Young Technology Co. Ltd. + 00:0A:9E Broadweb Corportation +-00:0A:9F Private ++00:0A:9F Pannaway Technologies, Inc. + 00:0A:A0 Cedar Point Communications + 00:0A:A1 V V S Limited + 00:0A:A2 Systek Inc. +-00:0A:A3 Shimafuji Electric Co.,ltd. +-00:0A:A4 Shanghai Surveillance Technology Co,ltd ++00:0A:A3 Shimafuji Electric Co.,Ltd. ++00:0A:A4 Shanghai Surveillance Technology Co,Ltd + 00:0A:A5 Maxlink Industries Limited + 00:0A:A6 Hochiki Corporation + 00:0A:A7 Fei Company +@@ -2705,7 +2714,7 @@ + 00:0A:AC Terratec Electronic Gmbh + 00:0A:AD Stargames Corporation + 00:0A:AE Rosemount Process Analytical +-00:0A:AF Private ++00:0A:AF Pipal Systems + 00:0A:B0 Loytec Electronics Gmbh + 00:0A:B1 Genetec Corporation + 00:0A:B2 Fresnel Wireless Systems +@@ -2719,26 +2728,26 @@ + 00:0A:BA Arcon Technology Limited + 00:0A:BB Taiwan Secom Co,. Ltd + 00:0A:BC Seabridge Ltd. +-00:0A:BD Private ++00:0A:BD Rupprecht & Patashnick Co. + 00:0A:BE Opnet Technologies Co., Ltd. + 00:0A:BF Hirota Ss + 00:0A:C0 Fuyoh Video Industry Co., Ltd. + 00:0A:C1 Futuretel +-00:0A:C2 Fiberhome Telecommunication Technologies Co.,ltd ++00:0A:C2 Fiberhome Telecommunication Technologies Co.,Ltd + 00:0A:C3 Em Technics Co., Ltd. + 00:0A:C4 Daewoo Teletech Co., Ltd + 00:0A:C5 Color Kinetics + 00:0A:C6 Private + 00:0A:C7 Unication Group +-00:0A:C8 Zpsys Co.,ltd. (planning&management) ++00:0A:C8 Zpsys Co.,Ltd. (Planning&Management) + 00:0A:C9 Zambeel Inc +-00:0A:CA Yokoyama Shokai Co.,ltd. ++00:0A:CA Yokoyama Shokai Co.,Ltd. + 00:0A:CB Xpak Msa Group + 00:0A:CC Winnow Networks, Inc. + 00:0A:CD Sunrich Technology Limited + 00:0A:CE Radiantech, Inc. + 00:0A:CF Provideo Multimedia Co. Ltd. +-00:0A:D0 Niigata Develoment Center, F.i.t. Co., Ltd. ++00:0A:D0 Niigata Develoment Center, F.I.T. Co., Ltd. + 00:0A:D1 Mws + 00:0A:D2 Jepico Corporation + 00:0A:D3 Initech Co., Ltd +@@ -2760,17 +2769,17 @@ + 00:0A:E3 Yang Mei Technology Co., Ltd + 00:0A:E4 Wistron Corp. + 00:0A:E5 Scottcare Corporation +-00:0A:E6 Elitegroup Computer System Co. (ecs) +-00:0A:E7 Eliop S.a. ++00:0A:E6 Elitegroup Computer System Co. (Ecs) ++00:0A:E7 Eliop S.A. + 00:0A:E8 Cathay Roxus Information Technology Co. Ltd + 00:0A:E9 Airvast Technology Inc. +-00:0A:EA Adam Elektronik Ltd.sti. +-00:0A:EB Shenzhen Tp-link Technology Co; Ltd. ++00:0A:EA Adam Elektronik Ltd.Sti. ++00:0A:EB Shenzhen Tp-Link Technology Co; Ltd. + 00:0A:EC Koatsu Gas Kogyo Co., Ltd. +-00:0A:ED Harting Vending G.m.b.h. & Co Kg ++00:0A:ED Harting Vending G.M.B.H. & Co Kg + 00:0A:EE Gcd Hard- & Software Gmbh + 00:0A:EF Otrum Asa +-00:0A:F0 Shin-oh Electronics Co., Ltd. R&d ++00:0A:F0 Shin-Oh Electronics Co., Ltd. R&D + 00:0A:F1 Clarity Design, Inc. + 00:0A:F2 Neoaxiom Corp. + 00:0A:F3 Cisco Systems +@@ -2779,14 +2788,14 @@ + 00:0A:F6 Computer Process Controls + 00:0A:F7 Broadcom Corp. + 00:0A:F8 American Telecare Inc. +-00:0A:F9 Private ++00:0A:F9 Hiconnect, Inc. + 00:0A:FA Traverse Technologies Australia + 00:0A:FB Ambri Limited + 00:0A:FC Core Tec Communications, Llc + 00:0A:FD Viking Electronic Services + 00:0A:FE Novapal Ltd + 00:0A:FF Kilchherr Elektronik Ag +-00:0B:00 Fujian Start Computer Equipment Co.,ltd ++00:0B:00 Fujian Start Computer Equipment Co.,Ltd + 00:0B:01 Daiichi Electronics Co., Ltd. + 00:0B:02 Dallmeier Electronic + 00:0B:03 Taekwang Industrial Co., Ltd +@@ -2799,12 +2808,12 @@ + 00:0B:0A Dbm Optics + 00:0B:0B Corrent Corporation + 00:0B:0C Agile Systems Inc. +-00:0B:0D Air2u, Inc. ++00:0B:0D Air2U, Inc. + 00:0B:0E Trapeze Networks + 00:0B:0F Nyquist Industrial Control Bv +-00:0B:10 11wave Technonlogy Co.,ltd +-00:0B:11 Himeji Abc Trading Co.,ltd. +-00:0B:12 Private ++00:0B:10 11Wave Technonlogy Co.,Ltd ++00:0B:11 Himeji Abc Trading Co.,Ltd. ++00:0B:12 Nuri Telecom Co., Ltd. + 00:0B:13 Zetron Inc + 00:0B:14 Viewsonic Corporation + 00:0B:15 Platypus Technology +@@ -2816,10 +2825,10 @@ + 00:0B:1B Systronix, Inc. + 00:0B:1C Private + 00:0B:1D Layerzero Power Systems, Inc. +-00:0B:1E Kappa Opto-electronics Gmbh ++00:0B:1E Kappa Opto-Electronics Gmbh + 00:0B:1F I Con Computer Co. + 00:0B:20 Hirata Corporation +-00:0B:21 G-star Communications Inc. ++00:0B:21 G-Star Communications Inc. + 00:0B:22 Environmental Systems And Services + 00:0B:23 Efficient Networks, Inc. + 00:0B:24 Airlogic +@@ -2827,23 +2836,23 @@ + 00:0B:26 Wetek Corporation + 00:0B:27 Scion Corporation + 00:0B:28 Quatech Inc. +-00:0B:29 Lg Industrial Systems Co.,ltd. ++00:0B:29 Lg Industrial Systems Co.,Ltd. + 00:0B:2A Howtel Co., Ltd. + 00:0B:2B Hostnet Corporation + 00:0B:2C Eiki Industrial Co. Ltd. + 00:0B:2D Danfoss Inc. +-00:0B:2E Cal-comp Electronics (thailand) Public Company Limited Taipe ++00:0B:2E Cal-Comp Electronics (Thailand) Public Company Limited Taipe + 00:0B:2F Bplan Gmbh +-00:0B:30 Beijing Gongye Science & Technology Co.,ltd ++00:0B:30 Beijing Gongye Science & Technology Co.,Ltd + 00:0B:31 Yantai Zhiyang Scientific And Technology Industry Co., Ltd + 00:0B:32 Vormetric, Inc. + 00:0B:33 Vivato +-00:0B:34 Shanghai Broadband Technologies Co.ltd ++00:0B:34 Shanghai Broadband Technologies Co.Ltd + 00:0B:35 Quad Bit System Co., Ltd. + 00:0B:36 Productivity Systems, Inc. + 00:0B:37 Manufacture Des Montres Rolex Sa + 00:0B:38 Knuerr Ag +-00:0B:39 Keisoku Giken Co.,ltd. ++00:0B:39 Keisoku Giken Co.,Ltd. + 00:0B:3A Fortel Dtv, Inc. + 00:0B:3B Devolo Ag + 00:0B:3C Cygnal Integrated Products, Inc. +@@ -2859,10 +2868,10 @@ + 00:0B:46 Cisco + 00:0B:47 Advanced Energy + 00:0B:48 Sofrel +-00:0B:49 Rf-link System Inc. +-00:0B:4A Visimetrics (uk) Ltd ++00:0B:49 Rf-Link System Inc. ++00:0B:4A Visimetrics (Uk) Ltd + 00:0B:4B Visiowave Sa +-00:0B:4C Clarion (m) Sdn Bhd ++00:0B:4C Clarion (M) Sdn Bhd + 00:0B:4D Emuzed + 00:0B:4E Vertexrsi Antenna Products Division + 00:0B:4F Verifone, Inc. +@@ -2874,20 +2883,20 @@ + 00:0B:55 Adinstruments + 00:0B:56 Cybernetics + 00:0B:57 Silicon Laboratories +-00:0B:58 Astronautics C.a Ltd ++00:0B:58 Astronautics C.A Ltd + 00:0B:59 Scriptpro, Llc + 00:0B:5A Hyperedge + 00:0B:5B Rincon Research Corporation +-00:0B:5C Newtech Co.,ltd ++00:0B:5C Newtech Co.,Ltd + 00:0B:5D Fujitsu Limited + 00:0B:5E Atmava Ltd + 00:0B:5F Cisco Systems + 00:0B:60 Cisco Systems +-00:0B:61 Friedrich Lütze Gmbh &co. ++00:0B:61 Friedrich Lütze Gmbh &Co. + 00:0B:62 Ingenieurbüro Ingo Mohnen +-00:0B:63 Private ++00:0B:63 Kaleidescape + 00:0B:64 Kieback & Peter Gmbh & Co Kg +-00:0B:65 Sy.a.c. Srl ++00:0B:65 Sy.A.C. Srl + 00:0B:66 Teralink Communications + 00:0B:67 Topview Technology Corporation + 00:0B:68 Addvalue Communications Pte Ltd +@@ -2904,12 +2913,12 @@ + 00:0B:73 Kodeos Communications + 00:0B:74 Kingwave Technology Co., Ltd. + 00:0B:75 Iosoft Ltd. +-00:0B:76 Et&t Co. Ltd. ++00:0B:76 Et&T Co. Ltd. + 00:0B:77 Cogent Systems, Inc. + 00:0B:78 Taifatech Inc. +-00:0B:79 X-com, Inc. +-00:0B:7A Private +-00:0B:7B Test-um Inc. ++00:0B:79 X-Com, Inc. ++00:0B:7A Wave Science Inc. ++00:0B:7B Test-Um Inc. + 00:0B:7C Telex Communications + 00:0B:7D Solomon Extreme International Ltd. + 00:0B:7E Saginomiya Seisakusho Inc. +@@ -2917,27 +2926,27 @@ + 00:0B:80 Private + 00:0B:81 Kaparel Corporation + 00:0B:82 Grandstream Networks, Inc. +-00:0B:83 Datawatt B.v. ++00:0B:83 Datawatt B.V. + 00:0B:84 Bodet +-00:0B:85 Black Storm Networks ++00:0B:85 Airespace, Inc. + 00:0B:86 Aruba Networks + 00:0B:87 American Reliance Inc. + 00:0B:88 Vidisco Ltd. + 00:0B:89 Top Global Technology, Ltd. + 00:0B:8A Miteq Inc. +-00:0B:8B Kerajet, S.a. ++00:0B:8B Kerajet, S.A. + 00:0B:8C Flextronics Israel + 00:0B:8D Avvio Networks + 00:0B:8E Ascent Corporation +-00:0B:8F Akita Electronics Systems Co.,ltd. ++00:0B:8F Akita Electronics Systems Co.,Ltd. + 00:0B:90 Covaro Networks, Inc. + 00:0B:91 Aglaia Gesellschaft Für Bildverarbeitung Und Kommunikation M +-00:0B:92 Ascom Danmark A/s ++00:0B:92 Ascom Danmark A/S + 00:0B:93 Barmag Electronic + 00:0B:94 Digital Monitoring Products, Inc. + 00:0B:95 Ebet Gaming Systems Pty Ltd + 00:0B:96 Innotrac Diagnostics Oy +-00:0B:97 Matsushita Electric Industrial Co.,ltd. ++00:0B:97 Matsushita Electric Industrial Co.,Ltd. + 00:0B:98 Nicetechvision + 00:0B:99 Sensable Technologies, Inc. + 00:0B:9A Shanghai Ulink Telecom Equipment Co. Ltd. +@@ -2946,22 +2955,22 @@ + 00:0B:9D Twinmos Technologies Inc. + 00:0B:9E Yasing Technology Corp. + 00:0B:9F Neue Elsa Gmbh +-00:0B:A0 T&l Information Inc. ++00:0B:A0 T&L Information Inc. + 00:0B:A1 Syscom Ltd. + 00:0B:A2 Sumitomo Electric Networks, Inc +-00:0B:A3 Siemens Ag, I&s ++00:0B:A3 Siemens Ag, I&S + 00:0B:A4 Shiron Satellite Communications Ltd. (1996) + 00:0B:A5 Quasar Cipta Mandiri, Pt + 00:0B:A6 Miyakawa Electric Works Ltd. + 00:0B:A7 Maranti Networks + 00:0B:A8 Hanback Electronics Co., Ltd. +-00:0B:A9 Private +-00:0B:AA Aiphone Co.,ltd +-00:0B:AB Advantech Technology (china) Co., Ltd. +-00:0B:AC 3com Europe Ltd. +-00:0B:AD Pc-pos Inc. ++00:0B:A9 Cloudshield Technologies, Inc. ++00:0B:AA Aiphone Co.,Ltd ++00:0B:AB Advantech Technology (China) Co., Ltd. ++00:0B:AC 3Com Europe Ltd. ++00:0B:AD Pc-Pos Inc. + 00:0B:AE Vitals System Inc. +-00:0B:AF Private ++00:0B:AF Wooju Communications Co,.Ltd + 00:0B:B0 Sysnet Telematica Srl + 00:0B:B1 Super Star Technology Co., Ltd. + 00:0B:B2 Smallbig Technology +@@ -2969,7 +2978,7 @@ + 00:0B:B4 Rdc Semiconductor Inc., + 00:0B:B5 Nstor Technologies, Inc. + 00:0B:B6 Mototech Inc. +-00:0B:B7 Micro Systems Co.,ltd. ++00:0B:B7 Micro Systems Co.,Ltd. + 00:0B:B8 Kihoku Electronic Co. + 00:0B:B9 Imsys Ab + 00:0B:BA Harmonic Broadband Access Networks +@@ -2985,27 +2994,27 @@ + 00:0B:C4 Biotronik Gmbh & Co + 00:0B:C5 Smc Networks, Inc. + 00:0B:C6 Isac, Inc. +-00:0B:C7 Icet S.p.a. ++00:0B:C7 Icet S.P.A. + 00:0B:C8 Airflow Networks + 00:0B:C9 Electroline Equipment + 00:0B:CA Datavan International Corporation + 00:0B:CB Fagor Automation , S. Coop +-00:0B:CC Jusan, S.a. +-00:0B:CD Compaq (hp) +-00:0B:CE Free2move Ab ++00:0B:CC Jusan, S.A. ++00:0B:CD Compaq (Hp) ++00:0B:CE Free2Move Ab + 00:0B:CF Agfa Ndt Inc. + 00:0B:D0 Ximeta Technology Americas Inc. + 00:0B:D1 Aeronix, Inc. + 00:0B:D2 Remopro Technology Inc. +-00:0B:D3 Cd3o +-00:0B:D4 Beijing Wise Technology & Science Development Co.ltd ++00:0B:D3 Cd3O ++00:0B:D4 Beijing Wise Technology & Science Development Co.Ltd + 00:0B:D5 Nvergence, Inc. + 00:0B:D6 Paxton Access Ltd + 00:0B:D7 Mbb Gelma Gmbh + 00:0B:D8 Industrial Scientific Corp. + 00:0B:D9 General Hydrogen +-00:0B:DA Eyecross Co.,inc. +-00:0B:DB Esg Pcba Test ++00:0B:DA Eyecross Co.,Inc. ++00:0B:DB Dell Esg Pcba Test + 00:0B:DC Akcp + 00:0B:DD Tohoku Ricoh Co., Ltd. + 00:0B:DE Private +@@ -3024,19 +3033,1053 @@ + 00:0B:EB Systegra Ag + 00:0B:EC Nippon Electric Instrument, Inc. + 00:0B:ED Elm Inc. +-00:0B:EE Inc.jet, Incorporated ++00:0B:EE Inc.Jet, Incorporated + 00:0B:EF Code Corporation + 00:0B:F0 Motex Products Co., Ltd. + 00:0B:F1 Lap Laser Applikations +-00:0B:F2 Chih-kan Technology Co., Ltd. ++00:0B:F2 Chih-Kan Technology Co., Ltd. + 00:0B:F3 Bae Systems +-00:0C:6E Silicon Integrated Sys. Corp. +-00:0C:F1 Intel Pro Wireless (Centrino) +-00:10:00 Cable Television Laboraties, Inc. ++00:0B:F4 Private ++00:0B:F5 Shanghai Sibo Telecom Technology Co.,Ltd ++00:0B:F6 Nitgen Co., Ltd ++00:0B:F7 Nidek Co.,Ltd ++00:0B:F8 Infinera ++00:0B:F9 Gemstone Communications, Inc. ++00:0B:FA Private ++00:0B:FB D-Net International Corporation ++00:0B:FC Cisco Systems ++00:0B:FD Cisco Systems ++00:0B:FE Castel Broadband Limited ++00:0B:FF Berkeley Camera Engineering ++00:0C:00 Beb Industrie-Elektronik Ag ++00:0C:01 Abatron Ag ++00:0C:02 Abb Oy ++00:0C:03 Hdmi Licensing, Llc ++00:0C:04 Tecnova ++00:0C:05 Rpa Reserch Co., Ltd. ++00:0C:06 Nixvue Systems Pte Ltd ++00:0C:07 Iftest Ag ++00:0C:08 Humex Technologies Corp. ++00:0C:09 Hitachi Ie Systems Co., Ltd ++00:0C:0A Guangdong Province Electronic Technology Research Institute ++00:0C:0B Broadbus Technologies ++00:0C:0C Appro Technology Inc. ++00:0C:0D Communications & Power Industries / Satcom Division ++00:0C:0E Xtremespectrum, Inc. ++00:0C:0F Techno-One Co., Ltd ++00:0C:10 Pni Corporation ++00:0C:11 Nippon Dempa Co.,Ltd. ++00:0C:12 Micro-Optronic-Messtechnik Gmbh ++00:0C:13 Mediaq ++00:0C:14 Diagnostic Instruments, Inc. ++00:0C:15 Cyberpower Systems, Inc. ++00:0C:16 Concorde Microsystems Inc. ++00:0C:17 Aja Video Systems Inc ++00:0C:18 Zenisu Keisoku Inc. ++00:0C:19 Telio Communications Gmbh ++00:0C:1A Quest Technical Solutions Inc. ++00:0C:1B Oracom Co, Ltd. ++00:0C:1C Microweb Co., Ltd. ++00:0C:1D Mettler & Fuchs Ag ++00:0C:1E Global Cache ++00:0C:1F Glimmerglass Networks ++00:0C:20 Fi Win, Inc. ++00:0C:21 Faculty Of Science And Technology, Keio University ++00:0C:22 Double D Electronics Ltd ++00:0C:23 Beijing Lanchuan Tech. Co., Ltd. ++00:0C:24 Private ++00:0C:25 Allied Telesyn Networks ++00:0C:26 Weintek Labs. Inc. ++00:0C:27 Sammy Corporation ++00:0C:28 Rifatron ++00:0C:29 Vmware, Inc. ++00:0C:2A Octtel Communication Co., Ltd. ++00:0C:2B Elias Technology, Inc. ++00:0C:2C Enwiser Inc. ++00:0C:2D Fullwave Technology Co., Ltd. ++00:0C:2E Openet Information Technology(Shenzhen) Co., Ltd. ++00:0C:2F Seorimtechnology Co.,Ltd. ++00:0C:30 Cisco ++00:0C:31 Cisco ++00:0C:32 Avionic Design Development Gmbh ++00:0C:33 Compucase Enterprise Co. Ltd. ++00:0C:34 Vixen Co., Ltd. ++00:0C:35 Kavo Dental Gmbh & Co. Kg ++00:0C:36 Sharp Takaya Electronics Industry Co.,Ltd. ++00:0C:37 Geomation, Inc. ++00:0C:38 Telcobridges Inc. ++00:0C:39 Sentinel Wireless Inc. ++00:0C:3A Oxance ++00:0C:3B Orion Electric Co., Ltd. ++00:0C:3C Mediachorus, Inc. ++00:0C:3D Glsystech Co., Ltd. ++00:0C:3E Crest Audio ++00:0C:3F Cogent Defence & Security Networks, ++00:0C:40 Altech Controls ++00:0C:41 The Linksys Group, Inc. ++00:0C:42 Routerboard.Com ++00:0C:43 Ralink Technology, Corp. ++00:0C:44 Automated Interfaces, Inc. ++00:0C:45 Animation Technologies Inc. ++00:0C:46 Allied Telesyn Inc. ++00:0C:47 Sk Teletech(R&D Planning Team) ++00:0C:48 Qostek Corporation ++00:0C:49 Dangaard Telecom Rtc Division A/S ++00:0C:4A Cygnus Microsystems Private Limited ++00:0C:4B Cheops Elektronik ++00:0C:4C Arcor Ag&Co. ++00:0C:4D Acra Control ++00:0C:4E Winbest Technology Co,Lt ++00:0C:4F Udtech Japan Corporation ++00:0C:50 Seagate Technology ++00:0C:51 Scientific Technologies Inc. ++00:0C:52 Roll Systems Inc. ++00:0C:53 Private ++00:0C:54 Pedestal Networks, Inc ++00:0C:55 Microlink Communications Inc. ++00:0C:56 Megatel Computer (1986) Corp. ++00:0C:57 Mackie Engineering Services Belgium Bvba ++00:0C:58 M&S Systems ++00:0C:59 Indyme Electronics, Inc. ++00:0C:5A Ibsmm Industrieelektronik Multimedia ++00:0C:5B Hanwang Technology Co.,Ltd ++00:0C:5C Gtn Systems B.V. ++00:0C:5D Chic Technology (China) Corp. ++00:0C:5E Private ++00:0C:5F Avtec, Inc. ++00:0C:60 Acm Systems ++00:0C:61 Ac Tech Corporation Dba Advanced Digital ++00:0C:62 Abb Automation Technology Products Ab, Control ++00:0C:63 Zenith Electronics Corporation ++00:0C:64 X2 Msa Group ++00:0C:65 Sunin Telecom ++00:0C:66 Pronto Networks Inc ++00:0C:67 Oyo Electric Co.,Ltd ++00:0C:68 Oasis Semiconductor, Inc. ++00:0C:69 National Radio Astronomy Observatory ++00:0C:6A Mbari ++00:0C:6B Kurz Industrie-Elektronik Gmbh ++00:0C:6C Elgato Systems Llc ++00:0C:6D Boc Edwards ++00:0C:6E Asustek Computer Inc. ++00:0C:6F Amtek System Co.,Ltd. ++00:0C:70 Acc Gmbh ++00:0C:71 Wybron, Inc ++00:0C:72 Tempearl Industrial Co., Ltd. ++00:0C:73 Telson Electronics Co., Ltd ++00:0C:74 Rivertec Corporation ++00:0C:75 Oriental Integrated Electronics. Ltd ++00:0C:76 Micro-Star International Co., Ltd. ++00:0C:77 Life Racing Ltd ++00:0C:78 In-Tech Electronics Limited ++00:0C:79 Extel Communications P/L ++00:0C:7A Datarius Technologies Gmbh ++00:0C:7B Alpha Project Co.,Ltd. ++00:0C:7C Internet Information Image Inc. ++00:0C:7D Teikoku Electric Mfg. Co., Ltd ++00:0C:7E Tellium Incorporated ++00:0C:7F Synertronixx Gmbh ++00:0C:80 Opelcomm Inc. ++00:0C:81 Nulec Industries Pty Ltd ++00:0C:82 Network Technologies Inc ++00:0C:83 Logical Solutions ++00:0C:84 Eazix, Inc. ++00:0C:85 Cisco Systems ++00:0C:86 Cisco Systems ++00:0C:87 Ati ++00:0C:88 Apache Micro Peripherals, Inc. ++00:0C:89 Ac Electric Vehicles, Ltd. ++00:0C:8A Bose Corporation ++00:0C:8B Connect Tech Inc ++00:0C:8C Kodicom Co.,Ltd. ++00:0C:8D Matrix Vision Gmbh ++00:0C:8E Mentor Engineering Inc ++00:0C:8F Nergal S.R.L. ++00:0C:90 Octasic Inc. ++00:0C:91 Riverhead Networks Inc. ++00:0C:92 Wolfvision Gmbh ++00:0C:93 Xeline Co., Ltd. ++00:0C:94 United Electronic Industries, Inc. ++00:0C:95 Primenet ++00:0C:96 Oqo, Inc. ++00:0C:97 Nv Adb Ttv Technologies Sa ++00:0C:98 Letek Communications Inc. ++00:0C:99 Hitel Link Co.,Ltd ++00:0C:9A Hitech Electronics Corp. ++00:0C:9B Ee Solutions, Inc ++00:0C:9C Chongho Information & Communications ++00:0C:9D Airwalk Communications, Inc. ++00:0C:9E Memorylink Corp. ++00:0C:9F Nke Corporation ++00:0C:A0 Storcase Technology, Inc. ++00:0C:A1 Sigmacom Co., Ltd. ++00:0C:A2 Scopus Network Technologies Ltd ++00:0C:A3 Rancho Technology, Inc. ++00:0C:A4 Prompttec Product Management Gmbh ++00:0C:A5 Naman Nz Ltd ++00:0C:A6 Mintera Corporation ++00:0C:A7 Metro (Suzhou) Technologies Co., Ltd. ++00:0C:A8 Garuda Networks Corporation ++00:0C:A9 Ebtron Inc. ++00:0C:AA Cubic Transportation Systems Inc ++00:0C:AB Commend International ++00:0C:AC Citizen Watch Co., Ltd. ++00:0C:AD Btu International ++00:0C:AE Ailocom Oy ++00:0C:AF Tri Term Co.,Ltd. ++00:0C:B0 Star Semiconductor Corporation ++00:0C:B1 Salland Engineering (Europe) Bv ++00:0C:B2 Safei Co., Ltd. ++00:0C:B3 Round Co.,Ltd. ++00:0C:B4 Propagate Networks, Inc ++00:0C:B5 Premier Technolgies, Inc ++00:0C:B6 Nanjing Seu Mobile & Internet Technology Co.,Ltd ++00:0C:B7 Nanjing Huazhuo Electronics Co., Ltd. ++00:0C:B8 Medion Ag ++00:0C:B9 Lea ++00:0C:BA Jamex ++00:0C:BB Iskraemeco ++00:0C:BC Iscutum ++00:0C:BD Interface Masters, Inc ++00:0C:BE Private ++00:0C:BF Holy Stone Ent. Co., Ltd. ++00:0C:C0 Genera Oy ++00:0C:C1 Cooper Industries Inc. ++00:0C:C2 Private ++00:0C:C3 Bewan Systems ++00:0C:C4 Tiptel Ag ++00:0C:C5 Nextlink Co., Ltd. ++00:0C:C6 Ka-Ro Electronics Gmbh ++00:0C:C7 Intelligent Computer Solutions Inc. ++00:0C:C8 Integrated Digital Systems, Inc. ++00:0C:C9 Ilwoo Data & Technology Co.,Ltd ++00:0C:CA Hitachi Global Storage Technologies ++00:0C:CB Design Combus Ltd ++00:0C:CC Bluesoft Ltd. ++00:0C:CD Iec - Tc57 ++00:0C:CE Cisco Systems ++00:0C:CF Cisco Systems ++00:0C:D0 Symetrix ++00:0C:D1 Sfom Technology Corp. ++00:0C:D2 Schaffner Emv Ag ++00:0C:D3 Prettl Elektronik Radeberg Gmbh ++00:0C:D4 Positron Public Safety Systems Inc. ++00:0C:D5 Passave Inc. ++00:0C:D6 Partner Tech ++00:0C:D7 Nallatech Ltd ++00:0C:D8 M. K. Juchheim Gmbh & Co ++00:0C:D9 Itcare Co., Ltd ++00:0C:DA Freehand Systems, Inc. ++00:0C:DB Foundry Networks ++00:0C:DC Becs Technology, Inc ++00:0C:DD Aos Technologies Ag ++00:0C:DE Abb Stotz-Kontakt Gmbh ++00:0C:DF Pulnix America, Inc ++00:0C:E0 Trek Diagnostics Inc. ++00:0C:E1 The Open Group ++00:0C:E2 Rolls-Royce ++00:0C:E3 Option International N.V. ++00:0C:E4 Neurocom International, Inc. ++00:0C:E5 Motorola Bcs ++00:0C:E6 Meru Networks Inc ++00:0C:E7 Mediatek Inc. ++00:0C:E8 Guangzhou Anjubao Co., Ltd ++00:0C:E9 Bloomberg L.P. ++00:0C:EA Aphona Kommunikationssysteme ++00:0C:EB Cnmp Networks, Inc. ++00:0C:EC Spectracom Corp. ++00:0C:ED Real Digital Media ++00:0C:EE Q-Networks ++00:0C:EF Open Networks Engineering Ltd ++00:0C:F0 M & N Gmbh ++00:0C:F1 Intel Corporation ++00:0C:F2 Gamesa Eólica ++00:0C:F3 Call Image Sa ++00:0C:F4 Akatsuki Electric Mfg.Co.,Ltd. ++00:0C:F5 Infoexpress ++00:0C:F6 Sitecom Europe Bv ++00:0C:F7 Nortel Networks ++00:0C:F8 Nortel Networks ++00:0C:F9 Itt Flygt Ab ++00:0C:FA Digital Systems Corp ++00:0C:FB Korea Network Systems ++00:0C:FC S2Io Technologies Corp ++00:0C:FD Private ++00:0C:FE Grand Electronic Co., Ltd ++00:0C:FF Mro-Tek Limited ++00:0D:00 Seaway Networks Inc. ++00:0D:01 P&E Microcomputer Systems, Inc. ++00:0D:02 Nec Access Technica,Ltd ++00:0D:03 Matrics, Inc. ++00:0D:04 Foxboro Eckardt Development Gmbh ++00:0D:05 Cybernet Manufacturing Inc. ++00:0D:06 Compulogic Limited ++00:0D:07 Calrec Audio Ltd ++00:0D:08 Abovecable, Inc. ++00:0D:09 Yuehua(Zhuhai) Electronic Co. Ltd ++00:0D:0A Projectiondesign As ++00:0D:0B Melco Inc. ++00:0D:0C Mdi Security Systems ++00:0D:0D Itsupported, Llc ++00:0D:0E Inqnet Systems, Inc. ++00:0D:0F Finlux Ltd ++00:0D:10 Embedtronics Oy ++00:0D:11 Dentsply - Gendex ++00:0D:12 Axell Corporation ++00:0D:13 Wilhelm Rutenbeck Gmbh&Co. ++00:0D:14 Vtech Innovation Lp Dba Advanced American Telephones ++00:0D:15 Voipac S.R.O. ++00:0D:16 Uhs Systems Pty Ltd ++00:0D:17 Turbo Networks Co.Ltd ++00:0D:18 Sunitec Enterprise Co., Ltd. ++00:0D:19 Robe Show Lighting ++00:0D:1A Mustek System Inc. ++00:0D:1B Kyoto Electronics Manufacturing Co., Ltd. ++00:0D:1C I2E Telecom ++00:0D:1D High-Tek Harness Ent. Co., Ltd. ++00:0D:1E Control Techniques ++00:0D:1F Av Digital ++00:0D:20 Asahikasei Technosystem Co.,Ltd. ++00:0D:21 Wiscore Inc. ++00:0D:22 Unitronics ++00:0D:23 Smart Solution, Inc ++00:0D:24 Sentec E&E Co., Ltd. ++00:0D:25 Sanden Corporation ++00:0D:26 Primagraphics Limited ++00:0D:27 Microplex Printware Ag ++00:0D:28 Cisco ++00:0D:29 Cisco ++00:0D:2A Scanmatic As ++00:0D:2B Racal Instruments ++00:0D:2C Patapsco Designs Ltd ++00:0D:2D Nct Deutschland Gmbh ++00:0D:2E Matsushita Avionics Systems Corporation ++00:0D:2F Ain Comm.Tech.Co., Ltd ++00:0D:30 Icefyre Semiconductor ++00:0D:31 Compellent Technologies, Inc. ++00:0D:32 Dispensesource, Inc. ++00:0D:33 Prediwave Corp. ++00:0D:34 Shell International Exploration And Production, Inc. ++00:0D:35 Pac International Ltd ++00:0D:36 Wu Han Routon Electronic Co., Ltd ++00:0D:37 Wiplug ++00:0D:38 Nissin Inc. ++00:0D:39 Network Electronics ++00:0D:3A Microsoft Corp. ++00:0D:3B Microelectronics Technology Inc. ++00:0D:3C I.Tech Dynamic Ltd ++00:0D:3D Private ++00:0D:3E Aplux Communications Ltd. ++00:0D:3F Vxi Technology ++00:0D:40 Verint Loronix Video Solutions ++00:0D:41 Siemens Ag Icm Mp Uc Rd It Klf1 ++00:0D:42 Newbest Development Limited ++00:0D:43 Drs Tactical Systems Inc. ++00:0D:44 Private ++00:0D:45 Tottori Sanyo Electric Co., Ltd. ++00:0D:46 Eurotherm Drives, Ltd. ++00:0D:47 Collex ++00:0D:48 Aewin Technologies Co., Ltd. ++00:0D:49 Triton Systems Of Delaware, Inc. ++00:0D:4A Steag Eta-Optik ++00:0D:4B Roku, Llc ++00:0D:4C Outline Electronics Ltd. ++00:0D:4D Ninelanes ++00:0D:4E Ndr Co.,Ltd. ++00:0D:4F Kenwood Corporation ++00:0D:50 Galazar Networks ++00:0D:51 Divr Systems, Inc. ++00:0D:52 Comart System ++00:0D:53 Beijing 5W Communication Corp. ++00:0D:54 3Com Europe Ltd ++00:0D:55 Sanycom Technology Co.,Ltd ++00:0D:56 Dell Pcba Test ++00:0D:57 Fujitsu I-Network Systems Limited. ++00:0D:58 Private ++00:0D:59 Amity Systems, Inc. ++00:0D:5A Tiesse Spa ++00:0D:5B Smart Empire Investments Limited ++00:0D:5C Robert Bosch Gmbh, Vt-Atmo ++00:0D:5D Raritan Computer, Inc ++00:0D:5E Nec Customtechnica, Ltd. ++00:0D:5F Minds Inc ++00:0D:60 Ibm Corporation ++00:0D:61 Giga-Byte Technology Co., Ltd. ++00:0D:62 Funkwerk Dabendorf Gmbh ++00:0D:63 Dent Instruments, Inc. ++00:0D:64 Comag Handels Ag ++00:0D:65 Cisco Systems ++00:0D:66 Cisco Systems ++00:0D:67 Belair Networks Inc. ++00:0D:68 Vinci Systems, Inc. ++00:0D:69 Tmt&D Corporation ++00:0D:6A Redwood Technologies Ltd ++00:0D:6B Mita-Teknik A/S ++00:0D:6C M-Audio ++00:0D:6D K-Tech Devices Corp. ++00:0D:6E K-Patents Oy ++00:0D:6F Ember Corporation ++00:0D:70 Datamax Corporation ++00:0D:71 Boca Systems ++00:0D:72 2Wire, Inc ++00:0D:73 Technical Support, Inc. ++00:0D:74 Sand Network Systems, Inc. ++00:0D:75 Kobian Pte Ltd - Taiwan Branch ++00:0D:76 Hokuto Denshi Co,. Ltd. ++00:0D:77 Falconstor Software ++00:0D:78 Engineering & Security ++00:0D:79 Dynamic Solutions Co,.Ltd. ++00:0D:7A Digatto Asia Pacific Pte Ltd ++00:0D:7B Consensys Computers Inc. ++00:0D:7C Codian Ltd ++00:0D:7D Afco Systems ++00:0D:7E Axiowave Networks, Inc. ++00:0D:7F Midas Communication Technologies Pte Ltd ( Foreign Branch) ++00:0D:80 Online Development Inc ++00:0D:81 Pepperl+Fuchs Gmbh ++00:0D:82 Phs Srl ++00:0D:83 Sanmina-Sci Hungary Ltd. ++00:0D:84 Seodu Inchip, Inc. ++00:0D:85 Tapwave, Inc. ++00:0D:86 Huber + Suhner Ag ++00:0D:87 Elitegroup Computer System Co. (Ecs) ++00:0D:88 D-Link Corporation ++00:0D:89 Bils Technology Inc ++00:0D:8A Winners Electronics Co., Ltd. ++00:0D:8B T&D Corporation ++00:0D:8C Shanghai Wedone Digital Ltd. Co. ++00:0D:8D Prolinx Communication Gateways, Inc. ++00:0D:8E Koden Electronics Co., Ltd. ++00:0D:8F King Tsushin Kogyo Co., Ltd. ++00:0D:90 Factum Electronics Ab ++00:0D:91 Eclipse (Hq Espana) S.L. ++00:0D:92 Arima Communication Corporation ++00:0D:93 Apple Computer ++00:0D:94 Afar Communications,Inc ++00:0D:95 Opti-Cell, Inc. ++00:0D:96 Vtera Technology Inc. ++00:0D:97 Tropos Networks, Inc. ++00:0D:98 S.W.A.C. Schmitt-Walter Automation Consult Gmbh ++00:0D:99 Orbital Sciences Corp.; Launch Systems Group ++00:0D:9A Infotec Ltd ++00:0D:9B Private ++00:0D:9C Elan Gmbh & Co Kg ++00:0D:9D Hewlett Packard ++00:0D:9E Tokuden Ohizumi Seisakusyo Co.,Ltd. ++00:0D:9F Rf Micro Devices ++00:0D:A0 Nedap N.V. ++00:0D:A1 Mirae Its Co.,Ltd. ++00:0D:A2 Infrant Technologies, Inc. ++00:0D:A3 Emerging Technologies Limited ++00:0D:A4 Dosch & Amand Systems Ag ++00:0D:A5 Fabric7 Systems, Inc ++00:0D:A6 Universal Switching Corporation ++00:0D:A7 Private ++00:0D:A8 Teletronics Technology Corporation ++00:0D:A9 T.E.A.M. S.L. ++00:0D:AA S.A.Tehnology Co.,Ltd. ++00:0D:AB Parker Hannifin Gmbh Electromechanical Division Europe ++00:0D:AC Japan Cbm Corporation ++00:0D:AD Dataprobe Inc ++00:0D:AE Samsung Heavy Industries Co., Ltd. ++00:0D:AF Plexus Corp (Uk) Ltd ++00:0D:B0 Olym-Tech Co.,Ltd. ++00:0D:B1 Japan Network Service Co., Ltd. ++00:0D:B2 Ammasso, Inc. ++00:0D:B3 Sdo Communication Corperation ++00:0D:B4 Netasq ++00:0D:B5 Globalsat Technology Corporation ++00:0D:B6 Teknovus, Inc. ++00:0D:B7 Sanko Electric Co,.Ltd ++00:0D:B8 Schiller Ag ++00:0D:B9 Pc Engines Gmbh ++00:0D:BA Océ Document Technologies Gmbh ++00:0D:BB Nippon Dentsu Co.,Ltd. ++00:0D:BC Cisco Systems ++00:0D:BD Cisco Systems ++00:0D:BE Bel Fuse Europe Ltd.,Uk ++00:0D:BF Tektone Sound & Signal Mfg., Inc. ++00:0D:C0 Spagat As ++00:0D:C1 Safeweb Inc ++00:0D:C2 Private ++00:0D:C3 First Communication, Inc. ++00:0D:C4 Emcore Corporation ++00:0D:C5 Echostar International Corporation ++00:0D:C6 Digirose Technology Co., Ltd. ++00:0D:C7 Cosmic Engineering Inc. ++00:0D:C8 Airmagnet, Inc ++00:0D:C9 Thales Elektronik Systeme Gmbh ++00:0D:CA Tait Electronics ++00:0D:CB Petcomkorea Co., Ltd. ++00:0D:CC Neosmart Corp. ++00:0D:CD Groupe Txcom ++00:0D:CE Dynavac Technology Pte Ltd ++00:0D:CF Cidra Corp. ++00:0D:D0 Tetratec Instruments Gmbh ++00:0D:D1 Stryker Corporation ++00:0D:D2 Simrad Optronics Asa ++00:0D:D3 Samwoo Telecommunication Co.,Ltd. ++00:0D:D4 Revivio Inc. ++00:0D:D5 O'rite Technology Co.,Ltd ++00:0D:D6 Iti Ltd ++00:0D:D7 Bright ++00:0D:D8 Bbn ++00:0D:D9 Anton Paar Gmbh ++00:0D:DA Allied Telesis K.K. ++00:0D:DB Airwave Technologies Inc. ++00:0D:DC Vac ++00:0D:DD Profýlo Telra Elektronýk Sanayý Ve Týcaret A.Þ. ++00:0D:DE Joyteck Co., Ltd. ++00:0D:DF Japan Image & Network Inc. ++00:0D:E0 Icpdas Co.,Ltd ++00:0D:E1 Control Products, Inc. ++00:0D:E2 Cmz Sistemi Elettronici ++00:0D:E3 At Sweden Ab ++00:0D:E4 Diginics, Inc. ++00:0D:E5 Samsung Thales ++00:0D:E6 Youngbo Engineering Co.,Ltd ++00:0D:E7 Snap-On Oem Group ++00:0D:E8 Nasaco Electronics Pte. Ltd ++00:0D:E9 Napatech Aps ++00:0D:EA Kingtel Telecommunication Corp. ++00:0D:EB Compxs Limited ++00:0D:EC Cisco Systems ++00:0D:ED Cisco Systems ++00:0D:EE Private ++00:0D:EF Soc. Coop. Bilanciai ++00:0D:F0 Qcom Technology Inc. ++00:0D:F1 Ionix Inc. ++00:0D:F2 Private ++00:0D:F3 Asmax Solutions ++00:0D:F4 Watertek Co. ++00:0D:F5 Teletronics International Inc. ++00:0D:F6 Technology Thesaurus Corp. ++00:0D:F7 Space Dynamics Lab ++00:0D:F8 Orga Kartensysteme Gmbh ++00:0D:F9 Nds Limited ++00:0D:FA Micro Control Systems Ltd. ++00:0D:FB Komax Ag ++00:0D:FC Itfor Inc. Resarch And Development ++00:0D:FD Huges Hi-Tech Inc., ++00:0D:FE Hauppauge Computer Works, Inc. ++00:0D:FF Chenming Mold Industry Corp. ++00:0E:00 Private ++00:0E:01 Asip Technologies Inc. ++00:0E:02 Advantech Amt Inc. ++00:0E:03 Aarohi Communications, Inc. ++00:0E:04 Private ++00:0E:05 Wireless Matrix Corp. ++00:0E:06 Team Simoco Ltd ++00:0E:07 Sony Ericsson Mobile Communications Ab ++00:0E:08 Sipura Technology, Inc. ++00:0E:09 Shenzhen Coship Software Co.,Ltd. ++00:0E:0A Private ++00:0E:0B Netac Technology Co., Ltd. ++00:0E:0C Intel Corporation ++00:0E:0D Hesch Schröder Gmbh ++00:0E:0E Esa Elettronica S.P.A. ++00:0E:0F Ermme ++00:0E:10 Private ++00:0E:11 Bdt Büro- Und Datentechnik Gmbh & Co. Kg ++00:0E:12 Adaptive Micro Systems Inc. ++00:0E:13 Accu-Sort Systems Inc. ++00:0E:14 Visionary Solutions, Inc. ++00:0E:15 Tadlys Ltd ++00:0E:16 Southwing ++00:0E:17 Private ++00:0E:18 Mya Technology ++00:0E:19 Logicacmg Pty Ltd ++00:0E:1A Private ++00:0E:1B Iav Gmbh ++00:0E:1C Hach Company ++00:0E:1D Private ++00:0E:1E Private ++00:0E:1F Tcl Networks Equipment Co., Ltd. ++00:0E:20 Palmsource, Inc. ++00:0E:21 Mtu Friedrichshafen Gmbh ++00:0E:22 Private ++00:0E:23 Incipient, Inc. ++00:0E:24 Private ++00:0E:25 Hannae Technology Co., Ltd ++00:0E:26 Gincom Technology Corp. ++00:0E:27 Crere Networks, Inc. ++00:0E:28 Dynamic Ratings P/L ++00:0E:29 Shester Communications Inc ++00:0E:2A Private ++00:0E:2B Safari Technologies ++00:0E:2C Netcodec Co. ++00:0E:2D Hyundai Digital Technology Co.,Ltd. ++00:0E:2E Edimax Technology Co., Ltd. ++00:0E:2F Disetronic Medical Systems Ag ++00:0E:30 Aeras Networks, Inc. ++00:0E:31 Olympus Biosystems Gmbh ++00:0E:32 Kontron Medical ++00:0E:33 Shuko Electronics Co.,Ltd ++00:0E:34 Nexgen City, Lp ++00:0E:35 Intel Corp ++00:0E:36 Heinesys, Inc. ++00:0E:37 Harms & Wende Gmbh & Co.Kg ++00:0E:38 Cisco Systems ++00:0E:39 Cisco Systems ++00:0E:3A Cirrus Logic ++00:0E:3B Hawking Technologies, Inc. ++00:0E:3C Transact Technoloiges Inc. ++00:0E:3D Televic N.V. ++00:0E:3E Sun Optronics Inc ++00:0E:3F Soronti, Inc. ++00:0E:40 Nortel Networks ++00:0E:41 Nihon Mechatronics Co.,Ltd. ++00:0E:42 Motic Incoporation Ltd. ++00:0E:43 G-Tek Electronics Sdn. Bhd. ++00:0E:44 Digital 5, Inc. ++00:0E:45 Beijing Newtry Electronic Technology Ltd ++00:0E:46 Niigata Seimitsu Co.,Ltd. ++00:0E:47 Nci System Co.,Ltd. ++00:0E:48 Lipman Transaction Solutions ++00:0E:49 Forsway Scandinavia Ab ++00:0E:4A Changchun Huayu Webpad Co.,Ltd ++00:0E:4B Atrium C And I ++00:0E:4C Bermai Inc. ++00:0E:4D Numesa Inc. ++00:0E:4E Waveplus Technology Co., Ltd. ++00:0E:4F Trajet Gmbh ++00:0E:50 Thomson Multi Media ++00:0E:51 Tecna Elettronica Srl ++00:0E:52 Optium Corporation ++00:0E:53 Av Tech Corporation ++00:0E:54 Alphacell Wireless Ltd. ++00:0E:55 Auvitran ++00:0E:56 4G Systems Gmbh ++00:0E:57 Iworld Networking, Inc. ++00:0E:58 Rincon Networks ++00:0E:59 Private ++00:0E:5A Telefield Inc. ++00:0E:5B Parkervision - Direct2Data ++00:0E:5C Motorola Bcs ++00:0E:5D Com-X Networks ++00:0E:5E Beijing Raisecom Science & Technology Development Co.,Ltd ++00:0E:5F Activ-Net Gmbh & Co. Kg ++00:0E:60 360Sun Digital Broadband Corporation ++00:0E:61 Microtrol Limited ++00:0E:62 Nortel Networks ++00:0E:63 Lemke Diagnostics Gmbh ++00:0E:64 Elphel, Inc ++00:0E:65 Transcore ++00:0E:66 Hitachi Advanced Digital, Inc. ++00:0E:67 Eltis Microelectronics Ltd. ++00:0E:68 E-Top Network Technology Inc. ++00:0E:69 China Electric Power Research Institute ++00:0E:6A 3Com Europe Ltd ++00:0E:6B Janitza Electronics Gmbh ++00:0E:6C Device Drivers Limited ++00:0E:6D Murata Manufacturing Co., Ltd. ++00:0E:6E Micrelec Electronics S.A ++00:0E:6F Iris Corporation Berhad ++00:0E:70 In2 Networks ++00:0E:71 Gemstar Technology Development Ltd. ++00:0E:72 Cts Electronics ++00:0E:73 Tpack A/S ++00:0E:74 Solar Telecom. Tech ++00:0E:75 New York Air Brake Corp. ++00:0E:76 Gemsoc Innovision Inc. ++00:0E:77 Decru, Inc. ++00:0E:78 Amtelco ++00:0E:79 Ample Communications Inc. ++00:0E:7A Private ++00:0E:7B Toshiba ++00:0E:7C Private ++00:0E:7D Electronics Line 3000 Ltd. ++00:0E:7E Comprog Oy ++00:0E:7F Hewlett Packard ++00:0E:80 Private ++00:0E:81 Instant802 Networks Inc. ++00:0E:82 Commtech Wireless ++00:0E:83 Cisco Systems ++00:0E:84 Cisco Systems ++00:0E:85 Catalyst Enterprises, Inc. ++00:0E:86 Alcatel North America ++00:0E:87 Adp Gauselmann Gmbh ++00:0E:88 Videotron Corp. ++00:0E:89 Clematic ++00:0E:8A Avara Technologies Pty. Ltd. ++00:0E:8B Astarte Technology Co, Ltd. ++00:0E:8C Siemens Ag A&D Et ++00:0E:8D Systems In Progress Holding Gmbh ++00:0E:8E Sparklan Communications, Inc. ++00:0E:8F Sercomm Corp. ++00:0E:90 Ponico Corp. ++00:0E:91 Private ++00:0E:92 Millinet Co., Ltd. ++00:0E:93 Milénio 3 Sistemas Electrónicos, Lda. ++00:0E:94 Maas International Bv ++00:0E:95 Fujiya Denki Seisakusho Co.,Ltd. ++00:0E:96 Cubic Defense Applications, Inc. ++00:0E:97 Ultracker Technology Co., Inc ++00:0E:98 Vitec Cc, Inc. ++00:0E:99 Spectrum Digital, Inc ++00:0E:9A Boe Technology Group Co.,Ltd ++00:0E:9B Private ++00:0E:9C Pemstar ++00:0E:9D Video Networks Ltd ++00:0E:9E Topfield Co., Ltd ++00:0E:9F Temic Sds Gmbh ++00:0E:A0 Netklass Technology Inc. ++00:0E:A1 Formosa Teletek Corporation ++00:0E:A2 Cyberguard Corporation ++00:0E:A3 Cncr-It Co.,Ltd,Hangzhou P.R.China ++00:0E:A4 Certance Inc. ++00:0E:A5 Blip Systems ++00:0E:A6 Asustek Computer Inc. ++00:0E:A7 Endace Inc Ltd. ++00:0E:A8 United Technologists Europe Limited ++00:0E:A9 Shanghai Xun Shi Communications Equipment Ltd. Co. ++00:0E:AA Private ++00:0E:AB Private ++00:0E:AC Mintron Enterprise Co., Ltd. ++00:0E:AD Metanoia Technologies, Inc. ++00:0E:AE Gawell Technologies Corp. ++00:0E:AF Castel ++00:0E:B0 Solutions Radio Bv ++00:0E:B1 Newcotech,Ltd ++00:0E:B2 Micro-Research Finland Oy ++00:0E:B3 Lefthand Networks ++00:0E:B4 Guangzhou Gaoke Communications Technology Co.Ltd. ++00:0E:B5 Ecastle Electronics Co., Ltd. ++00:0E:B6 Riverbed Technology, Inc. ++00:0E:B7 Knovative, Inc. ++00:0E:B8 Iiga Co.,Ltd ++00:0E:B9 Hashimoto Electronics Industry Co.,Ltd. ++00:0E:BA Hanmi Semiconductor Co., Ltd. ++00:0E:BB Everbee Networks ++00:0E:BC Cullmann Gmbh ++00:0E:BD Burdick, A Quinton Compny ++00:0E:BE B&B Electronics Manufacturing Co. ++00:0E:BF Private ++00:0E:C0 Nortel Networks ++00:0E:C1 Mynah Technologies ++00:0E:C2 Lowrance Electronics, Inc. ++00:0E:C3 Logic Controls, Inc. ++00:0E:C4 Iskra Transmission D.D. ++00:0E:C5 Private ++00:0E:C6 Asix Electronics Corp. ++00:0E:C7 Appeal Telecom Co.,Ltd. ++00:0E:C8 Zoran Corporation ++00:0E:C9 Yoko Technology Corp. ++00:0E:CA Private ++00:0E:CB Vinesys Technology ++00:0E:CC Tableau ++00:0E:CD Skov A/S ++00:0E:CE S.I.T.T.I. S.P.A. ++00:0E:CF Profibus Nutzerorganisation E.V. ++00:0E:D0 Privaris, Inc. ++00:0E:D1 Osaka Micro Computer. ++00:0E:D2 Filtronic Plc ++00:0E:D3 Epicenter, Inc. ++00:0E:D4 Cresitt Industrie ++00:0E:D5 Copan Systems Inc. ++00:0E:D6 Cisco Systems ++00:0E:D7 Cisco Systems ++00:0E:D8 Aktino, Inc. ++00:0E:D9 Aksys, Ltd. ++00:0E:DA C-Tech United Corp. ++00:0E:DB Xincom Corp. ++00:0E:DC Tellion Inc. ++00:0E:DD Shure Incorporated ++00:0E:DE Remec, Inc. ++00:0E:DF Plx Technology ++00:0E:E0 Mcharge ++00:0E:E1 Extremespeed Inc. ++00:0E:E2 Custom Engineering S.P.A. ++00:0E:E3 Chiyu Technology Co.,Ltd ++00:0E:E4 Private ++00:0E:E5 Bitwallet, Inc. ++00:0E:E6 Adimos Systems Ltd ++00:0E:E7 Aac Electronics Corp. ++00:0E:E8 Zioncom ++00:0E:E9 Waytech Development, Inc. ++00:0E:EA Shadong Luneng Jicheng Electronics,Co.,Ltd ++00:0E:EB Sandmartin(Zhong Shan)Electronics Co.,Ltd ++00:0E:EC Orban ++00:0E:ED Nokia Danmark A/S ++00:0E:EE Muco Industrie Bv ++00:0E:EF Private ++00:0E:F0 Festo Ag & Co. Kg ++00:0E:F1 Ezquest Inc. ++00:0E:F2 World Axle Corporation ++00:0E:F3 Smarthome ++00:0E:F4 Shenzhen Kasda Digital Technology Co.,Ltd ++00:0E:F5 Ipac Technology Co., Ltd. ++00:0E:F6 E-Ten Information Systems Co., Ltd. ++00:0E:F7 Vulcan Portals Inc ++00:0E:F8 Sbc Asi ++00:0E:F9 Rea Elektronik Gmbh ++00:0E:FA Optoway Technology Incorporation ++00:0E:FB Macey Enterprises ++00:0E:FC Jtag Technologies B.V. ++00:0E:FD Fuji Photo Optical Co., Ltd. ++00:0E:FE Endrun Technologies Llc ++00:0E:FF Megasolution,Inc. ++00:0F:00 Legra Systems, Inc. ++00:0F:01 Digitalks Inc ++00:0F:02 Digicube Technology Co., Ltd ++00:0F:03 Com&C Co., Ltd ++00:0F:04 Cim-Usa Inc ++00:0F:05 3B System Inc. ++00:0F:06 Nortel Networks ++00:0F:07 Mangrove Systems, Inc. ++00:0F:08 Indagon Oy ++00:0F:09 Private ++00:0F:0A Private ++00:0F:0B Kentima Technologies Ab ++00:0F:0C Synchronic Engineering ++00:0F:0D Hunt Electronic Co., Ltd. ++00:0F:0E Wavesplitter Technologies, Inc. ++00:0F:0F Real Id Technology Co., Ltd. ++00:0F:10 Rdm Corporation ++00:0F:11 Prodrive B.V. ++00:0F:12 Panasonic Avc Networks Germany Gmbh ++00:0F:13 Nisca Corporation ++00:0F:14 Mindray Co., Ltd. ++00:0F:15 Kjaerulff1 A/S ++00:0F:16 Jay How Technology Co., ++00:0F:17 Insta Elektro Gmbh ++00:0F:18 Industrial Control Systems ++00:0F:19 Guidant Corporation ++00:0F:1A Gaming Support B.V. ++00:0F:1B Ego Systems Inc. ++00:0F:1C Digitall World Co., Ltd ++00:0F:1D Cosmo Techs Co., Ltd. ++00:0F:1E Chengdu Kt Electric Co.Of High & New Technology ++00:0F:1F Ww Pcba Test ++00:0F:20 Hewlett Packard ++00:0F:21 Scientific Atlanta, Inc ++00:0F:22 Helius, Inc. ++00:0F:23 Cisco Systems ++00:0F:24 Cisco Systems ++00:0F:25 Aimvalley B.V. ++00:0F:26 Worldaccxx Llc ++00:0F:27 Teal Electronics, Inc. ++00:0F:28 Itronix Corporation ++00:0F:29 Augmentix Corporation ++00:0F:2A Cableware Electronics ++00:0F:2B Greenbell Systems ++00:0F:2C Uplogix, Inc. ++00:0F:2D Chung-Hsin Electric & Machinery Mfg.Corp. ++00:0F:2E Megapower International Corp. ++00:0F:2F W-Linx Technology Co., Ltd. ++00:0F:30 Raza Microelectronics Inc ++00:0F:31 Prosilica ++00:0F:32 Lutong Electronic Technology Co.,Ltd ++00:0F:33 Duali Inc. ++00:0F:34 Cisco Systems ++00:0F:35 Cisco Systems ++00:0F:36 Accurate Techhnologies, Inc. ++00:0F:37 Xambala Incorporated ++00:0F:38 Netstar ++00:0F:39 Iris Sensors ++00:0F:3A Hisharp ++00:0F:3B Fuji System Machines Co., Ltd. ++00:0F:3C Endeleo Limited ++00:0F:3D D-Link Corporation ++00:0F:3E Cardionet, Inc ++00:0F:3F Big Bear Networks ++00:0F:40 Optical Internetworking Forum ++00:0F:41 Zipher Ltd ++00:0F:42 Xalyo Systems ++00:0F:43 Wasabi Systems Inc. ++00:0F:44 Tivella Inc. ++00:0F:45 Stretch, Inc. ++00:0F:46 Sinar Ag ++00:0F:47 Robox Spa ++00:0F:48 Polypix Inc. ++00:0F:49 Northover Solutions Limited ++00:0F:4A Kyushu-Kyohan Co.,Ltd ++00:0F:4B Katana Technology ++00:0F:4C Elextech Inc ++00:0F:4D Centrepoint Technologies Inc. ++00:0F:4E Cellink ++00:0F:4F Cadmus Technology Ltd ++00:0F:50 Braddahead Limited ++00:0F:51 Private ++00:0F:52 York Refrigeration, Marine & Controls ++00:0F:53 Level 5 Networks, Inc. ++00:0F:54 Entrelogic Corporation ++00:0F:55 Datawire Communication Networks Inc. ++00:0F:56 Continuum Photonics Inc ++00:0F:57 Cablelogic Co., Ltd. ++00:0F:58 Adder Technology Limited ++00:0F:59 Phonak Communications Ag ++00:0F:5A Peribit Networks ++00:0F:5B Delta Information Systems, Inc. ++00:0F:5C Day One Digital Media Limited ++00:0F:5D 42Networks Ab ++00:0F:5E Veo ++00:0F:5F Nicety Technologies Inc. (Nts) ++00:0F:60 Lifetron Co.,Ltd ++00:0F:61 Kiwi Networks ++00:0F:62 Alcatel Bell Space N.V. ++00:0F:63 Obzerv Technologies ++00:0F:64 D&R Electronica Weesp Bv ++00:0F:65 Icube Corp. ++00:0F:66 Cisco-Linksys ++00:0F:67 West Instruments ++00:0F:68 Vavic Network Technology, Inc. ++00:0F:69 Sew Eurodrive Gmbh & Co. Kg ++00:0F:6A Nortel Networks ++00:0F:6B Gateware Communications Gmbh ++00:0F:6C Addi-Data Gmbh ++00:0F:6D Midas Engineering ++00:0F:6E Bbox ++00:0F:6F Fta Communication Technologies ++00:0F:70 Wintec Industries, Inc. ++00:0F:71 Sanmei Electronics Co.,Ltd ++00:0F:72 Sandburst ++00:0F:73 Rockwell Samsung Automation ++00:0F:74 Qamcom Technology Ab ++00:0F:75 First Silicon Solutions ++00:0F:76 Digital Keystone, Inc. ++00:0F:77 Dentum Co.,Ltd ++00:0F:78 Datacap Systems Inc ++00:0F:79 Bluetooth Interest Group Inc. ++00:0F:7A Beijing Nuqx Technology Co.,Ltd ++00:0F:7B Arce Sistemas, S.A. ++00:0F:7C Acti Corporation ++00:0F:7D Xirrus ++00:0F:7E Uis Abler Electronics Co.,Ltd. ++00:0F:7F Ubstorage Co.,Ltd. ++00:0F:80 Trinity Security Systems,Inc. ++00:0F:81 Secure Info Imaging ++00:0F:82 Mortara Instrument, Inc. ++00:0F:83 Brainium Technologies Inc. ++00:0F:84 Astute Networks, Inc. ++00:0F:85 Addo-Japan Corporation ++00:0F:86 Private ++00:0F:87 Maxcess International ++00:0F:88 Ametek, Inc. ++00:0F:89 Winnertec System Co., Ltd. ++00:0F:8A Wideview ++00:0F:8B Orion Multisystems Inc ++00:0F:8C Gigawavetech Pte Ltd ++00:0F:8D Fast Tv-Server Ag ++00:0F:8E Dongyang Telecom Co.,Ltd. ++00:0F:8F Cisco Systems ++00:0F:90 Cisco Systems ++00:0F:91 Aerotelecom Co.,Ltd. ++00:0F:92 Microhard Systems Inc. ++00:0F:93 Landis+Gyr Ltd. ++00:0F:94 Genexis ++00:0F:95 Elecom Co.,Ltd Laneed Division ++00:0F:96 Critical Telecom Corp. ++00:0F:97 Avanex Corporation ++00:0F:98 Avamax Co. Ltd. ++00:0F:99 Apac Opto Electronics Inc. ++00:0F:9A Synchrony, Inc. ++00:0F:9B Ross Video Limited ++00:0F:9C Panduit Corp ++00:0F:9D Newnham Research Ltd ++00:0F:9E Murrelektronik Gmbh ++00:0F:9F Motorola Bcs ++00:0F:A0 Lotte Canon Co., Ltd. ++00:0F:A1 Gigabit Systems Inc. ++00:0F:A2 Digital Path Networks ++00:0F:A3 Alpha Networks Inc. ++00:0F:A4 Sprecher Automation Gmbh ++00:0F:A5 Smp / Bwa Technology Gmbh ++00:0F:A6 S2 Security Corporation ++00:0F:A7 Raptor Networks Technology ++00:0F:A8 Photometrics, Inc. ++00:0F:A9 Pc Fabrik ++00:0F:AA Nexus Technologies ++00:0F:AB Kyushu Electronics Systems Inc. ++00:0F:AC Ieee 802.11 ++00:0F:AD Fmn Communications Gmbh ++00:0F:AE E2O Communications ++00:0F:AF Dialog Inc. ++00:0F:B0 Compal Electronics,Inc. ++00:0F:B1 Cognio Inc. ++00:0F:B2 Broadband Pacenet (India) Pvt. Ltd. ++00:0F:B3 Actiontec Electronics, Inc ++00:0F:B4 Timespace Technology ++00:0F:B5 Netgear Inc ++00:0F:B6 Europlex Technologies ++00:0F:B7 Cavium Networks ++00:0F:B8 Callurl Inc. ++00:0F:B9 Adaptive Instruments ++00:0F:BA Tevebox Ab ++00:0F:BB Siemens Ag, Icn M&L Tdc Ep ++00:0F:BC Onkey Technologies, Inc. ++00:0F:BD Mrv Communications (Networks) Ltd ++00:0F:BE E-W/You Inc. ++00:0F:BF Dgt Sp. Z O.O. ++00:0F:C0 Delcomp ++00:0F:C1 Wave Corporation ++00:0F:C2 Uniwell Corporation ++00:0F:C3 Palmpalm Technology, Inc. ++00:0F:C4 Nst Co.,Ltd. ++00:0F:C5 Keymed Ltd ++00:0F:C6 Eurocom Industries A/S ++00:0F:C7 Dionica R&D Ltd. ++00:0F:C8 Chantry Networks ++00:0F:C9 Allnet Gmbh ++00:0F:CA A-Jin Techline Co, Ltd ++00:0F:CB 3Com Europe Ltd ++00:0F:CC Netopia, Inc. ++00:0F:CD Nortel Networks ++00:0F:CE Kikusui Electronics Corp. ++00:0F:CF Datawind Research ++00:0F:D0 Astri ++00:0F:D1 Applied Wireless Identifications Group, Inc. ++00:0F:D2 Ewa Technologies, Inc. ++00:0F:D3 Digium ++00:0F:D4 Soundcraft ++00:0F:D5 Schwechat - Rise ++00:0F:D6 Sarotech Co., Ltd ++00:0F:D7 Harman Music Group ++00:0F:D8 Force, Inc. ++00:0F:D9 Flexdsl Telecommunications Ag ++00:0F:DA Yazaki Corporation ++00:0F:DB Westell Technologies ++00:0F:DC Ueda Japan Radio Co., Ltd. ++00:0F:DD Sordin Ab ++00:0F:DE Sony Ericsson Mobile Communications Ab ++00:0F:DF Solomon Technology Corp. ++00:0F:E0 Ncomputing Co.,Ltd. ++00:0F:E1 Id Digital Corporation ++00:0F:E2 Hangzhou Huawei-3Com Tech. Co., Ltd. ++00:0F:E3 Damm Cellular Systems A/S ++00:0F:E4 Pantech Co.,Ltd ++00:0F:E5 Mercury Security Corporation ++00:0F:E6 Mbtech Systems, Inc. ++00:0F:E7 Lutron Electronics Co., Inc. ++00:0F:E8 Lobos, Inc. ++00:0F:E9 Gw Technologies Co.,Ltd. ++00:0F:EA Giga-Byte Technology Co.,Ltd. ++00:0F:EB Cylon Controls ++00:0F:EC Arkus Inc. ++00:0F:ED Anam Electronics Co., Ltd ++00:0F:EE Xtec, Incorporated ++00:0F:EF Thales E-Transactions Gmbh ++00:0F:F0 Sunray Enterprise ++00:0F:F1 Nex-G Systems Pte.Ltd ++00:0F:F2 Loud Technologies Inc. ++00:0F:F3 Jung Myoung Communications&Technology ++00:0F:F4 Guntermann & Drunck Gmbh ++00:0F:F5 Gn&S Company ++00:0F:F6 Darfon Electronics Corp. ++00:0F:F7 Cisco Systems ++00:0F:F8 Cisco Systems ++00:0F:F9 Valcretec, Inc. ++00:0F:FA Optinel Systems, Inc. ++00:0F:FB Nippon Denso Industry Co., Ltd. ++00:0F:FC Merit Li-Lin Ent. ++00:0F:FD Glorytek Network Inc. ++00:0F:FE G-Pro Computer ++00:0F:FF Control4 ++00:10:00 Cable Television Laboratories, Inc. + 00:10:01 Mck Communications + 00:10:02 Actia + 00:10:03 Imatron, Inc. +-00:10:04 The Brantley Coile Company,inc ++00:10:04 The Brantley Coile Company,Inc + 00:10:05 Uec Commercial + 00:10:06 Thales Contact Solutions Ltd. + 00:10:07 Cisco Systems, Inc. +@@ -3050,11 +4093,11 @@ + 00:10:0F Industrial Cpu Systems + 00:10:10 Initio Corporation + 00:10:11 Cisco Systems, Inc. +-00:10:12 Processor Systems (i) Pvt Ltd ++00:10:12 Processor Systems (I) Pvt Ltd + 00:10:13 Industrial Computer Source + 00:10:14 Cisco Systems, Inc. + 00:10:15 Oomon Inc. +-00:10:16 T.sqware ++00:10:16 T.Sqware + 00:10:17 Micos Gmbh + 00:10:18 Broadcom Corporation + 00:10:19 Sirona Dental Systems Gmbh & Co. Kg +@@ -3076,17 +4119,17 @@ + 00:10:29 Cisco Systems, Inc. + 00:10:2A Zf Microsystems, Inc. + 00:10:2B Umax Data Systems, Inc. +-00:10:2C Lasat Networks A/s ++00:10:2C Lasat Networks A/S + 00:10:2D Hitachi Software Engineering + 00:10:2E Network Systems & Technologies Pvt. Ltd. + 00:10:2F Cisco Systems, Inc. +-00:10:30 Wi-lan, Inc. ++00:10:30 Wi-Lan, Inc. + 00:10:31 Objective Communications, Inc. + 00:10:32 Alta Technology + 00:10:33 Accesslan Communications, Inc. + 00:10:34 Gnp Computers + 00:10:35 Elitegroup Computer Systems Co., Ltd +-00:10:36 Inter-tel Integrated Systems ++00:10:36 Inter-Tel Integrated Systems + 00:10:37 Cyq've Technology Co., Ltd. + 00:10:38 Micro Research Institute, Inc. + 00:10:39 Vectron Systems Ag +@@ -3107,32 +4150,32 @@ + 00:10:48 Htrc Automation, Inc. + 00:10:49 Shoreline Teleworks, Inc. + 00:10:4A The Parvuc Corporation +-00:10:4B 3com Corporation ++00:10:4B 3Com Corporation + 00:10:4C Computer Access Technology + 00:10:4D Surtec Industries, Inc. + 00:10:4E Ceologic + 00:10:4F Storage Technology Corporation + 00:10:50 Rion Co., Ltd. + 00:10:51 Cmicro Corporation +-00:10:52 Mettler-toledo (albstadt) Gmbh ++00:10:52 Mettler-Toledo (Albstadt) Gmbh + 00:10:53 Computer Technology Corp. + 00:10:54 Cisco Systems, Inc. + 00:10:55 Fujitsu Microelectronics, Inc. + 00:10:56 Sodick Co., Ltd. +-00:10:57 Rebel.com, Inc. ++00:10:57 Rebel.Com, Inc. + 00:10:58 Arrowpoint Communications + 00:10:59 Diablo Research Co. Llc +-00:10:5A 3com Corporation ++00:10:5A 3Com Corporation + 00:10:5B Net Insight Ab +-00:10:5C Quantum Designs (h.k.) Ltd. ++00:10:5C Quantum Designs (H.K.) Ltd. + 00:10:5D Draeger Medical + 00:10:5E Hekimian Laboratories, Inc. +-00:10:5F In-snec ++00:10:5F In-Snec + 00:10:60 Billionton Systems, Inc. + 00:10:61 Hostlink Corp. + 00:10:62 Nx Server, Ilnc. + 00:10:63 Starguide Digital Networks +-00:10:64 Digital Equipment Corp. ++00:10:64 Dnpg, Llc + 00:10:65 Radyne Corporation + 00:10:66 Advanced Control Systems, Inc. + 00:10:67 Redback Networks, Inc. +@@ -3156,15 +4199,15 @@ + 00:10:79 Cisco Systems, Inc. + 00:10:7A Ambicom, Inc. + 00:10:7B Cisco Systems, Inc. +-00:10:7C P-com, Inc. ++00:10:7C P-Com, Inc. + 00:10:7D Aurora Communications, Ltd. + 00:10:7E Bachmann Electronic Gmbh + 00:10:7F Crestron Electronics, Inc. + 00:10:80 Metawave Communications + 00:10:81 Dps, Inc. + 00:10:82 Jna Telecommunications Limited +-00:10:83 Hewlett-packard Company +-00:10:84 K-bot Communications ++00:10:83 Hewlett-Packard Company ++00:10:84 K-Bot Communications + 00:10:85 Polaris Communications, Inc. + 00:10:86 Atto Technology, Inc. + 00:10:87 Xstreamis Plc +@@ -3180,15 +4223,15 @@ + 00:10:91 No Wires Needed Bv + 00:10:92 Netcore Inc. + 00:10:93 Cms Computers, Ltd. +-00:10:94 Adtech, Inc. +-00:10:95 Thomson Multimedia, Inc. ++00:10:94 Performance Analysis Broadband, Spirent Plc ++00:10:95 Thompson Inc. + 00:10:96 Tracewell Systems, Inc. + 00:10:97 Winnet Metropolitan Communications Systems, Inc. + 00:10:98 Starnet Technologies, Inc. + 00:10:99 Innomedia, Inc. + 00:10:9A Netline + 00:10:9B Vixel Corporation +-00:10:9C M-system Co., Ltd. ++00:10:9C M-System Co., Ltd. + 00:10:9D Clarinet Systems, Inc. + 00:10:9E Aware, Inc. + 00:10:9F Pavo, Inc. +@@ -3209,7 +4252,7 @@ + 00:10:AE Shinko Electric Industries Co. + 00:10:AF Tac Systems, Inc. + 00:10:B0 Meridian Technology Corp. +-00:10:B1 For-a Co., Ltd. ++00:10:B1 For-A Co., Ltd. + 00:10:B2 Coactive Aesthetics + 00:10:B3 Nokia Multimedia Terminals + 00:10:B4 Atmosphere Networks +@@ -3218,16 +4261,16 @@ + 00:10:B7 Coyote Technologies, Llc + 00:10:B8 Ishigaki Computer System Co. + 00:10:B9 Maxtor Corp. +-00:10:BA Martinho-davis Systems, Inc. ++00:10:BA Martinho-Davis Systems, Inc. + 00:10:BB Data & Information Technology +-00:10:BC Nortel Networks ++00:10:BC Aastra Telecom + 00:10:BD The Telecommunication Technology Committee + 00:10:BE Telexis Corp. + 00:10:BF Interair Wireless + 00:10:C0 Arma, Inc. + 00:10:C1 Oi Electric Co., Ltd. + 00:10:C2 Willnet, Inc. +-00:10:C3 Csi-control Systems ++00:10:C3 Csi-Control Systems + 00:10:C4 Media Links Co., Ltd. + 00:10:C5 Protocol Technologies, Inc. + 00:10:C6 Usi +@@ -3235,7 +4278,7 @@ + 00:10:C8 Communications Electronics Security Group + 00:10:C9 Mitsubishi Electronics Logistic Support Co. + 00:10:CA Integral Access +-00:10:CB Facit K.k. ++00:10:CB Facit K.K. + 00:10:CC Clp Computer Logistik Planung Gmbh + 00:10:CD Interface Concept + 00:10:CE Volamp, Ltd. +@@ -3245,19 +4288,19 @@ + 00:10:D2 Nitto Tsushinki Co., Ltd + 00:10:D3 Grips Electronic Gmbh + 00:10:D4 Storage Computer Corporation +-00:10:D5 Imasde Canarias, S.a. +-00:10:D6 Itt - A/cd ++00:10:D5 Imasde Canarias, S.A. ++00:10:D6 Itt - A/Cd + 00:10:D7 Argosy Research Inc. + 00:10:D8 Calista +-00:10:D9 Ibm Japan, Fujisawa Mt+d ++00:10:D9 Ibm Japan, Fujisawa Mt+D + 00:10:DA Motion Engineering, Inc. + 00:10:DB Netscreen Technologies, Inc. +-00:10:DC Micro-star International Co., Ltd. ++00:10:DC Micro-Star International Co., Ltd. + 00:10:DD Enable Semiconductor, Inc. + 00:10:DE International Datacasting Corporation + 00:10:DF Rise Computer Inc. + 00:10:E0 Cobalt Microserver, Inc. +-00:10:E1 S.i. Tech, Inc. ++00:10:E1 S.I. Tech, Inc. + 00:10:E2 Arraycomm, Inc. + 00:10:E3 Compaq Computer Corporation + 00:10:E4 Nsi Corporation +@@ -3272,7 +4315,7 @@ + 00:10:ED Sundance Technology, Inc. + 00:10:EE Cti Products, Inc. + 00:10:EF Dbtel Incorporated +-00:10:F1 I-o Corporation ++00:10:F1 I-O Corporation + 00:10:F2 Antec + 00:10:F3 Nexcom International Co., Ltd. + 00:10:F4 Vertical Networks, Inc. +@@ -3284,21 +4327,258 @@ + 00:10:FA Zayante, Inc. + 00:10:FB Zida Technologies Limited + 00:10:FC Broadband Networks, Inc. +-00:10:FD Cocom A/s ++00:10:FD Cocom A/S + 00:10:FE Digital Equipment Corporation + 00:10:FF Cisco Systems, Inc. ++00:11:00 Ram Industries, Llc ++00:11:01 Cet Technologies Pte Ltd ++00:11:02 Aurora Multimedia Corp. ++00:11:03 Kawamura Electric Inc. ++00:11:04 Telexy ++00:11:05 Sunplus Technology Co., Ltd. ++00:11:06 Siemens Nv (Belgium) ++00:11:07 Rgb Networks Inc. ++00:11:08 Orbital Data Corporation ++00:11:09 Micro-Star International ++00:11:0A Hewlett Packard ++00:11:0B Franklin Technology Systems ++00:11:0C Atmark Techno, Inc. ++00:11:0D Sanblaze Technology, Inc. ++00:11:0E Tsurusaki Sealand Transportation Co. Ltd. ++00:11:0F Netplat,Inc. ++00:11:10 Maxanna Technology Co., Ltd. ++00:11:11 Intel Corporation ++00:11:12 Honeywell Cmss ++00:11:13 Fraunhofer Fokus ++00:11:14 Everfocus Electronics Corp. ++00:11:15 Epin Technologies, Inc. ++00:11:16 Coteau Vert Co., Ltd. ++00:11:17 Cesnet ++00:11:18 Blx Ic Design Corp., Ltd. ++00:11:19 Solteras, Inc. ++00:11:1A Motorola Bcs ++00:11:1B Targa Systems Div L-3 Communications Canada ++00:11:1C Pleora Technologies Inc. ++00:11:1D Hectrix Limited ++00:11:1E Epsg (Ethernet Powerlink Standardization Group) ++00:11:1F Doremi Labs, Inc. ++00:11:20 Cisco Systems ++00:11:21 Cisco Systems ++00:11:22 Cimsys Inc ++00:11:23 Appointech, Inc. ++00:11:24 Apple Computer ++00:11:25 Ibm Corporation ++00:11:26 Venstar Inc. ++00:11:27 Tasi, Inc ++00:11:28 Streamit ++00:11:29 Paradise Datacom Ltd. ++00:11:2A Niko Nv ++00:11:2B Netmodule ++00:11:2C Izt Gmbh ++00:11:2D Guys Without Ties ++00:11:2E Ceicom ++00:11:2F Asustek Computer Inc. ++00:11:30 Allied Telesis (Hong Kong) Ltd. ++00:11:31 Unatech. Co.,Ltd ++00:11:32 Synology Incorporated ++00:11:33 Siemens Austria Simea ++00:11:34 Mediacell, Inc. ++00:11:35 Grandeye Ltd ++00:11:36 Goodrich Sensor Systems ++00:11:37 Aichi Electric Co., Ltd. ++00:11:38 Taishin Co., Ltd. ++00:11:39 Stoeber Antriebstechnik Gmbh + Co. Kg. ++00:11:3A Shinboram ++00:11:3B Micronet Communications Inc. ++00:11:3C Micronas Gmbh ++00:11:3D Kn Soltec Co.,Ltd. ++00:11:3E Jl Corporation ++00:11:3F Alcatel Di ++00:11:40 Nanometrics Inc. ++00:11:41 Goodman Corporation ++00:11:42 E-Smartcom Inc. ++00:11:43 Dell Inc. (Ww Pcba Test) ++00:11:44 Assurance Technology Corp ++00:11:45 Valuepoint Networks ++00:11:46 Private ++00:11:47 Secom-Industry Co.Ltd. ++00:11:48 Prolon Control Systems ++00:11:49 Proliphix Llc ++00:11:4A Kayaba Industry Co,.Ltd. ++00:11:4B Francotyp-Postalia Ag & Co. Kg ++00:11:4C Caffeina Applied Research Ltd. ++00:11:4D Atsumi Electric Co.,Ltd. ++00:11:4E 690885 Ontario Inc. ++00:11:4F Us Digital Television, Inc ++00:11:50 Belkin Corporation ++00:11:51 Mykotronx ++00:11:52 Eidsvoll Electronics As ++00:11:53 Trident Tek, Inc. ++00:11:54 Webpro Technologies Inc. ++00:11:55 Sevis Systems ++00:11:56 Pharos Systems Nz ++00:11:57 Of Networks Co., Ltd. ++00:11:58 Nortel Networks ++00:11:59 Matisse Networks Inc ++00:11:5A Ivoclar Vivadent Ag ++00:11:5B Elitegroup Computer System Co. (Ecs) ++00:11:5C Cisco ++00:11:5D Cisco ++00:11:5E Prominent Dosiertechnik Gmbh ++00:11:5F Intellix Co., Ltd. ++00:11:60 Artdio Company Co., Ltd ++00:11:61 Netstreams, Llc ++00:11:62 Star Micronics Co.,Ltd. ++00:11:63 System Spa Dept. Electronics ++00:11:64 Acard Technology Corp. ++00:11:65 Znyx Networks ++00:11:66 Taelim Electronics Co., Ltd. ++00:11:67 Integrated System Solution Corp. ++00:11:68 Homelogic Llc ++00:11:69 Ems Satcom ++00:11:6A Domo Ltd ++00:11:6B Digital Data Communications Asia Co.,Ltd ++00:11:6C Nanwang Multimedia Inc.,Ltd ++00:11:6D American Time And Signal ++00:11:6E Peplink Ltd. ++00:11:6F Netforyou Co., Ltd. ++00:11:70 Gsc Srl ++00:11:71 Dexter Communications, Inc. ++00:11:72 Cotron Corporation ++00:11:73 Adtron Corporation ++00:11:74 Wibhu Technologies, Inc. ++00:11:75 Pathscale, Inc. ++00:11:76 Intellambda Systems, Inc. ++00:11:77 Coaxial Networks, Inc. ++00:11:78 Chiron Technology Ltd ++00:11:79 Singular Technology Co. Ltd. ++00:11:7A Singim International Corp. ++00:11:7B Büchi Labortechnik Ag ++00:11:7C E-Zy.Net ++00:11:7D Zmd America, Inc. ++00:11:7E Progeny Inc. ++00:11:7F Neotune Information Technology Corporation,.Ltd ++00:11:80 Motorola Bcs ++00:11:81 Interenergy Co.Ltd, ++00:11:82 Imi Norgren Ltd ++00:11:83 Psc Scanning, Inc ++00:11:84 Humo Laboratory,Ltd. ++00:11:85 Hewlett Packard ++00:11:86 Prime Systems, Inc. ++00:11:87 Category Solutions, Inc ++00:11:88 Enterasys ++00:11:89 Aerotech Inc ++00:11:8A Viewtran Technology Limited ++00:11:8B Netdevices Inc. ++00:11:8C Missouri Department Of Transportation ++00:11:8D Hanchang System Corp. ++00:11:8E Halytech Mace ++00:11:8F Eutech Instruments Pte. Ltd. ++00:11:90 Digital Design Corporation ++00:11:91 Cts-Clima Temperatur Systeme Gmbh ++00:11:92 Cisco Systems ++00:11:93 Cisco Systems ++00:11:94 Chi Mei Communication Systems, Inc. ++00:11:95 Alpha Networks Inc. ++00:11:96 Actuality Systems, Inc. ++00:11:97 Monitoring Technologies Limited ++00:11:98 Prism Media Products Limited ++00:11:99 2Wcom Gmbh ++00:11:9A Alkeria Srl ++00:11:9B Telesynergy Research Inc. ++00:11:9C Ep&T Energy ++00:11:9D Diginfo Technology Corporation ++00:11:9E Solectron Brazil ++00:11:9F Nokia Danmark A/S ++00:11:A0 Vtech Engineering Canada Ltd ++00:11:A1 Vision Netware Co.,Ltd ++00:11:A2 Manufacturing Technology Inc ++00:11:A3 Lanready Technologies Inc. ++00:11:A4 Jstream Technologies Inc. ++00:11:A5 Fortuna Electronic Corp. ++00:11:A6 Sypixx Networks ++00:11:A7 Infilco Degremont Inc. ++00:11:A8 Quest Technologies ++00:11:A9 Moimstone Co., Ltd ++00:11:AA Uniclass Technology, Co., Ltd ++00:11:AB Trustable Technology Co.,Ltd. ++00:11:AC Simtec Electronics ++00:11:AD Shanghai Ruijie Technology ++00:11:AE Motorola Bcs ++00:11:AF Medialink-I,Inc ++00:11:B0 Fortelink Inc. ++00:11:B1 Blueexpert Technology Corp. ++00:11:B2 2001 Technology Inc. ++00:11:B3 Yoshimiya Co.,Ltd. ++00:11:B4 Westermo Teleindustri Ab ++00:11:B5 Shenzhen Powercom Co.,Ltd ++00:11:B6 Open Systems International ++00:11:B7 Melexis Nederland B.V. ++00:11:B8 Liebherr - Elektronik Gmbh ++00:11:B9 Inner Range Pty. Ltd. ++00:11:BA Elexol Pty Ltd ++00:11:BB Cisco Systems ++00:11:BC Cisco Systems ++00:11:BD Bombardier Transportation ++00:11:BE Agp Telecom Co. Ltd ++00:11:BF Aesys S.P.A. ++00:11:C0 Aday Technology Inc ++00:11:C1 4P Mobile Data Processing ++00:11:C2 United Fiber Optic Communication ++00:11:C3 Transceiving System Technology Corporation ++00:11:C4 Terminales De Telecomunicacion Terrestre, S.L. ++00:11:C5 Ten Technology ++00:11:C6 Seagate Technology Llc ++00:11:C7 Raymarine Group Ltd. ++00:11:C8 Powercom Co., Ltd. ++00:11:C9 Mtt Corporation ++00:11:CA Long Range Systems, Inc. ++00:11:CB Jacobsons Rkh Ab ++00:11:CC Guangzhou Jinpeng Group Co.,Ltd. ++00:11:CD Axsun Technologies ++00:11:CE Ubisense Limited ++00:11:CF Thrane & Thrane A/S ++00:11:D0 Tandberg Data Asa ++00:11:D1 Soft Imaging System Gmbh ++00:11:D2 Perception Digital Ltd ++00:11:D3 Nextgentel Holding Asa ++00:11:D4 Netenrich, Inc ++00:11:D5 Hangzhou Sunyard System Engineering Co.,Ltd. ++00:11:D6 Handera, Inc. ++00:11:D7 Ewerks Inc ++00:11:D8 Asustek Computer Inc. ++00:11:D9 Tivo ++00:11:DA Vivaas Technology Inc. ++00:11:DB Land-Cellular Corporation ++00:11:DC Glunz & Jensen ++00:11:DD Fromus Tec. Co., Ltd. ++00:11:DE Eurilogic ++00:11:DF Arecont Systems ++00:11:E0 U-Media Communications, Inc. ++00:11:E1 Beko Electronics Co. ++00:11:E2 Hua Jung Components Co., Ltd. ++00:11:E3 Broadband Access Products ++00:11:E4 Danelec Electronics A/S ++00:11:E5 Kcodes Corporation ++00:11:E6 Scientific Atlanta ++00:11:E7 Worldsat - Texas De France ++00:11:E8 Tixi.Com ++00:11:E9 Starnex Co., Ltd. ++00:11:EA Iwics Inc. ++00:11:EB Innovative Integration ++00:11:EC Avix Inc. + 00:1C:7C Perq Systems Corporation + 00:20:00 Lexmark International, Inc. + 00:20:01 Dsp Solutions, Inc. + 00:20:02 Seritech Enterprise Co., Ltd. + 00:20:03 Pixel Power Ltd. +-00:20:04 Yamatake-honeywell Co., Ltd. ++00:20:04 Yamatake-Honeywell Co., Ltd. + 00:20:05 Simple Technology + 00:20:06 Garrett Communications, Inc. + 00:20:07 Sfa, Inc. + 00:20:08 Cable & Computer Technology + 00:20:09 Packard Bell Elec., Inc. +-00:20:0A Source-comm Corp. ++00:20:0A Source-Comm Corp. + 00:20:0B Octagon Systems Corp. + 00:20:0C Adastra Systems Corp. + 00:20:0D Carl Zeiss +@@ -3314,8 +4594,8 @@ + 00:20:17 Orbotech + 00:20:18 Cis Technology Inc. + 00:20:19 Ohler Gmbh +-00:20:1A N-base Switch Communications +-00:20:1B Northern Telecom/network ++00:20:1A Mrv Communications, Inc. ++00:20:1B Northern Telecom/Network + 00:20:1C Excel, Inc. + 00:20:1D Katana Products + 00:20:1E Netquest Corporation +@@ -3323,14 +4603,14 @@ + 00:20:20 Megatron Computer Industries Pty, Ltd. + 00:20:21 Algorithms Software Pvt. Ltd. + 00:20:22 Teknique, Inc. +-00:20:23 T.c. Technologies Pty. Ltd ++00:20:23 T.C. Technologies Pty. Ltd + 00:20:24 Pacific Communication Sciences + 00:20:25 Control Technology, Inc. + 00:20:26 Amkly Systems, Inc. + 00:20:27 Ming Fortune Industry Co., Ltd + 00:20:28 West Egg Systems, Inc. + 00:20:29 Teleprocessing Products, Inc. +-00:20:2A N.v. Dzine ++00:20:2A N.V. Dzine + 00:20:2B Advanced Telecommunications Modules, Ltd. + 00:20:2C Welltronix Co., Ltd. + 00:20:2D Taiyo Corporation +@@ -3346,7 +4626,7 @@ + 00:20:37 Seagate Technology + 00:20:38 Vme Microsystems International Corporation + 00:20:39 Scinets +-00:20:3A Digital Bi0metrics Inc. ++00:20:3A Digital Bi0Metrics Inc. + 00:20:3B Wisdm Ltd. + 00:20:3C Eurotime Ab + 00:20:3D Novar Electronics Corporation +@@ -3369,7 +4649,7 @@ + 00:20:4E Network Security Systems, Inc. + 00:20:4F Deutsche Aerospace Ag + 00:20:50 Korea Computer Inc. +-00:20:51 Phoenix Data Commununications ++00:20:51 Verilink Corporation + 00:20:52 Ragula Systems + 00:20:53 Huntsville Microsystems, Inc. + 00:20:54 Eastern Research, Inc. +@@ -3379,12 +4659,12 @@ + 00:20:58 Allied Signal Inc. + 00:20:59 Miro Computer Products Ag + 00:20:5A Computer Identics +-00:20:5B Skyline Technology ++00:20:5B Kentrox, Llc + 00:20:5C Internet Systems Of Florida, Inc. + 00:20:5D Nanomatic Oy + 00:20:5E Castle Rock, Inc. + 00:20:5F Gammadata Computer Gmbh +-00:20:60 Alcatel Italia S.p.a. ++00:20:60 Alcatel Italia S.P.A. + 00:20:61 Dynatech Communications, Inc. + 00:20:62 Scorpion Logic, Ltd. + 00:20:63 Wipro Infotech Ltd. +@@ -3395,7 +4675,7 @@ + 00:20:68 Isdyne + 00:20:69 Isdn Systems Corporation + 00:20:6A Osaka Computer Corp. +-00:20:6B Minolta Camera Co., Ltd. ++00:20:6B Konica Minolta Holdings, Inc. + 00:20:6C Evergreen Technology Corp. + 00:20:6D Data Race, Inc. + 00:20:6E Xact, Inc. +@@ -3416,7 +4696,7 @@ + 00:20:7D Advanced Computer Applications + 00:20:7E Finecom Co., Ltd. + 00:20:7F Kyoei Sangyo Co., Ltd. +-00:20:80 Synergy (uk) Ltd. ++00:20:80 Synergy (Uk) Ltd. + 00:20:81 Titan Electronics + 00:20:82 Oneac Corporation + 00:20:83 Presticom Incorporated +@@ -3425,7 +4705,7 @@ + 00:20:86 Microtech Electronics Limited + 00:20:87 Memotec Communications Corp. + 00:20:88 Global Village Communication +-00:20:89 T3plus Networking, Inc. ++00:20:89 T3Plus Networking, Inc. + 00:20:8A Sonix Communications, Ltd. + 00:20:8B Lapis Technologies, Inc. + 00:20:8C Galaxy Networks, Inc. +@@ -3434,7 +4714,7 @@ + 00:20:8F Eci Telecom Ltd. + 00:20:90 Advanced Compression Technology, Inc. + 00:20:91 J125, National Security Agency +-00:20:92 Chess Engineering B.v. ++00:20:92 Chess Engineering B.V. + 00:20:93 Landings Technology Corp. + 00:20:94 Cubix Corporation + 00:20:95 Riva Electronics +@@ -3442,7 +4722,7 @@ + 00:20:97 Applied Signal Technology + 00:20:98 Hectronic Ab + 00:20:99 Bon Electric Co., Ltd. +-00:20:9A The 3do Company ++00:20:9A The 3Do Company + 00:20:9B Ersat Electronic Gmbh + 00:20:9C Primary Access Corp. + 00:20:9D Lippert Automationstechnik +@@ -3463,7 +4743,7 @@ + 00:20:AC Interflex Datensysteme Gmbh + 00:20:AD Linq Systems + 00:20:AE Ornet Data Communication Tech. +-00:20:AF 3com Corporation ++00:20:AF 3Com Corporation + 00:20:B0 Gateway Devices, Inc. + 00:20:B1 Comtech Research Inc. + 00:20:B2 Gkd Gesellschaft Fur Kommunikation Und Datentechnik +@@ -3476,7 +4756,7 @@ + 00:20:B9 Metricom, Inc. + 00:20:BA Center For High Performance + 00:20:BB Zax Corporation +-00:20:BC Jtec Pty Ltd. ++00:20:BC Long Reach Networks Pty Ltd + 00:20:BD Niobrara R & D Corporation + 00:20:BE Lan Access Corp. + 00:20:BF Aehr Test Systems +@@ -3484,10 +4764,10 @@ + 00:20:C1 Taiko Electric Works, Ltd. + 00:20:C2 Texas Memory Systems, Inc. + 00:20:C3 Counter Solutions Ltd. +-00:20:C4 Inet,inc. ++00:20:C4 Inet,Inc. + 00:20:C5 Eagle Technology + 00:20:C6 Nectec +-00:20:C7 Akai Professional M.i. Corp. ++00:20:C7 Akai Professional M.I. Corp. + 00:20:C8 Larscom Incorporated + 00:20:C9 Victron Bv + 00:20:CA Digital Ocean +@@ -3497,35 +4777,35 @@ + 00:20:CE Logical Design Group, Inc. + 00:20:CF Test & Measurement Systems Inc + 00:20:D0 Versalynx Corporation +-00:20:D1 Microcomputer Systems (m) Sdn. ++00:20:D1 Microcomputer Systems (M) Sdn. + 00:20:D2 Rad Data Communications, Ltd. +-00:20:D3 Ost (ouest Standard Telematiqu ++00:20:D3 Ost (Ouest Standard Telematiqu + 00:20:D4 Cabletron - Zeittnet Inc. + 00:20:D5 Vipa Gmbh + 00:20:D6 Breezecom + 00:20:D7 Japan Minicomputer Systems Co., Ltd. + 00:20:D8 Nortel Networks +-00:20:D9 Panasonic Technologies, Inc./mieco-us ++00:20:D9 Panasonic Technologies, Inc./Mieco-Us + 00:20:DA Xylan Corporation + 00:20:DB Xnet Technology, Inc. + 00:20:DC Densitron Taiwan Ltd. +-00:20:DD Awa Ltd. +-00:20:DE Japan Digital Laborat'y Co.ltd ++00:20:DD Cybertec Pty Ltd ++00:20:DE Japan Digital Laborat'y Co.Ltd + 00:20:DF Kyosan Electric Mfg. Co., Ltd. +-00:20:E0 Premax Electronics, Inc. ++00:20:E0 Actiontec Electronics, Inc. + 00:20:E1 Alamar Electronics + 00:20:E2 Information Resource Engineering + 00:20:E3 Mcd Kencom Corporation + 00:20:E4 Hsing Tech Enterprise Co., Ltd + 00:20:E5 Apex Data, Inc. + 00:20:E6 Lidkoping Machine Tools Ab +-00:20:E7 B&w Nuclear Service Company ++00:20:E7 B&W Nuclear Service Company + 00:20:E8 Datatrek Corporation + 00:20:E9 Dantel + 00:20:EA Efficient Networks, Inc. + 00:20:EB Cincinnati Microwave, Inc. + 00:20:EC Techware Systems Corp. +-00:20:ED Giga-byte Technology Co., Ltd. ++00:20:ED Giga-Byte Technology Co., Ltd. + 00:20:EE Gtech Corporation + 00:20:EF Usc Corporation + 00:20:F0 Universal Microelectronics Co. +@@ -3544,6 +4824,7 @@ + 00:20:FD Itv Technologies, Inc. + 00:20:FE Topware Inc. / Grand Computer + 00:20:FF Symmetrical Technologies ++00:26:54 3Com Corporation + 00:30:00 Allwell Technology Corp. + 00:30:01 Smp + 00:30:02 Expand Networks +@@ -3567,17 +4848,17 @@ + 00:30:14 Divio, Inc. + 00:30:15 Cp Clare Corp. + 00:30:16 Ishida Co., Ltd. +-00:30:17 Terastack Ltd. ++00:30:17 Bluearc Uk Ltd + 00:30:18 Jetway Information Co., Ltd. + 00:30:19 Cisco Systems, Inc. + 00:30:1A Smartbridges Pte. Ltd. + 00:30:1B Shuttle, Inc. + 00:30:1C Altvater Airdata Systems + 00:30:1D Skystream, Inc. +-00:30:1E 3com Europe Ltd. ++00:30:1E 3Com Europe Ltd. + 00:30:1F Optical Networks, Inc. + 00:30:20 Tsi, Inc.. +-00:30:21 Hsing Tech. Enterprise Co.,ltd ++00:30:21 Hsing Tech. Enterprise Co.,Ltd + 00:30:22 Fong Kai Industrial Co., Ltd. + 00:30:23 Cogent Computer Systems, Inc. + 00:30:24 Cisco Systems, Inc. +@@ -3610,10 +4891,10 @@ + 00:30:3F Turbocomm Tech Inc. + 00:30:40 Cisco Systems, Inc. + 00:30:41 Saejin T & M Co., Ltd. +-00:30:42 Detewe-deutsche Telephonwerke ++00:30:42 Detewe-Deutsche Telephonwerke + 00:30:43 Idream Technologies, Pte. Ltd. + 00:30:44 Portsmith Llc +-00:30:45 Village Networks, Inc. (vni) ++00:30:45 Village Networks, Inc. (Vni) + 00:30:46 Controlled Electronic Manageme + 00:30:47 Nissei Electric Co., Ltd. + 00:30:48 Supermicro Computer, Inc. +@@ -3631,9 +4912,9 @@ + 00:30:54 Castlenet Technology, Inc. + 00:30:55 Hitachi Semiconductor America, + 00:30:56 Beck Ipc Gmbh +-00:30:57 E-tel Corporation ++00:30:57 E-Tel Corporation + 00:30:58 Api Motion +-00:30:59 Digital-logic Ag ++00:30:59 Digital-Logic Ag + 00:30:5A Telgen Corporation + 00:30:5B Module Department + 00:30:5C Smar Laboratories Corp. +@@ -3645,7 +4926,7 @@ + 00:30:62 Path 1 Network Technol's Inc. + 00:30:63 Santera Systems, Inc. + 00:30:64 Adlink Technology, Inc. +-00:30:65 Apple Airport Card 2002 ++00:30:65 Apple Computer, Inc. + 00:30:66 Digital Wireless Corporation + 00:30:67 Biostar Microtech Int'l Corp. + 00:30:68 Cybernetics Tech. Co., Ltd. +@@ -3656,7 +4937,7 @@ + 00:30:6D Lucent Technologies + 00:30:6E Hewlett Packard + 00:30:6F Seyeon Tech. Co., Ltd. +-00:30:70 1net Corporation ++00:30:70 1Net Corporation + 00:30:71 Cisco Systems, Inc. + 00:30:72 Intellibyte Inc. + 00:30:73 International Microsystems, In +@@ -3673,7 +4954,7 @@ + 00:30:7E Redflex Communication Systems + 00:30:7F Irlan Ltd. + 00:30:80 Cisco Systems, Inc. +-00:30:81 Altos C&c ++00:30:81 Altos C&C + 00:30:82 Taihan Electric Wire Co., Ltd. + 00:30:83 Ivron Systems + 00:30:84 Allied Telesyn Internaional +@@ -3682,7 +4963,7 @@ + 00:30:87 Vega Grieshaber Kg + 00:30:88 Siara Systems, Inc. + 00:30:89 Spectrapoint Wireless, Llc +-00:30:8A Nicotra Sistemi S.p.a ++00:30:8A Nicotra Sistemi S.P.A + 00:30:8B Brix Networks + 00:30:8C Advanced Digital Information + 00:30:8D Pinnacle Systems, Inc. +@@ -3705,7 +4986,7 @@ + 00:30:9E Workbit Corporation. + 00:30:9F Amber Networks + 00:30:A0 Tyco Submarine Systems, Ltd. +-00:30:A1 Opti Tech Co., Ltd. ++00:30:A1 Webgate Inc. + 00:30:A2 Lightner Engineering + 00:30:A3 Cisco Systems, Inc. + 00:30:A4 Woodwind Communications System +@@ -3719,9 +5000,9 @@ + 00:30:AC Systeme Lauer Gmbh & Co., Ltd. + 00:30:AD Shanghai Communication + 00:30:AE Times N System, Inc. +-00:30:AF Honeywell Reqelsysteme Gmbh ++00:30:AF Honeywell Gmbh + 00:30:B0 Convergenet Technologies +-00:30:B1 Goc Gesellschaft Fur Optische ++00:30:B1 Axess-Pro Networks Gmbh + 00:30:B2 Wescam - Healdsburg + 00:30:B3 San Valley Systems, Inc. + 00:30:B4 Intersil Corp. +@@ -3730,14 +5011,14 @@ + 00:30:B7 Teletrol Systems, Inc. + 00:30:B8 Riverdelta Networks + 00:30:B9 Ectel +-00:30:BA Ac&t System Co., Ltd. ++00:30:BA Ac&T System Co., Ltd. + 00:30:BB Cacheflow, Inc. + 00:30:BC Optronic Ag + 00:30:BD Belkin Components +-00:30:BE City-net Technology, Inc. ++00:30:BE City-Net Technology, Inc. + 00:30:BF Multidata Gmbh + 00:30:C0 Lara Technology, Inc. +-00:30:C1 Hewlett-packard ++00:30:C1 Hewlett-Packard + 00:30:C2 Comone + 00:30:C3 Flueckiger Elektronik Ag + 00:30:C4 Niigata Canotec Co., Inc. +@@ -3752,14 +5033,14 @@ + 00:30:CD Conexant Systems, Inc. + 00:30:CE Zaffire + 00:30:CF Two Technologies, Inc. +-00:30:D0 Private ++00:30:D0 Tellabs + 00:30:D1 Inova Corporation + 00:30:D2 Win Technologies, Co., Ltd. + 00:30:D3 Agilent Technologies + 00:30:D4 Comtier + 00:30:D5 Dresearch Gmbh + 00:30:D6 Msc Vertriebs Gmbh +-00:30:D7 Innovative Systems, L.l.c. ++00:30:D7 Innovative Systems, L.L.C. + 00:30:D8 Sitek + 00:30:D9 Datacore Software Corp. + 00:30:DA Comtrend Co. +@@ -3767,13 +5048,13 @@ + 00:30:DC Rightech Corporation + 00:30:DD Indigita Corporation + 00:30:DE Wago Kontakttechnik Gmbh +-00:30:DF Kb/tel Telecomunicaciones ++00:30:DF Kb/Tel Telecomunicaciones + 00:30:E0 Oxford Semiconductor Ltd. + 00:30:E1 Acrotron Systems, Inc. + 00:30:E2 Garnet Systems Co., Ltd. + 00:30:E3 Sedona Networks Corp. + 00:30:E4 Chiyoda System Riken +-00:30:E5 Amper Datos S.a. ++00:30:E5 Amper Datos S.A. + 00:30:E6 Siemens Medical Systems + 00:30:E7 Cnf Mobile Solutions, Inc. + 00:30:E8 Ensim Corp. +@@ -3813,7 +5094,7 @@ + 00:40:0A Pivotal Technologies, Inc. + 00:40:0B Cisco Systems, Inc. + 00:40:0C General Micro Systems, Inc. +-00:40:0D Lannet Data Communications,ltd ++00:40:0D Lannet Data Communications,Ltd + 00:40:0E Memotec Communications, Inc. + 00:40:0F Datacom Technologies + 00:40:10 Sonic Systems, Inc. +@@ -3823,7 +5104,7 @@ + 00:40:14 Comsoft Gmbh + 00:40:15 Ascom Infrasys Ag + 00:40:16 Hadax Electronics, Inc. +-00:40:17 Xcd Inc. ++00:40:17 Troy Group, Inc. + 00:40:18 Adobe Systems, Inc. + 00:40:19 Aeon Systems, Inc. + 00:40:1A Fuji Electric Co., Ltd. +@@ -3842,7 +5123,7 @@ + 00:40:27 Smc Massachusetts, Inc. + 00:40:28 Netcomm Limited + 00:40:29 Compex +-00:40:2A Canoga-perkins ++00:40:2A Canoga-Perkins + 00:40:2B Trigem Computer, Inc. + 00:40:2C Isis Distributed Systems, Inc. + 00:40:2D Harris Adacom Corporation +@@ -3855,7 +5136,7 @@ + 00:40:34 Bustek Corporation + 00:40:35 Opcom + 00:40:36 Tribe Computer Works, Inc. +-00:40:37 Sea-ilan, Inc. ++00:40:37 Sea-Ilan, Inc. + 00:40:38 Talent Electric Incorporated + 00:40:39 Optec Daiichi Denko Co., Ltd. + 00:40:3A Impact Technologies +@@ -3866,13 +5147,13 @@ + 00:40:3F Ssangyong Computer Systems + 00:40:40 Ring Access, Inc. + 00:40:41 Fujikura Ltd. +-00:40:42 N.a.t. Gmbh ++00:40:42 N.A.T. Gmbh + 00:40:43 Nokia Telecommunications + 00:40:44 Qnix Computer Co., Ltd. + 00:40:45 Twinhead Corporation + 00:40:46 Udc Research Limited + 00:40:47 Wind River Systems +-00:40:48 Smd Informatica S.a. ++00:40:48 Smd Informatica S.A. + 00:40:49 Tegimenta Ag + 00:40:4A West Australian Department + 00:40:4B Maple Computer Systems +@@ -3893,12 +5174,12 @@ + 00:40:5A Goldstar Information & Comm. + 00:40:5B Funasset Limited + 00:40:5C Future Systems, Inc. +-00:40:5D Star-tek, Inc. ++00:40:5D Star-Tek, Inc. + 00:40:5E North Hills Israel + 00:40:5F Afe Computers Ltd. + 00:40:60 Comendec Ltd + 00:40:61 Datatech Enterprises Co., Ltd. +-00:40:62 E-systems, Inc./garland Div. ++00:40:62 E-Systems, Inc./Garland Div. + 00:40:63 Via Technologies, Inc. + 00:40:64 Kla Instruments Corporation + 00:40:65 Gte Spacenet +@@ -3906,7 +5187,7 @@ + 00:40:67 Omnibyte Corporation + 00:40:68 Extended Systems + 00:40:69 Lemcom Systems, Inc. +-00:40:6A Kentek Information Systems,inc ++00:40:6A Kentek Information Systems,Inc + 00:40:6B Sysgen + 00:40:6C Copernique + 00:40:6D Lanco, Inc. +@@ -3917,7 +5198,7 @@ + 00:40:72 Applied Innovation Inc. + 00:40:73 Bass Associates + 00:40:74 Cable And Wireless +-00:40:75 M-trade (uk) Ltd ++00:40:75 M-Trade (Uk) Ltd + 00:40:76 Sun Conversion Technologies + 00:40:77 Maxton Technology Corporation + 00:40:78 Wearnes Automation Pte Ltd +@@ -3943,13 +5224,13 @@ + 00:40:8C Axis Communications Ab + 00:40:8D The Goodyear Tire & Rubber Co. + 00:40:8E Digilog, Inc. +-00:40:8F Wm-data Minfo Ab ++00:40:8F Wm-Data Minfo Ab + 00:40:90 Ansel Communications + 00:40:91 Procomp Industria Eletronica + 00:40:92 Asp Computer Products, Inc. + 00:40:93 Paxdata Networks Ltd. + 00:40:94 Shographics, Inc. +-00:40:95 R.p.t. Intergroups Int'l Ltd. ++00:40:95 R.P.T. Intergroups Int'l Ltd. + 00:40:96 Aironet Wireless Communication + 00:40:97 Datex Division Of + 00:40:98 Dressler Gmbh & Co. +@@ -3959,7 +5240,7 @@ + 00:40:9C Transware + 00:40:9D Digiboard, Inc. + 00:40:9E Concurrent Technologies Ltd. +-00:40:9F Lancast/casat Technology, Inc. ++00:40:9F Lancast/Casat Technology, Inc. + 00:40:A0 Goldstar Co., Ltd. + 00:40:A1 Ergo Computing + 00:40:A2 Kingstar Technology Inc. +@@ -3967,7 +5248,7 @@ + 00:40:A4 Rose Electronics + 00:40:A5 Clinicomp Intl. + 00:40:A6 Cray, Inc. +-00:40:A7 Itautec Philco S.a. ++00:40:A7 Itautec Philco S.A. + 00:40:A8 Imf International Ltd. + 00:40:A9 Datacom Inc. + 00:40:AA Valmet Automation Inc. +@@ -3980,7 +5261,7 @@ + 00:40:B1 Codonics Inc. + 00:40:B2 Systemforschung + 00:40:B3 Par Microsystems Corporation +-00:40:B4 Nextcom K.k. ++00:40:B4 Nextcom K.K. + 00:40:B5 Video Technology Computers Ltd + 00:40:B6 Computerm Corporation + 00:40:B7 Stealth Computer Systems +@@ -3993,7 +5274,7 @@ + 00:40:BE Boeing Defense & Space + 00:40:BF Channel Systems Intern'l Inc. + 00:40:C0 Vista Controls Corporation +-00:40:C1 Bizerba-werke Wilheim Kraut ++00:40:C1 Bizerba-Werke Wilheim Kraut + 00:40:C2 Applied Computing Devices + 00:40:C3 Fischer And Porter Co. + 00:40:C4 Kinkei System Corporation +@@ -4006,7 +5287,7 @@ + 00:40:CB Lanwan Technologies + 00:40:CC Silcom Manuf'g Technology Inc. + 00:40:CD Tera Microsystems, Inc. +-00:40:CE Net-source, Inc. ++00:40:CE Net-Source, Inc. + 00:40:CF Strawberry Tree, Inc. + 00:40:D0 Mitac International Corp. + 00:40:D1 Fukuda Denshi Co., Ltd. +@@ -4014,7 +5295,7 @@ + 00:40:D3 Kimpsion International Corp. + 00:40:D4 Gage Talker Corp. + 00:40:D5 Sartorius Ag +-00:40:D6 Locamation B.v. ++00:40:D6 Locamation B.V. + 00:40:D7 Studio Gen Inc. + 00:40:D8 Ocean Office Automation Ltd. + 00:40:D9 American Megatrends Inc. +@@ -4028,11 +5309,11 @@ + 00:40:E1 Marner International, Inc. + 00:40:E2 Mesa Ridge Technologies, Inc. + 00:40:E3 Quin Systems Ltd +-00:40:E4 E-m Technology, Inc. ++00:40:E4 E-M Technology, Inc. + 00:40:E5 Sybus Corporation +-00:40:E6 C.a.e.n. ++00:40:E6 C.A.E.N. + 00:40:E7 Arnos Instruments & Computer +-00:40:E8 Charles River Data Systems,inc ++00:40:E8 Charles River Data Systems,Inc + 00:40:E9 Accord Systems, Inc. + 00:40:EA Plain Tree Systems Inc + 00:40:EB Martin Marietta Corporation +@@ -4061,14 +5342,14 @@ + 00:50:01 Yamashita Systems Corp. + 00:50:02 Omnisec Ag + 00:50:03 Gretag Macbeth Ag +-00:50:04 3com Corporation ++00:50:04 3Com Corporation + 00:50:06 Tac Ab + 00:50:07 Siemens Telecommunication Systems Limited +-00:50:08 Compaq WL100 ++00:50:08 Tiva Microcomputer Corp. (Tmc) + 00:50:09 Philips Broadband Networks + 00:50:0A Iris Technologies, Inc. + 00:50:0B Cisco Systems, Inc. +-00:50:0C E-tek Labs, Inc. ++00:50:0C E-Tek Labs, Inc. + 00:50:0D Satori Electoric Co., Ltd. + 00:50:0E Chromatis Networks, Inc. + 00:50:0F Cisco Systems, Inc. +@@ -4077,8 +5358,8 @@ + 00:50:13 Chaparral Network Storage + 00:50:14 Cisco Systems, Inc. + 00:50:15 Bright Star Engineering +-00:50:16 Sst/woodhead Industries +-00:50:17 Rsr S.r.l. ++00:50:16 Sst/Woodhead Industries ++00:50:17 Rsr S.R.L. + 00:50:18 Advanced Multimedia Internet Technology Inc. + 00:50:19 Spring Tide Networks, Inc. + 00:50:1A Uisiqn +@@ -4124,8 +5405,8 @@ + 00:50:47 Private + 00:50:48 Infolibria + 00:50:49 Ellacoya Networks, Inc. +-00:50:4A Elteco A.s. +-00:50:4B Barconet N.v. ++00:50:4A Elteco A.S. ++00:50:4B Barconet N.V. + 00:50:4C Galil Motion Control, Inc. + 00:50:4D Tokyo Electron Device Ltd. + 00:50:4E Sierra Monitor Corp. +@@ -4135,36 +5416,36 @@ + 00:50:52 Tiara Networks, Inc. + 00:50:53 Cisco Systems, Inc. + 00:50:54 Cisco Systems, Inc. +-00:50:55 Doms A/s ++00:50:55 Doms A/S + 00:50:56 Vmware, Inc. + 00:50:57 Broadband Access Systems +-00:50:58 Vegastream Limited ++00:50:58 Vegastream Limted + 00:50:59 Suite Technology Systems Network + 00:50:5A Network Alchemy, Inc. +-00:50:5B Kawasaki Lsi U.s.a., Inc. ++00:50:5B Kawasaki Lsi U.S.A., Inc. + 00:50:5C Tundo Corporation +-00:50:5E Digitek Micrologic S.a. ++00:50:5E Digitek Micrologic S.A. + 00:50:5F Brand Innovators + 00:50:60 Tandberg Telecom As + 00:50:62 Kouwell Electronics Corp. ** + 00:50:63 Oy Comsel System Ab + 00:50:64 Cae Electronics +-00:50:65 Densei-lambad Co., Ltd. ++00:50:65 Densei-Lambad Co., Ltd. + 00:50:66 Atecom Gmbh Advanced Telecomunication Modules + 00:50:67 Aerocomm, Inc. + 00:50:68 Electronic Industries Association + 00:50:69 Pixstream Incorporated + 00:50:6A Edeva, Inc. +-00:50:6B Spx-ateg ++00:50:6B Spx-Ateg + 00:50:6C G & L Beijer Electronics Ab + 00:50:6D Videojet Systems + 00:50:6E Corder Engineering Corporation +-00:50:6F G-connect ++00:50:6F G-Connect + 00:50:70 Chaintech Computer Co., Ltd. + 00:50:71 Aiwa Co., Ltd. + 00:50:72 Corvis Corporation + 00:50:73 Cisco Systems, Inc. +-00:50:74 Advanced Hi-tech Corp. ++00:50:74 Advanced Hi-Tech Corp. + 00:50:75 Kestrel Solutions + 00:50:76 Ibm + 00:50:77 Prolific Technology, Inc. +@@ -4197,13 +5478,13 @@ + 00:50:94 Pace Micro Technology Plc + 00:50:95 Peracom Networks + 00:50:96 Salix Technologies, Inc. +-00:50:97 Mmc-embedded Computertechnik Gmbh ++00:50:97 Mmc-Embedded Computertechnik Gmbh + 00:50:98 Globaloop, Ltd. +-00:50:99 3com Europe, Ltd. ++00:50:99 3Com Europe, Ltd. + 00:50:9A Tag Electronic Systems + 00:50:9B Switchcore Ab + 00:50:9C Beta Research +-00:50:9D The Industree B.v. ++00:50:9D The Industree B.V. + 00:50:9E Les Technologies Softacoustik Inc. + 00:50:9F Horizon Computer + 00:50:A0 Delta Computer Systems, Inc. +@@ -4216,7 +5497,7 @@ + 00:50:A7 Cisco Systems, Inc. + 00:50:A8 Opencon Systems, Inc. + 00:50:A9 Moldat Wireless Technolgies +-00:50:AA Konica Corporation ++00:50:AA Konica Minolta Holdings, Inc. + 00:50:AB Naltec, Inc. + 00:50:AC Maple Computer Corporation + 00:50:AD Communique Wireless Corp. +@@ -4227,12 +5508,12 @@ + 00:50:B2 Brodel Automation + 00:50:B3 Voiceboard Corporation + 00:50:B4 Satchwell Control Systems, Ltd +-00:50:B5 Fichet-bauche ++00:50:B5 Fichet-Bauche + 00:50:B6 Good Way Ind. Co., Ltd. + 00:50:B7 Boser Technology Co., Ltd. + 00:50:B8 Inova Computers Gmbh & Co. Kg + 00:50:B9 Xitron Technologies, Inc. +-00:50:BA D-link ++00:50:BA D-Link + 00:50:BB Cms Technologies + 00:50:BC Hammer Storage Solutions + 00:50:BD Cisco Systems, Inc. +@@ -4249,7 +5530,7 @@ + 00:50:CA Net To Net Technologies + 00:50:CB Jetter + 00:50:CC Xyratex +-00:50:CD Digianswer A/s ++00:50:CD Digianswer A/S + 00:50:CE Lg International Corp. + 00:50:CF Vanlink Communication Technology Research Institute + 00:50:D0 Minerva Systems +@@ -4261,23 +5542,23 @@ + 00:50:D6 Atlas Copco Tools Ab + 00:50:D7 Telstrat + 00:50:D8 Unicorn Computer Corp. +-00:50:D9 Engetron-engenharia Eletronica Ind. E Com. Ltda +-00:50:DA 3Com 3CRWE73796B ++00:50:D9 Engetron-Engenharia Eletronica Ind. E Com. Ltda ++00:50:DA 3Com Corporation + 00:50:DB Contemporary Control + 00:50:DC Tas Telefonbau A. Schwabe Gmbh & Co. Kg +-00:50:DD Serra Soldadura, S.a. ++00:50:DD Serra Soldadura, S.A. + 00:50:DE Signum Systems Corp. + 00:50:DF Airfiber, Inc. + 00:50:E1 Ns Tech Electronics Sdn Bhd + 00:50:E2 Cisco Systems, Inc. +-00:50:E3 Telegate ++00:50:E3 Terayon Communications Systems + 00:50:E4 Apple Computer, Inc. + 00:50:E6 Hakusan Corporation +-00:50:E7 Paradise Innovations (asia) ++00:50:E7 Paradise Innovations (Asia) + 00:50:E8 Nomadix Inc. + 00:50:EA Xel Communications, Inc. +-00:50:EB Alpha-top Corporation +-00:50:EC Olicom A/s ++00:50:EB Alpha-Top Corporation ++00:50:EC Olicom A/S + 00:50:ED Anda Networks + 00:50:EE Tek Digitel Corporation + 00:50:EF Spe Systemhaus Gmbh +@@ -4286,8 +5567,8 @@ + 00:50:F2 Microsoft Corp. + 00:50:F3 Global Net Information Co., Ltd. + 00:50:F4 Sigmatek Gmbh & Co. Kg +-00:50:F6 Pan-international Industrial Corp. +-00:50:F7 Venture Manufacturing (singapore) Ltd. ++00:50:F6 Pan-International Industrial Corp. ++00:50:F7 Venture Manufacturing (Singapore) Ltd. + 00:50:F8 Entrega Technologies, Inc. + 00:50:F9 Private + 00:50:FA Oxtel, Ltd. +@@ -4304,7 +5585,7 @@ + 00:60:05 Feedback Data Ltd. + 00:60:06 Sotec Co., Ltd + 00:60:07 Acres Gaming, Inc. +-00:60:08 3com Corporation ++00:60:08 3Com Corporation + 00:60:09 Cisco Systems, Inc. + 00:60:0A Sord Computer Corporation + 00:60:0B Logware Gmbh +@@ -4317,7 +5598,7 @@ + 00:60:12 Power Computing Corporation + 00:60:13 Netstal Maschinen Ag + 00:60:14 Edec Co., Ltd. +-00:60:15 Net2net Corporation ++00:60:15 Net2Net Corporation + 00:60:16 Clariion + 00:60:17 Tokimec Inc. + 00:60:18 Stellar One Corporation +@@ -4346,7 +5627,7 @@ + 00:60:2F Cisco Systems, Inc. + 00:60:30 Village Tronic Entwicklung + 00:60:31 Hrk Systems +-00:60:32 I-cube, Inc. ++00:60:32 I-Cube, Inc. + 00:60:33 Acuity Imaging, Inc. + 00:60:34 Robert Bosch Gmbh + 00:60:35 Dallas Semiconductor, Inc. +@@ -4356,15 +5637,15 @@ + 00:60:39 Sancom Technology, Inc. + 00:60:3A Quick Controls Ltd. + 00:60:3B Amtec Spa +-00:60:3C Hagiwara Sys-com Co., Ltd. +-00:60:3D 3cx ++00:60:3C Hagiwara Sys-Com Co., Ltd. ++00:60:3D 3Cx + 00:60:3E Cisco Systems, Inc. + 00:60:3F Patapsco Designs + 00:60:40 Netro Corp. + 00:60:41 Yokogawa Electric Corporation +-00:60:42 Tks (usa), Inc. ++00:60:42 Tks (Usa), Inc. + 00:60:43 Comsoft Systems, Inc. +-00:60:44 Litton/poly-scientific ++00:60:44 Litton/Poly-Scientific + 00:60:45 Pathlight Technologies + 00:60:46 Vmetro, Inc. + 00:60:47 Cisco Systems, Inc. +@@ -4372,7 +5653,7 @@ + 00:60:49 Vina Technologies + 00:60:4A Saic Ideas Group + 00:60:4B Biodata Gmbh +-00:60:4C Sat ++00:60:4C Sagem Sa + 00:60:4D Mmc Networks, Inc. + 00:60:4E Cycle Computer Corporation, Inc. + 00:60:4F Suzuki Mfg. Co., Ltd. +@@ -4397,7 +5678,7 @@ + 00:60:62 Telesync, Inc. + 00:60:63 Psion Dacom Plc. + 00:60:64 Netcomm Limited +-00:60:65 Bernecker & Rainer Industrie-elektronic Gmbh ++00:60:65 Bernecker & Rainer Industrie-Elektronic Gmbh + 00:60:66 Lacroix Technolgie + 00:60:67 Acer Netxus Inc. + 00:60:68 Eicon Technology Corporation +@@ -4405,7 +5686,7 @@ + 00:60:6A Mitsubishi Wireless Communications. Inc. + 00:60:6B Synclayer Inc. + 00:60:6C Arescom +-00:60:6D Cabletron CSIBB-AA ++00:60:6D Digital Equipment Corp. + 00:60:6E Davicom Semiconductor, Inc. + 00:60:6F Clarion Corporation Of America + 00:60:70 Cisco Systems, Inc. +@@ -4425,7 +5706,7 @@ + 00:60:7E Gigalabs, Inc. + 00:60:7F Aurora Technologies, Inc. + 00:60:80 Microtronix Datacom Ltd. +-00:60:81 Tv/com International ++00:60:81 Tv/Com International + 00:60:82 Novalink Technologies, Inc. + 00:60:83 Cisco Systems, Inc. + 00:60:84 Digital Video +@@ -4436,23 +5717,23 @@ + 00:60:89 Xata + 00:60:8A Citadel Computer + 00:60:8B Confertech International +-00:60:8C 3com Corporation ++00:60:8C 3Com Corporation + 00:60:8D Unipulse Corp. + 00:60:8E He Electronics, Technologie & Systemtechnik Gmbh + 00:60:8F Tekram Technology Co., Ltd. + 00:60:90 Able Communications, Inc. + 00:60:91 First Pacific Networks, Inc. +-00:60:92 Micro/sys, Inc. ++00:60:92 Micro/Sys, Inc. + 00:60:93 Varian + 00:60:94 Ibm Corp. +-00:60:95 Accu-time Systems, Inc. +-00:60:96 T.s. Microtech Inc. +-00:60:97 3com Corporation ++00:60:95 Accu-Time Systems, Inc. ++00:60:96 T.S. Microtech Inc. ++00:60:97 3Com Corporation + 00:60:98 Ht Communications +-00:60:99 Lan Media Corporation ++00:60:99 Sbe, Inc. + 00:60:9A Njk Techno Co. +-00:60:9B Astro-med, Inc. +-00:60:9C Perkin-elmer Incorporated ++00:60:9B Astro-Med, Inc. ++00:60:9C Perkin-Elmer Incorporated + 00:60:9D Pmi Food Equipment Group + 00:60:9E Asc X3 - Information Technology Standards Secretariats + 00:60:9F Phast Corporation +@@ -4466,17 +5747,17 @@ + 00:60:A7 Microsens Gmbh & Co. Kg + 00:60:A8 Tidomat Ab + 00:60:A9 Gesytec Mbh +-00:60:AA Intelligent Devices Inc. (idi) ++00:60:AA Intelligent Devices Inc. (Idi) + 00:60:AB Larscom Incorporated + 00:60:AC Resilience Corporation + 00:60:AD Megachips Corporation + 00:60:AE Trio Information Systems Ab + 00:60:AF Pacific Micro Data, Inc. +-00:60:B0 Hewlett-packard Co. +-00:60:B1 Input/output, Inc. ++00:60:B0 Hewlett-Packard Co. ++00:60:B1 Input/Output, Inc. + 00:60:B2 Process Control Corp. +-00:60:B3 SMC SMC2642W +-00:60:B4 Glenayre R&d Inc. ++00:60:B3 Z-Com, Inc. ++00:60:B4 Glenayre R&D Inc. + 00:60:B5 Keba Gmbh + 00:60:B6 Land Computer Co., Ltd. + 00:60:B7 Channelmatic, Inc. +@@ -4485,14 +5766,14 @@ + 00:60:BA Sahara Networks, Inc. + 00:60:BB Cabletron - Netlink, Inc. + 00:60:BC Keunyoung Electronics & Communication Co., Ltd. +-00:60:BD Hubbell-pulsecom ++00:60:BD Hubbell-Pulsecom + 00:60:BE Webtronics + 00:60:BF Macraigor Systems, Inc. + 00:60:C0 Nera As + 00:60:C1 Wavespan Corporation + 00:60:C2 Mpl Ag + 00:60:C3 Netvision Corporation +-00:60:C4 Soliton Systems K.k. ++00:60:C4 Soliton Systems K.K. + 00:60:C5 Ancot Corp. + 00:60:C6 Dcs Ag + 00:60:C7 Amati Communications Corp. +@@ -4507,19 +5788,19 @@ + 00:60:D0 Snmp Research Incorporated + 00:60:D1 Cascade Communications + 00:60:D2 Lucent Technologies Taiwan Telecommunications Co., Ltd. +-00:60:D3 At&t ++00:60:D3 At&T + 00:60:D4 Eldat Communication Ltd. + 00:60:D5 Miyachi Technos Corp. + 00:60:D6 Novatel Wireless Technologies Ltd. +-00:60:D7 Ecole Polytechnique Federale De Lausanne (epfl) ++00:60:D7 Ecole Polytechnique Federale De Lausanne (Epfl) + 00:60:D8 Elmic Systems, Inc. + 00:60:D9 Transys Networks Inc. + 00:60:DA Jbm Electronics Co. +-00:60:DB Ntp Elektronik A/s ++00:60:DB Ntp Elektronik A/S + 00:60:DC Toyo Communication Equipment Co., Ltd. + 00:60:DD Myricom, Inc. +-00:60:DE Kayser-threde Gmbh +-00:60:DF Inrange Technologies Corp. ++00:60:DE Kayser-Threde Gmbh ++00:60:DF Cnt Corporation + 00:60:E0 Axiom Technology Co., Ltd. + 00:60:E1 Orckit Communications Ltd. + 00:60:E2 Quest Engineering & Development +@@ -4528,7 +5809,7 @@ + 00:60:E5 Fuji Automation Co., Ltd. + 00:60:E6 Shomiti Systems Incorporated + 00:60:E7 Randata +-00:60:E8 Hitachi Computer Products (america), Inc. ++00:60:E8 Hitachi Computer Products (America), Inc. + 00:60:E9 Atop Technologies, Inc. + 00:60:EA Streamlogic + 00:60:EB Fourthtrack Systems +@@ -4539,7 +5820,7 @@ + 00:60:F0 Johnson & Johnson Medical, Inc + 00:60:F1 Exp Computer, Inc. + 00:60:F2 Lasergraphics, Inc. +-00:60:F3 Netcom Systems, Inc. ++00:60:F3 Performance Analysis Broadband, Spirent Plc + 00:60:F4 Advanced Computer Solutions, Inc. + 00:60:F5 Icon West, Inc. + 00:60:F6 Nextest Communications Products, Inc. +@@ -4552,28 +5833,28 @@ + 00:60:FD Netics, Inc. + 00:60:FE Lynx System Developers, Inc. + 00:60:FF Quvis, Inc. +-00:70:B0 M/a-com Inc. Companies ++00:70:B0 M/A-Com Inc. Companies + 00:70:B3 Data Recall Ltd. + 00:80:00 Multitech Systems, Inc. + 00:80:01 Periphonics Corporation +-00:80:02 Satelcom (uk) Ltd ++00:80:02 Satelcom (Uk) Ltd + 00:80:03 Hytec Electronics Ltd. + 00:80:04 Antlow Communications, Ltd. + 00:80:05 Cactus Computer Inc. + 00:80:06 Compuadd Corporation +-00:80:07 Dlog Nc-systeme ++00:80:07 Dlog Nc-Systeme + 00:80:08 Dynatech Computer Systems + 00:80:09 Jupiter Systems, Inc. + 00:80:0A Japan Computer Corp. + 00:80:0B Csk Corporation + 00:80:0C Videcom Limited +-00:80:0D Vosswinkel F.u. ++00:80:0D Vosswinkel F.U. + 00:80:0E Atlantix Corporation + 00:80:0F Standard Microsystems + 00:80:10 Commodore International + 00:80:11 Digital Systems Int'l. Inc. + 00:80:12 Integrated Measurement Systems +-00:80:13 Thomas-conrad Corporation ++00:80:13 Thomas-Conrad Corporation + 00:80:14 Esprit Systems + 00:80:15 Seiko Systems, Inc. + 00:80:16 Wandel And Goltermann +@@ -4587,14 +5868,14 @@ + 00:80:1E Xinetron, Inc. + 00:80:1F Krupp Atlas Electronik Gmbh + 00:80:20 Network Products +-00:80:21 Newbridge Research Corp. +-00:80:22 Scan-optics ++00:80:21 Alcatel Canada Inc. ++00:80:22 Scan-Optics + 00:80:23 Integrated Business Networks + 00:80:24 Kalpana, Inc. + 00:80:25 Stollmann Gmbh + 00:80:26 Network Products Corporation + 00:80:27 Adaptive Systems, Inc. +-00:80:28 Tradpost (hk) Ltd ++00:80:28 Tradpost (Hk) Ltd + 00:80:29 Eagle Technology, Inc. + 00:80:2A Test Systems & Simulations Inc + 00:80:2B Integrated Marketing Co +@@ -4625,11 +5906,11 @@ + 00:80:44 Systech Computer Corp. + 00:80:45 Matsushita Electric Ind. Co + 00:80:46 University Of Toronto +-00:80:47 In-net Corp. ++00:80:47 In-Net Corp. + 00:80:48 Compex Incorporated + 00:80:49 Nissin Electric Co., Ltd. +-00:80:4A Pro-log +-00:80:4B Eagle Technologies Pty.ltd. ++00:80:4A Pro-Log ++00:80:4B Eagle Technologies Pty.Ltd. + 00:80:4C Contec Co., Ltd. + 00:80:4D Cyclone Microsystems, Inc. + 00:80:4E Apex Computer Company +@@ -4644,7 +5925,7 @@ + 00:80:57 Adsoft, Ltd. + 00:80:58 Printer Systems Corporation + 00:80:59 Stanley Electric Co., Ltd +-00:80:5A Tulip Computers Internat'l B.v ++00:80:5A Tulip Computers Internat'l B.V + 00:80:5B Condor Systems, Inc. + 00:80:5C Agilis Corporation + 00:80:5D Canstar +@@ -4660,7 +5941,7 @@ + 00:80:67 Square D Company + 00:80:68 Yamatech Scientific Ltd. + 00:80:69 Computone Systems +-00:80:6A Eri (empac Research Inc.) ++00:80:6A Eri (Empac Research Inc.) + 00:80:6B Schmid Telecommunication + 00:80:6C Cegelec Projects Ltd + 00:80:6D Century Systems Corp. +@@ -4687,23 +5968,23 @@ + 00:80:82 Pep Modular Computers Gmbh + 00:80:83 Amdahl + 00:80:84 The Cloud Inc. +-00:80:85 H-three Systems Corporation ++00:80:85 H-Three Systems Corporation + 00:80:86 Computer Generation Inc. + 00:80:87 Oki Electric Industry Co., Ltd + 00:80:88 Victor Company Of Japan, Ltd. +-00:80:89 Tecnetics (pty) Ltd. ++00:80:89 Tecnetics (Pty) Ltd. + 00:80:8A Summit Microsystems Corp. + 00:80:8B Dacoll Limited + 00:80:8C Netscout Systems, Inc. +-00:80:8D Westcoast Technology B.v. ++00:80:8D Westcoast Technology B.V. + 00:80:8E Radstone Technology + 00:80:8F C. Itoh Electronics, Inc. + 00:80:90 Microtek International, Inc. +-00:80:91 Tokyo Electric Co.,ltd ++00:80:91 Tokyo Electric Co.,Ltd + 00:80:92 Japan Computer Industry, Inc. + 00:80:93 Xyron Corporation + 00:80:94 Alfa Laval Automation Ab +-00:80:95 Basic Merton Handelsges.m.b.h. ++00:80:95 Basic Merton Handelsges.M.B.H. + 00:80:96 Human Designed Systems, Inc. + 00:80:97 Centralp Automatismes + 00:80:98 Tdk Corporation +@@ -4714,7 +5995,7 @@ + 00:80:9D Commscraft Ltd. + 00:80:9E Datus Gmbh + 00:80:9F Alcatel Business Systems +-00:80:A0 Edisa Hewlett Packard S/a ++00:80:A0 Edisa Hewlett Packard S/A + 00:80:A1 Microtest, Inc. + 00:80:A2 Creative Electronic Systems + 00:80:A3 Lantronix +@@ -4731,7 +6012,7 @@ + 00:80:AE Hughes Network Systems + 00:80:AF Allumer Co., Ltd. + 00:80:B0 Advanced Information +-00:80:B1 Softcom A/s ++00:80:B1 Softcom A/S + 00:80:B2 Network Equipment Technologies + 00:80:B3 Aval Data Corporation + 00:80:B4 Sophia Systems +@@ -4740,7 +6021,7 @@ + 00:80:B7 Stellar Computer + 00:80:B8 Bug, Incorporated + 00:80:B9 Arche Technoligies Inc. +-00:80:BA Specialix (asia) Pte, Ltd ++00:80:BA Specialix (Asia) Pte, Ltd + 00:80:BB Hughes Lan Systems + 00:80:BC Hitachi Engineering Co., Ltd + 00:80:BD The Furukawa Electric Co., Ltd +@@ -4748,13 +6029,13 @@ + 00:80:BF Takaoka Electric Mfg. Co. Ltd. + 00:80:C0 Penril Datacomm + 00:80:C1 Lanex Corporation +-00:80:C2 Ieee 802 Committee ++00:80:C2 Ieee 802.1 Committee + 00:80:C3 Bicc Information Systems & Svc + 00:80:C4 Document Technologies, Inc. + 00:80:C5 Novellco De Mexico + 00:80:C6 National Datacomm Corporation +-00:80:C7 Netwave (Xircom Netwave/Netwave Airsurfer) +-00:80:C8 D-link Systems, Inc. ++00:80:C7 Xircom ++00:80:C8 D-Link Systems, Inc. + 00:80:C9 Alberta Microelectronic Centre + 00:80:CA Netcom Research Incorporated + 00:80:CB Falco Data Products +@@ -4775,26 +6056,26 @@ + 00:80:DA Bruel & Kjaer + 00:80:DB Graphon Corporation + 00:80:DC Picker International +-00:80:DD Gmx Inc/gimix +-00:80:DE Gipsi S.a. ++00:80:DD Gmx Inc/Gimix ++00:80:DE Gipsi S.A. + 00:80:DF Adc Codenoll Technology Corp. + 00:80:E0 Xtp Systems, Inc. + 00:80:E1 Stmicroelectronics +-00:80:E2 T.d.i. Co., Ltd. ++00:80:E2 T.D.I. Co., Ltd. + 00:80:E3 Coral Network Corporation + 00:80:E4 Northwest Digital Systems, Inc + 00:80:E5 Mylex Corporation + 00:80:E6 Peer Networks, Inc. + 00:80:E7 Lynwood Scientific Dev. Ltd. + 00:80:E8 Cumulus Corporatiion +-00:80:E9 Madge Networks ++00:80:E9 Madge Ltd. + 00:80:EA Adva Optical Networking Ltd. +-00:80:EB Compcontrol B.v. ++00:80:EB Compcontrol B.V. + 00:80:EC Supercomputing Solutions, Inc. + 00:80:ED Iq Technologies, Inc. + 00:80:EE Thomson Csf + 00:80:EF Rational +-00:80:F0 Kyushu Matsushita Electric Co. ++00:80:F0 Panasonic Communications Co., Ltd. + 00:80:F1 Opus Systems + 00:80:F2 Raycom Systems Inc + 00:80:F3 Sun Electronics Corp. +@@ -4814,9 +6095,9 @@ + 00:90:01 Nishimu Electronics Industries Co., Ltd. + 00:90:02 Allgon Ab + 00:90:03 Aplio +-00:90:04 3com Europe Ltd. ++00:90:04 3Com Europe Ltd. + 00:90:05 Protech Systems Co., Ltd. +-00:90:06 Hamamatsu Photonics K.k. ++00:90:06 Hamamatsu Photonics K.K. + 00:90:07 Domex Technology Corp. + 00:90:08 Hana Systems Inc. + 00:90:09 I Controls, Inc. +@@ -4839,10 +6120,10 @@ + 00:90:1A Unisphere Solutions + 00:90:1B Digital Controls + 00:90:1C Mps Software Gmbh +-00:90:1D Pec (nz) Ltd. +-00:90:1E Selesta Ingegne Ria S.p.a. ++00:90:1D Pec (Nz) Ltd. ++00:90:1E Selesta Ingegne Ria S.P.A. + 00:90:1F Adtec Productions, Inc. +-00:90:20 Philips Analytical X-ray B.v. ++00:90:20 Philips Analytical X-Ray B.V. + 00:90:21 Cisco Systems, Inc. + 00:90:22 Ivex + 00:90:23 Zilog Inc. +@@ -4855,10 +6136,10 @@ + 00:90:2A Communication Devices, Inc. + 00:90:2B Cisco Systems, Inc. + 00:90:2C Data & Control Equipment Ltd. +-00:90:2D Data Electronics (aust.) Pty, Ltd. ++00:90:2D Data Electronics (Aust.) Pty, Ltd. + 00:90:2E Namco Limited + 00:90:2F Netcore Systems, Inc. +-00:90:30 Honeywell-dating ++00:90:30 Honeywell-Dating + 00:90:31 Mysticom, Ltd. + 00:90:32 Pelcombe Group Ltd. + 00:90:33 Innovaphone Gmbh +@@ -4872,7 +6153,7 @@ + 00:90:3B Triems Research Lab, Inc. + 00:90:3C Atlantic Network Systems + 00:90:3D Biopac Systems, Inc. +-00:90:3E N.v. Philips Industrial Activities ++00:90:3E N.V. Philips Industrial Activities + 00:90:3F Aztec Radiomedia + 00:90:40 Siemens Network Convergence Llc + 00:90:41 Applied Digital Access +@@ -4887,24 +6168,24 @@ + 00:90:4A Concur System Technologies + 00:90:4B Gemtek Technology Co., Ltd. + 00:90:4C Epigram, Inc. +-00:90:4D Spec S.a. ++00:90:4D Spec S.A. + 00:90:4E Delem Bv +-00:90:4F Abb Power T&d Company, Inc. ++00:90:4F Abb Power T&D Company, Inc. + 00:90:50 Teleste Oy + 00:90:51 Ultimate Technology Corp. +-00:90:52 Selcom Elettronica S.r.l. ++00:90:52 Selcom Elettronica S.R.L. + 00:90:53 Daewoo Electronics Co., Ltd. + 00:90:54 Innovative Semiconductors, Inc + 00:90:55 Parker Hannifin Corporation Compumotor Division + 00:90:56 Telestream, Inc. + 00:90:57 Aanetcom, Inc. + 00:90:58 Ultra Electronics Ltd., Command And Control Systems +-00:90:59 Telecom Device K.k. ++00:90:59 Telecom Device K.K. + 00:90:5A Dearborn Group, Inc. + 00:90:5B Raymond And Lae Engineering + 00:90:5C Edmi + 00:90:5D Netcom Sicherheitstechnik Gmbh +-00:90:5E Rauland-borg Corporation ++00:90:5E Rauland-Borg Corporation + 00:90:5F Cisco Systems, Inc. + 00:90:60 System Create Corp. + 00:90:61 Pacific Research & Engineering Corporation +@@ -4927,13 +6208,13 @@ + 00:90:72 Simrad As + 00:90:73 Gaio Technology + 00:90:74 Argon Networks, Inc. +-00:90:75 Nec Do Brasil S.a. ++00:90:75 Nec Do Brasil S.A. + 00:90:76 Fmt Aircraft Gate Support Systems Ab + 00:90:77 Advanced Fibre Communications + 00:90:78 Mer Telemanagement Solutions, Ltd. + 00:90:79 Clearone, Inc. + 00:90:7A Spectralink Corp. +-00:90:7B E-tech, Inc. ++00:90:7B E-Tech, Inc. + 00:90:7C Digitalcast, Inc. + 00:90:7D Lake Communications + 00:90:7E Vetronix Corp. +@@ -4954,7 +6235,7 @@ + 00:90:8D Vickers Electronics Systems + 00:90:8E Nortel Networks Broadband Access + 00:90:8F Audio Codes Ltd. +-00:90:90 I-bus ++00:90:90 I-Bus + 00:90:91 Digitalscape, Inc. + 00:90:92 Cisco Systems, Inc. + 00:90:93 Nanao Corporation +@@ -4963,14 +6244,14 @@ + 00:90:96 Askey Computer Corp. + 00:90:97 Sycamore Networks + 00:90:98 Sbc Designs, Inc. +-00:90:99 Allied Telesis, K.k. ++00:90:99 Allied Telesis, K.K. + 00:90:9A One World Systems, Inc. + 00:90:9B Markpoint Ab +-00:90:9C Combox, Ltd. +-00:90:9D Gse Systems, Inc. ++00:90:9C Terayon Communications Systems ++00:90:9D Novatech Process Solutions, Llc + 00:90:9E Critical Io, Llc +-00:90:9F Digi-data Corporation +-00:90:A0 8x8 Inc. ++00:90:9F Digi-Data Corporation ++00:90:A0 8X8 Inc. + 00:90:A1 Flying Pig Systems, Ltd. + 00:90:A2 Cybertan Technology, Inc. + 00:90:A3 Corecess Inc. +@@ -4984,7 +6265,7 @@ + 00:90:AB Cisco Systems, Inc. + 00:90:AC Optivision, Inc. + 00:90:AD Aspect Electronics, Inc. +-00:90:AE Italtel S.p.a. ++00:90:AE Italtel S.P.A. + 00:90:AF J. Morita Mfg. Corp. + 00:90:B0 Vadem + 00:90:B1 Cisco Systems, Inc. +@@ -5000,9 +6281,9 @@ + 00:90:BB Tainet Communication System Corp. + 00:90:BC Telemann Co., Ltd. + 00:90:BD Omnia Communications, Inc. +-00:90:BE Ibc/integrated Business Computers ++00:90:BE Ibc/Integrated Business Computers + 00:90:BF Cisco Systems, Inc. +-00:90:C0 K.j. Law Engineers, Inc. ++00:90:C0 K.J. Law Engineers, Inc. + 00:90:C1 Peco Ii, Inc. + 00:90:C2 Jk Microsystems, Inc. + 00:90:C3 Topic Semiconductor Corp. +@@ -5010,16 +6291,16 @@ + 00:90:C5 Internet Magic, Inc. + 00:90:C6 Optim Systems, Inc. + 00:90:C7 Icom Inc. +-00:90:C8 Waverider Communications (canada) Inc. +-00:90:C9 Productivity Enhancement Products., Inc. ++00:90:C8 Waverider Communications (Canada) Inc. ++00:90:C9 Dpac Technologies + 00:90:CA Accord Video Telecommunications, Ltd. + 00:90:CB Wireless Online, Inc. + 00:90:CC Planet Communications, Inc. +-00:90:CD Ent-empresa Nacional De Telecommunicacoes, S.a. ++00:90:CD Ent-Empresa Nacional De Telecommunicacoes, S.A. + 00:90:CE Tetra Gmbh + 00:90:CF Nortel + 00:90:D0 Thomson Belgium +-00:90:D1 LeArtery SyncByAir LN101 ++00:90:D1 Leichu Enterprise Co., Ltd. + 00:90:D2 Artel Video Systems + 00:90:D3 Giesecke & Devrient Gmbh + 00:90:D4 Bindview Development Corp. +@@ -5035,7 +6316,7 @@ + 00:90:DE Cardkey Systems, Inc. + 00:90:DF Mitsubishi Chemical America, Inc. + 00:90:E0 Systran Corp. +-00:90:E1 Telena S.p.a. ++00:90:E1 Telena S.P.A. + 00:90:E2 Distributed Processing Technology + 00:90:E3 Avex Electronics Inc. + 00:90:E4 Nec America, Inc. +@@ -5064,12 +6345,12 @@ + 00:90:FB Portwell, Inc. + 00:90:FC Network Computing Devices + 00:90:FD Coppercom, Inc. +-00:90:FE Elecom Co., Ltd. (laneed Div.) ++00:90:FE Elecom Co., Ltd. (Laneed Div.) + 00:90:FF Tellus Technology Inc. + 00:91:D6 Crystal Group, Inc. + 00:9D:8E Cardiac Recorders, Inc. + 00:A0:00 Centillion Networks, Inc. +-00:A0:01 Watkins-johnson Company ++00:A0:01 Watkins-Johnson Company + 00:A0:02 Leeds & Northrup Australia Pty Ltd + 00:A0:03 Staefa Control System + 00:A0:04 Netpower, Inc. +@@ -5078,7 +6359,7 @@ + 00:A0:07 Apexx Technology, Inc. + 00:A0:08 Netcorp + 00:A0:09 Whitetree Network +-00:A0:0A R.d.c. Communication ++00:A0:0A R.D.C. Communication + 00:A0:0B Computex Co., Ltd. + 00:A0:0C Kingmax Technology, Inc. + 00:A0:0D The Panda Project +@@ -5086,7 +6367,7 @@ + 00:A0:0F Broadband Technologies + 00:A0:10 Syslogic Datentechnik Ag + 00:A0:11 Mutoh Industries Ltd. +-00:A0:12 B.a.t.m. Advanced Technologies ++00:A0:12 B.A.T.M. Advanced Technologies + 00:A0:13 Teltrend Ltd. + 00:A0:14 Csir + 00:A0:15 Wyle +@@ -5100,13 +6381,13 @@ + 00:A0:1D Sixnet + 00:A0:1E Est Corporation + 00:A0:1F Tricord Systems, Inc. +-00:A0:20 Citicorp/tti ++00:A0:20 Citicorp/Tti + 00:A0:21 General Dynamics- + 00:A0:22 Centre For Development Of Advanced Computing + 00:A0:23 Applied Creative Technology, Inc. +-00:A0:24 3com Corporation ++00:A0:24 3Com Corporation + 00:A0:25 Redcom Labs Inc. +-00:A0:26 Teldat, S.a. ++00:A0:26 Teldat, S.A. + 00:A0:27 Firepower Systems, Inc. + 00:A0:28 Conner Peripherals + 00:A0:29 Coulter Corporation +@@ -5116,7 +6397,7 @@ + 00:A0:2D 1394 Trade Association + 00:A0:2E Brand Communications, Ltd. + 00:A0:2F Pirelli Cavi +-00:A0:30 Captor Nv/sa ++00:A0:30 Captor Nv/Sa + 00:A0:31 Hazeltine Corporation, Ms 1-17 + 00:A0:32 Ges Singapore Pte. Ltd. + 00:A0:33 Imc Mebsysteme Gmbh +@@ -5128,15 +6409,15 @@ + 00:A0:39 Ross Technology, Inc. + 00:A0:3A Kubotek Corporation + 00:A0:3B Toshin Electric Co., Ltd. +-00:A0:3C Eg&g Nuclear Instruments ++00:A0:3C Eg&G Nuclear Instruments + 00:A0:3D Opto-22 + 00:A0:3E Atm Forum + 00:A0:3F Computer Society Microprocessor & Microprocessor Standards C + 00:A0:40 Apple Computer +-00:A0:41 Leybold-inficon ++00:A0:41 Leybold-Inficon + 00:A0:42 Spur Products Corp. + 00:A0:43 American Technology Labs, Inc. +-00:A0:44 Ntt Intelligent Technology ++00:A0:44 Ntt It Co., Ltd. + 00:A0:45 Phoenix Contact Gmbh & Co. + 00:A0:46 Scitex Corp. Ltd. + 00:A0:47 Integrated Fitness Corp. +@@ -5153,7 +6434,7 @@ + 00:A0:52 Stanilite Electronics Pty. Ltd + 00:A0:53 Compact Devices, Inc. + 00:A0:54 Private +-00:A0:55 Linktech, Inc. ++00:A0:55 Data Device Corporation + 00:A0:56 Micropross + 00:A0:57 Lancom Systems Gmbh + 00:A0:58 Glory, Ltd. +@@ -5168,20 +6449,20 @@ + 00:A0:61 Puritan Bennett + 00:A0:62 Aes Prodata + 00:A0:63 Jrl Systems, Inc. +-00:A0:64 Kvb/analect +-00:A0:65 Nexland, Inc. ++00:A0:64 Kvb/Analect ++00:A0:65 Symantec Corporation + 00:A0:66 Isa Co., Ltd. + 00:A0:67 Network Services Group + 00:A0:68 Bhp Limited +-00:A0:69 Truetime +-00:A0:6A Verilink Corp. ++00:A0:69 Symmetricom, Inc. ++00:A0:6A Verilink Corporation + 00:A0:6B Dms Dorsch Mikrosystem Gmbh + 00:A0:6C Shindengen Electric Mfg. Co., Ltd. + 00:A0:6D Mannesmann Tally Corporation + 00:A0:6E Austron, Inc. + 00:A0:6F The Appcon Group, Inc. + 00:A0:70 Coastcom +-00:A0:71 Video Lottery Technologies,inc ++00:A0:71 Video Lottery Technologies,Inc + 00:A0:72 Ovation Systems Ltd. + 00:A0:73 Com21, Inc. + 00:A0:74 Perception Technology +@@ -5189,16 +6470,16 @@ + 00:A0:76 Cardware Lab, Inc. + 00:A0:77 Fujitsu Nexion, Inc. + 00:A0:78 Marconi Communications +-00:A0:79 Alps Electric (usa), Inc. ++00:A0:79 Alps Electric (Usa), Inc. + 00:A0:7A Advanced Peripherals Technologies, Inc. + 00:A0:7B Dawn Computer Incorporation + 00:A0:7C Tonyang Nylon Co., Ltd. + 00:A0:7D Seeq Technology, Inc. + 00:A0:7E Avid Technology, Inc. +-00:A0:7F Gsm-syntel, Ltd. +-00:A0:80 Antares Microsystems ++00:A0:7F Gsm-Syntel, Ltd. ++00:A0:80 Sbe, Inc. + 00:A0:81 Alcatel Data Networks +-00:A0:82 Nkt Elektronik A/s ++00:A0:82 Nkt Elektronik A/S + 00:A0:83 Asimmphony Turkey + 00:A0:84 Dataplex Pty. Ltd. + 00:A0:85 Private +@@ -5215,13 +6496,13 @@ + 00:A0:90 Timestep Corporation + 00:A0:91 Applicom International + 00:A0:92 H. Bollmann Manufacturers, Ltd +-00:A0:93 B/e Aerospace, Inc. ++00:A0:93 B/E Aerospace, Inc. + 00:A0:94 Comsat Corporation + 00:A0:95 Acacia Networks, Inc. + 00:A0:96 Mitumi Electric Co., Ltd. + 00:A0:97 Jc Information Systems + 00:A0:98 Network Appliance Corp. +-00:A0:99 K-net Ltd. ++00:A0:99 K-Net Ltd. + 00:A0:9A Nihon Kohden America + 00:A0:9B Qpsx Communications, Ltd. + 00:A0:9C Xyplex, Inc. +@@ -5230,26 +6511,26 @@ + 00:A0:9F Commvision Corp. + 00:A0:A0 Compact Data, Ltd. + 00:A0:A1 Epic Data Inc. +-00:A0:A2 Digicom S.p.a. ++00:A0:A2 Digicom S.P.A. + 00:A0:A3 Reliable Power Meters + 00:A0:A4 Micros Systems, Inc. + 00:A0:A5 Teknor Microsysteme, Inc. +-00:A0:A6 M.i. Systems, K.k. ++00:A0:A6 M.I. Systems, K.K. + 00:A0:A7 Vorax Corporation + 00:A0:A8 Renex Corporation +-00:A0:A9 Gn Nettest (canada) Navtel Division ++00:A0:A9 Gn Nettest (Canada) Navtel Division + 00:A0:AA Spacelabs Medical + 00:A0:AB Netcs Informationstechnik Gmbh + 00:A0:AC Gilat Satellite Networks, Ltd. + 00:A0:AD Marconi Spa + 00:A0:AE Nucom Systems, Inc. + 00:A0:AF Wms Industries +-00:A0:B0 I-o Data Device, Inc. ++00:A0:B0 I-O Data Device, Inc. + 00:A0:B1 First Virtual Corporation + 00:A0:B2 Shima Seiki + 00:A0:B3 Zykronix + 00:A0:B4 Texas Microsystems, Inc. +-00:A0:B5 3h Technology ++00:A0:B5 3H Technology + 00:A0:B6 Sanritz Automation Co., Ltd. + 00:A0:B7 Cordant, Inc. + 00:A0:B8 Symbios Logic Inc. +@@ -5257,12 +6538,12 @@ + 00:A0:BA Patton Electronics Co. + 00:A0:BB Hilan Gmbh + 00:A0:BC Viasat, Incorporated +-00:A0:BD I-tech Corp. ++00:A0:BD I-Tech Corp. + 00:A0:BE Integrated Circuit Systems, Inc. Communications Group + 00:A0:BF Wireless Data Group Motorola + 00:A0:C0 Digital Link Corp. + 00:A0:C1 Ortivus Medical Ab +-00:A0:C2 R.a. Systems Co., Ltd. ++00:A0:C2 R.A. Systems Co., Ltd. + 00:A0:C3 Unicomputer Gmbh + 00:A0:C4 Cristie Electronics Ltd. + 00:A0:C5 Zyxel Communication +@@ -5272,7 +6553,7 @@ + 00:A0:C9 Intel Corporation - Hf1-06 + 00:A0:CA Fujitsu Denso Ltd. + 00:A0:CB Ark Telecommunications, Inc. +-00:A0:CC Lite-on Communications, Inc. ++00:A0:CC Lite-On Communications, Inc. + 00:A0:CD Dr. Johannes Heidenhain Gmbh + 00:A0:CE Astrocom Corporation + 00:A0:CF Sotas, Inc. +@@ -5288,7 +6569,7 @@ + 00:A0:D9 Convex Computer Corporation + 00:A0:DA Integrated Systems Technology, Inc. + 00:A0:DB Fisher & Paykel Production +-00:A0:DC O.n. Electronic Co., Ltd. ++00:A0:DC O.N. Electronic Co., Ltd. + 00:A0:DD Azonix Corporation + 00:A0:DE Yamaha Corporation + 00:A0:DF Sts Technologies, Inc. +@@ -5303,7 +6584,7 @@ + 00:A0:E8 Reuters Holdings Plc + 00:A0:E9 Electronic Retailing Systems International + 00:A0:EA Ethercom Corp. +-00:A0:EB Fastcomm Communications Corp. ++00:A0:EB Encore Networks + 00:A0:EC Transmitton Ltd. + 00:A0:ED Pri Automation + 00:A0:EE Nashoba Networks +@@ -5315,8 +6596,8 @@ + 00:A0:F4 Ge + 00:A0:F5 Radguard Ltd. + 00:A0:F6 Autogas Systems Inc. +-00:A0:F7 V.i Computer Corp. +-00:A0:F8 Symbol Spectrum24 ++00:A0:F7 V.I Computer Corp. ++00:A0:F8 Symbol Technologies, Inc. + 00:A0:F9 Bintec Communications Gmbh + 00:A0:FA Marconi Communication Gmbh + 00:A0:FB Toray Engineering Co., Ltd. +@@ -5327,10 +6608,10 @@ + 00:AA:00 Intel Corporation + 00:AA:01 Intel Corporation + 00:AA:02 Intel Corporation +-00:AA:3C Olivetti Telecom Spa (olteco) ++00:AA:3C Olivetti Telecom Spa (Olteco) + 00:B0:09 Grass Valley Group + 00:B0:17 Infogear Technology Corp. +-00:B0:19 Casi-rusco ++00:B0:19 Casi-Rusco + 00:B0:1C Westport Technologies + 00:B0:1E Rantic Labs, Inc. + 00:B0:2A Orsys Gmbh +@@ -5342,14 +6623,14 @@ + 00:B0:64 Cisco Systems, Inc. + 00:B0:69 Honewell Oy + 00:B0:6D Jones Futurex Inc. +-00:B0:80 Mannesmann Ipulsys B.v. ++00:B0:80 Mannesmann Ipulsys B.V. + 00:B0:86 Locsoft Limited + 00:B0:8E Cisco Systems, Inc. + 00:B0:91 Transmeta Corp. + 00:B0:94 Alaris, Inc. + 00:B0:9A Morrow Technologies Corp. + 00:B0:9D Point Grey Research Inc. +-00:B0:AC Siae-microelettronica S.p.a. ++00:B0:AC Siae-Microelettronica S.P.A. + 00:B0:AE Symmetricom + 00:B0:B3 Xstreamis Plc + 00:B0:C2 Cisco Systems, Inc. +@@ -5364,19 +6645,19 @@ + 00:B0:F0 Caly Networks + 00:B0:F5 Networth Technologies, Inc. + 00:BB:01 Octothorpe Corp. +-00:BB:F0 Ungermann-bass Inc. ++00:BB:F0 Ungermann-Bass Inc. + 00:C0:00 Lanoptics, Ltd. + 00:C0:01 Diatek Patient Managment + 00:C0:02 Sercomm Corporation + 00:C0:03 Globalnet Communications +-00:C0:04 Japan Business Computer Co.ltd ++00:C0:04 Japan Business Computer Co.Ltd + 00:C0:05 Livingston Enterprises, Inc. + 00:C0:06 Nippon Avionics Co., Ltd. + 00:C0:07 Pinnacle Data Systems, Inc. + 00:C0:08 Seco Srl +-00:C0:09 Kt Technology (s) Pte Ltd ++00:C0:09 Kt Technology (S) Pte Ltd + 00:C0:0A Micro Craft +-00:C0:0B Norcontrol A.s. ++00:C0:0B Norcontrol A.S. + 00:C0:0C Relia Technolgies + 00:C0:0D Advanced Logic Research, Inc. + 00:C0:0E Psitech, Inc. +@@ -5385,7 +6666,7 @@ + 00:C0:11 Interactive Computing Devices + 00:C0:12 Netspan Corporation + 00:C0:13 Netrix +-00:C0:14 Telematics Calabasas Int'l,inc ++00:C0:14 Telematics Calabasas Int'l,Inc + 00:C0:15 New Media Corporation + 00:C0:16 Electronic Theatre Controls + 00:C0:17 Forte Networks +@@ -5396,7 +6677,7 @@ + 00:C0:1C Interlink Communications Ltd. + 00:C0:1D Grand Junction Networks, Inc. + 00:C0:1E La Francaise Des Jeux +-00:C0:1F S.e.r.c.e.l. ++00:C0:1F S.E.R.C.E.L. + 00:C0:20 Arco Electronic, Control Ltd. + 00:C0:21 Netexpress + 00:C0:22 Lasermaster Technologies, Inc. +@@ -5415,7 +6696,7 @@ + 00:C0:2F Okuma Corporation + 00:C0:30 Integrated Engineering B. V. + 00:C0:31 Design Research Systems, Inc. +-00:C0:32 I-cubed Limited ++00:C0:32 I-Cubed Limited + 00:C0:33 Telebit Communications Aps + 00:C0:34 Transaction Network + 00:C0:35 Quintar Company +@@ -5423,9 +6704,9 @@ + 00:C0:37 Dynatem + 00:C0:38 Raster Image Processing System + 00:C0:39 Tdk Semiconductor Corporation +-00:C0:3A Men-mikro Elektronik Gmbh ++00:C0:3A Men-Mikro Elektronik Gmbh + 00:C0:3B Multiaccess Computing Corp. +-00:C0:3C Tower Tech S.r.l. ++00:C0:3C Tower Tech S.R.L. + 00:C0:3D Wiesemann & Theis Gmbh + 00:C0:3E Fa. Gebr. Heller Gmbh + 00:C0:3F Stores Automated Systems, Inc. +@@ -5438,16 +6719,16 @@ + 00:C0:46 Kemitron Ltd. + 00:C0:47 Unimicro Systems, Inc. + 00:C0:48 Bay Technical Associates +-00:C0:49 U.s. Robotics, Inc. ++00:C0:49 U.S. Robotics, Inc. + 00:C0:4A Group 2000 Ag + 00:C0:4B Creative Microsystems + 00:C0:4C Department Of Foreign Affairs + 00:C0:4D Mitec, Inc. + 00:C0:4E Comtrol Corporation + 00:C0:4F Dell Computer Corporation +-00:C0:50 Toyo Denki Seizo K.k. ++00:C0:50 Toyo Denki Seizo K.K. + 00:C0:51 Advanced Integration Research +-00:C0:52 Burr-brown ++00:C0:52 Burr-Brown + 00:C0:53 Davox Corporation + 00:C0:54 Network Peripherals, Ltd. + 00:C0:55 Modular Computing Technologies +@@ -5458,9 +6739,9 @@ + 00:C0:5A Semaphore Communications Corp. + 00:C0:5B Networks Northwest, Inc. + 00:C0:5C Elonex Plc +-00:C0:5D L&n Technologies +-00:C0:5E Vari-lite, Inc. +-00:C0:5F Fine-pal Company Limited ++00:C0:5D L&N Technologies ++00:C0:5E Vari-Lite, Inc. ++00:C0:5F Fine-Pal Company Limited + 00:C0:60 Id Scandinavia As + 00:C0:61 Solectek Corporation + 00:C0:62 Impulse Technology +@@ -5470,24 +6751,24 @@ + 00:C0:66 Docupoint, Inc. + 00:C0:67 United Barcode Industries + 00:C0:68 Philip Drake Electronics Ltd. +-00:C0:69 Adaptive Broadband Corporation +-00:C0:6A Zahner-elektrik Gmbh & Co. Kg ++00:C0:69 Axxcelera Broadband Wireless ++00:C0:6A Zahner-Elektrik Gmbh & Co. Kg + 00:C0:6B Osi Plus Corporation + 00:C0:6C Svec Computer Corp. + 00:C0:6D Boca Research, Inc. + 00:C0:6E Haft Technology, Inc. + 00:C0:6F Komatsu Ltd. +-00:C0:70 Sectra Secure-transmission Ab ++00:C0:70 Sectra Secure-Transmission Ab + 00:C0:71 Areanex Communications, Inc. + 00:C0:72 Knx Ltd. + 00:C0:73 Xedia Corporation + 00:C0:74 Toyoda Automatic Loom + 00:C0:75 Xante Corporation +-00:C0:76 I-data International A-s ++00:C0:76 I-Data International A-S + 00:C0:77 Daewoo Telecom Ltd. + 00:C0:78 Computer Systems Engineering +-00:C0:79 Fonsys Co.,ltd. +-00:C0:7A Priva B.v. ++00:C0:79 Fonsys Co.,Ltd. ++00:C0:7A Priva B.V. + 00:C0:7B Ascend Communications, Inc. + 00:C0:7C Hightech Information + 00:C0:7D Risc Developments Ltd. +@@ -5509,7 +6790,7 @@ + 00:C0:8D Tronix Product Development + 00:C0:8E Network Information Technology + 00:C0:8F Matsushita Electric Works, Ltd +-00:C0:90 Praim S.r.l. ++00:C0:90 Praim S.R.L. + 00:C0:91 Jabil Circuit, Inc. + 00:C0:92 Mennen Medical Inc. + 00:C0:93 Alta Research Corp. +@@ -5518,16 +6799,16 @@ + 00:C0:96 Tamura Corporation + 00:C0:97 Archipel Sa + 00:C0:98 Chuntex Electronic Co., Ltd. +-00:C0:99 Yoshiki Industrial Co.,ltd. ++00:C0:99 Yoshiki Industrial Co.,Ltd. + 00:C0:9A Photonics Corporation +-00:C0:9B Reliance Comm/tec, R-tec ++00:C0:9B Reliance Comm/Tec, R-Tec + 00:C0:9C Toa Electronic Ltd. + 00:C0:9D Distributed Systems Int'l, Inc + 00:C0:9E Cache Computers, Inc. + 00:C0:9F Quanta Computer, Inc. + 00:C0:A0 Advance Micro Research, Inc. + 00:C0:A1 Tokyo Denshi Sekei Co. +-00:C0:A2 Intermedium A/s ++00:C0:A2 Intermedium A/S + 00:C0:A3 Dual Enterprises Corporation + 00:C0:A4 Unigraf Oy + 00:C0:A5 Dickens Data Systems +@@ -5541,24 +6822,24 @@ + 00:C0:AD Marben Communication Systems + 00:C0:AE Towercom Co. Inc. Dba Pc House + 00:C0:AF Teklogix Inc. +-00:C0:B0 Gcc Technologies,inc. ++00:C0:B0 Gcc Technologies,Inc. + 00:C0:B1 Genius Net Co. + 00:C0:B2 Norand Corporation + 00:C0:B3 Comstat Datacomm Corporation + 00:C0:B4 Myson Technology, Inc. +-00:C0:B5 Corporate Network Systems,inc. +-00:C0:B6 Snap Appliances, Inc. ++00:C0:B5 Corporate Network Systems,Inc. ++00:C0:B6 Snap Appliance, Inc. + 00:C0:B7 American Power Conversion Corp + 00:C0:B8 Fraser's Hill Ltd. + 00:C0:B9 Funk Software, Inc. + 00:C0:BA Netvantage + 00:C0:BB Forval Creative, Inc. +-00:C0:BC Telecom Australia/cssc ++00:C0:BC Telecom Australia/Cssc + 00:C0:BD Inex Technologies, Inc. + 00:C0:BE Alcatel - Sel + 00:C0:BF Technology Concepts, Ltd. + 00:C0:C0 Shore Microsystems, Inc. +-00:C0:C1 Quad/graphics, Inc. ++00:C0:C1 Quad/Graphics, Inc. + 00:C0:C2 Infinite Networks Ltd. + 00:C0:C3 Acuson Computed Sonography + 00:C0:C4 Computer Operational +@@ -5570,7 +6851,7 @@ + 00:C0:CA Alfa, Inc. + 00:C0:CB Control Technology Corporation + 00:C0:CC Telesciences Co Systems, Inc. +-00:C0:CD Comelta, S.a. ++00:C0:CD Comelta, S.A. + 00:C0:CE Cei Systems & Engineering Pte + 00:C0:CF Imatran Voima Oy + 00:C0:D0 Ratoc System Inc. +@@ -5584,7 +6865,7 @@ + 00:C0:D8 Universal Data Systems + 00:C0:D9 Quinte Network Confidentiality + 00:C0:DA Nice Systems Ltd. +-00:C0:DB Ipc Corporation (pte) Ltd. ++00:C0:DB Ipc Corporation (Pte) Ltd. + 00:C0:DC Eos Technologies, Inc. + 00:C0:DD Qlogic Corporation + 00:C0:DE Zcomm, Inc. +@@ -5594,7 +6875,7 @@ + 00:C0:E2 Calcomp, Inc. + 00:C0:E3 Ositech Communications, Inc. + 00:C0:E4 Siemens Building +-00:C0:E5 Gespac, S.a. ++00:C0:E5 Gespac, S.A. + 00:C0:E6 Verilink Corporation + 00:C0:E7 Fiberdata Ab + 00:C0:E8 Plexcom, Inc. +@@ -5633,7 +6914,7 @@ + 00:D0:07 Mic Associates, Inc. + 00:D0:08 Mactell Corporation + 00:D0:09 Hsing Tech. Enterprise Co. Ltd +-00:D0:0A Lanaccess Telecom S.a. ++00:D0:0A Lanaccess Telecom S.A. + 00:D0:0B Rhk Technology, Inc. + 00:D0:0C Snijder Micro Systems + 00:D0:0D Micromeritics Instrument +@@ -5649,7 +6930,7 @@ + 00:D0:17 Syntech Information Co., Ltd. + 00:D0:18 Qwes. Com, Inc. + 00:D0:19 Dainippon Screen Corporate +-00:D0:1A Urmet Sud S.p.a. ++00:D0:1A Urmet Sud S.P.A. + 00:D0:1B Mimaki Engineering Co., Ltd. + 00:D0:1C Sbs Technologies, + 00:D0:1D Furuno Electric Co., Ltd. +@@ -5665,7 +6946,7 @@ + 00:D0:27 Applied Automation, Inc. + 00:D0:28 Omneon Video Networks + 00:D0:29 Wakefern Food Corporation +-00:D0:2A Flexion Systems ++00:D0:2A Voxent Systems Ltd. + 00:D0:2B Jetcell, Inc. + 00:D0:2C Campbell Scientific, Inc. + 00:D0:2D Ademco +@@ -5678,13 +6959,13 @@ + 00:D0:34 Ormec Systems Corp. + 00:D0:35 Behavior Tech. Computer Corp. + 00:D0:36 Technology Atlanta Corp. +-00:D0:37 Philips-dvs-lo Bdr ++00:D0:37 Philips-Dvs-Lo Bdr + 00:D0:38 Fivemere, Ltd. + 00:D0:39 Utilicom, Inc. + 00:D0:3A Zoneworx, Inc. + 00:D0:3B Vision Products Pty. Ltd. + 00:D0:3C Vieo, Inc. +-00:D0:3D Private ++00:D0:3D Galileo Technology, Ltd. + 00:D0:3E Rocketchips, Inc. + 00:D0:3F American Communication + 00:D0:40 Sysmate Co., Ltd. +@@ -5698,7 +6979,7 @@ + 00:D0:48 Ecton, Inc. + 00:D0:49 Impresstek Co., Ltd. + 00:D0:4A Presence Technology Gmbh +-00:D0:4B La Cie Group S.a. ++00:D0:4B La Cie Group S.A. + 00:D0:4C Eurotel Telecom Ltd. + 00:D0:4D Div Of Research & Statistics + 00:D0:4E Logibag +@@ -5708,7 +6989,7 @@ + 00:D0:52 Ascend Communications, Inc. + 00:D0:53 Connected Systems + 00:D0:54 Sas Institute Inc. +-00:D0:55 Kathrein-werke Kg ++00:D0:55 Kathrein-Werke Kg + 00:D0:56 Somat Corporation + 00:D0:57 Ultrak, Inc. + 00:D0:58 Cisco Systems, Inc. +@@ -5747,7 +7028,7 @@ + 00:D0:79 Cisco Systems, Inc. + 00:D0:7A Amaquest Computer Corp. + 00:D0:7B Comcam International Ltd. +-00:D0:7C Koyo Electronics Inc. Co.,ltd. ++00:D0:7C Koyo Electronics Inc. Co.,Ltd. + 00:D0:7D Cosine Communications + 00:D0:7E Keycorp Ltd. + 00:D0:7F Strategy & Technology, Limited +@@ -5759,7 +7040,7 @@ + 00:D0:85 Otis Elevator Company + 00:D0:86 Foveon, Inc. + 00:D0:87 Microfirst Inc. +-00:D0:88 Mainsail Networks, Inc. ++00:D0:88 Terayon Communications Systems + 00:D0:89 Dynacolor, Inc. + 00:D0:8A Photron Usa + 00:D0:8B Adva Limited +@@ -5773,7 +7054,7 @@ + 00:D0:93 Tq - Components Gmbh + 00:D0:94 Timeline Vista, Inc. + 00:D0:95 Xylan Corporation +-00:D0:96 3com Europe Ltd. ++00:D0:96 3Com Europe Ltd. + 00:D0:97 Cisco Systems, Inc. + 00:D0:98 Photon Dynamics Canada Inc. + 00:D0:99 Elcard Oy +@@ -5781,7 +7062,7 @@ + 00:D0:9B Spectel Ltd. + 00:D0:9C Kapadia Communications + 00:D0:9D Veris Industries +-00:D0:9E 2wire, Inc. ++00:D0:9E 2Wire, Inc. + 00:D0:9F Novtek Test Systems + 00:D0:A0 Mips Denmark + 00:D0:A1 Oskar Vierling Gmbh + Co. Kg +@@ -5798,7 +7079,7 @@ + 00:D0:AC Grayson Wireless + 00:D0:AD Tl Industries + 00:D0:AE Oresis Communications, Inc. +-00:D0:AF Cutler-hammer, Inc. ++00:D0:AF Cutler-Hammer, Inc. + 00:D0:B0 Bitswitch Ltd. + 00:D0:B1 Omega Electronics Sa + 00:D0:B2 Xiotech Corporation +@@ -5807,7 +7088,7 @@ + 00:D0:B5 Ipricot Formerly Dotcom + 00:D0:B6 Crescent Networks, Inc. + 00:D0:B7 Intel Corporation +-00:D0:B8 Iomega Corp. ++00:D0:B8 Iomega Corporation + 00:D0:B9 Microtek International, Inc. + 00:D0:BA Cisco Systems, Inc. + 00:D0:BB Cisco Systems, Inc. +@@ -5823,7 +7104,7 @@ + 00:D0:C5 Computational Systems, Inc. + 00:D0:C6 Thomas & Betts Corp. + 00:D0:C7 Pathway, Inc. +-00:D0:C8 I/o Consulting A/s ++00:D0:C8 I/O Consulting A/S + 00:D0:C9 Advantech Co., Ltd. + 00:D0:CA Intrinsyc Software Inc. + 00:D0:CB Dasan Co., Ltd. +@@ -5835,11 +7116,11 @@ + 00:D0:D1 Sirocco Systems, Inc. + 00:D0:D2 Epilog Corporation + 00:D0:D3 Cisco Systems, Inc. +-00:D0:D4 V-bits, Inc. ++00:D0:D4 V-Bits, Inc. + 00:D0:D5 Grundig Ag + 00:D0:D6 Aethra Telecomunicazioni +-00:D0:D7 B2c2, Inc. +-00:D0:D8 3com Corporation ++00:D0:D7 B2C2, Inc. ++00:D0:D8 3Com Corporation + 00:D0:D9 Dedicated Microcomputers + 00:D0:DA Taicom Data Systems Co., Ltd. + 00:D0:DB Mcquay International +@@ -5850,7 +7131,7 @@ + 00:D0:E0 Dooin Electronics Co. + 00:D0:E1 Avionitek Israel Inc. + 00:D0:E2 Mrt Micro, Inc. +-00:D0:E3 Ele-chem Engineering Co., Ltd. ++00:D0:E3 Ele-Chem Engineering Co., Ltd. + 00:D0:E4 Cisco Systems, Inc. + 00:D0:E5 Solidum Systems Corp. + 00:D0:E6 Ibond Inc. +@@ -5876,30 +7157,30 @@ + 00:D0:FA Racal Guardata + 00:D0:FB Tek Microsystems, Incorporated + 00:D0:FC Granite Microsystems +-00:D0:FD Optima Tele.com, Inc. ++00:D0:FD Optima Tele.Com, Inc. + 00:D0:FE Astral Point + 00:D0:FF Cisco Systems, Inc. +-00:DD:00 Ungermann-bass Inc. +-00:DD:01 Ungermann-bass Inc. +-00:DD:02 Ungermann-bass Inc. +-00:DD:03 Ungermann-bass Inc. +-00:DD:04 Ungermann-bass Inc. +-00:DD:05 Ungermann-bass Inc. +-00:DD:06 Ungermann-bass Inc. +-00:DD:07 Ungermann-bass Inc. +-00:DD:08 Ungermann-bass Inc. +-00:DD:09 Ungermann-bass Inc. +-00:DD:0A Ungermann-bass Inc. +-00:DD:0B Ungermann-bass Inc. +-00:DD:0C Ungermann-bass Inc. +-00:DD:0D Ungermann-bass Inc. +-00:DD:0E Ungermann-bass Inc. +-00:DD:0F Ungermann-bass Inc. ++00:DD:00 Ungermann-Bass Inc. ++00:DD:01 Ungermann-Bass Inc. ++00:DD:02 Ungermann-Bass Inc. ++00:DD:03 Ungermann-Bass Inc. ++00:DD:04 Ungermann-Bass Inc. ++00:DD:05 Ungermann-Bass Inc. ++00:DD:06 Ungermann-Bass Inc. ++00:DD:07 Ungermann-Bass Inc. ++00:DD:08 Ungermann-Bass Inc. ++00:DD:09 Ungermann-Bass Inc. ++00:DD:0A Ungermann-Bass Inc. ++00:DD:0B Ungermann-Bass Inc. ++00:DD:0C Ungermann-Bass Inc. ++00:DD:0D Ungermann-Bass Inc. ++00:DD:0E Ungermann-Bass Inc. ++00:DD:0F Ungermann-Bass Inc. + 00:E0:00 Fujitsu, Ltd + 00:E0:01 Strand Lighting Limited + 00:E0:02 Crossroads Systems, Inc. + 00:E0:03 Nokia Wireless Business Commun +-00:E0:04 Pmc-sierra, Inc. ++00:E0:04 Pmc-Sierra, Inc. + 00:E0:05 Technical Corp. + 00:E0:06 Silicon Integrated Sys. Corp. + 00:E0:07 Network Alchemy Ltd. +@@ -5911,8 +7192,8 @@ + 00:E0:0D Radiant Systems + 00:E0:0E Avalon Imaging Systems, Inc. + 00:E0:0F Shanghai Baud Data +-00:E0:10 Hess Sb-automatenbau Gmbh +-00:E0:11 Uniden San Diego R&d Center, Inc. ++00:E0:10 Hess Sb-Automatenbau Gmbh ++00:E0:11 Uniden San Diego R&D Center, Inc. + 00:E0:12 Pluto Technologies International Inc. + 00:E0:13 Eastern Electronic Co., Ltd. + 00:E0:14 Cisco Systems, Inc. +@@ -5929,24 +7210,24 @@ + 00:E0:1F Avidia Systems, Inc. + 00:E0:20 Tecnomen Oy + 00:E0:21 Freegate Corp. +-00:E0:22 Medialight, Inc. ++00:E0:22 Analog Devices Inc. + 00:E0:23 Telrad + 00:E0:24 Gadzoox Networks + 00:E0:25 Dit Co., Ltd. + 00:E0:26 Eastman Kodak Co. + 00:E0:27 Dux, Inc. + 00:E0:28 Aptix Corporation +-00:E0:29 OEM OEM ++00:E0:29 Standard Microsystems Corp. + 00:E0:2A Tandberg Television As + 00:E0:2B Extreme Networks + 00:E0:2C Ast Computer + 00:E0:2D Innomedialogic, Inc. + 00:E0:2E Spc Electronics Corporation +-00:E0:2F Mcns Holdings, L.p. ++00:E0:2F Mcns Holdings, L.P. + 00:E0:30 Melita International Corp. + 00:E0:31 Hagiwara Electric Co., Ltd. + 00:E0:32 Misys Financial Systems, Ltd. +-00:E0:33 E.e.p.d. Gmbh ++00:E0:33 E.E.P.D. Gmbh + 00:E0:34 Cisco Systems, Inc. + 00:E0:35 Loughborough Sound Images, Plc + 00:E0:36 Pioneer Corporation +@@ -5956,7 +7237,7 @@ + 00:E0:3A Cabletron Systems, Inc. + 00:E0:3B Prominet Corporation + 00:E0:3C Advansys +-00:E0:3D Focon Electronic Systems A/s ++00:E0:3D Focon Electronic Systems A/S + 00:E0:3E Alfatech, Inc. + 00:E0:3F Jaton Corporation + 00:E0:40 Deskstation Technology, Inc. +@@ -5980,17 +7261,17 @@ + 00:E0:52 Foundry Networks, Inc. + 00:E0:53 Cellport Labs, Inc. + 00:E0:54 Kodai Hitec Co., Ltd. +-00:E0:55 Ingenieria Electronica Comercial Inelcom S.a. ++00:E0:55 Ingenieria Electronica Comercial Inelcom S.A. + 00:E0:56 Holontech Corporation + 00:E0:57 Han Microtelecom. Co., Ltd. +-00:E0:58 Phase One Denmark A/s ++00:E0:58 Phase One Denmark A/S + 00:E0:59 Controlled Environments, Ltd. + 00:E0:5A Galea Network Security + 00:E0:5B West End Systems Corp. + 00:E0:5C Matsushita Kotobuki Electronics Industries, Ltd. + 00:E0:5D Unitec Co., Ltd. + 00:E0:5E Japan Aviation Electronics Industry, Ltd. +-00:E0:5F E-net, Inc. ++00:E0:5F E-Net, Inc. + 00:E0:60 Sherwood + 00:E0:61 Edgepoint Networks, Inc. + 00:E0:62 Host Engineering +@@ -5998,36 +7279,36 @@ + 00:E0:64 Samsung Electronics + 00:E0:65 Optical Access International + 00:E0:66 Promax Systems, Inc. +-00:E0:67 Eac Automation-consulting Gmbh ++00:E0:67 Eac Automation-Consulting Gmbh + 00:E0:68 Merrimac Systems Inc. + 00:E0:69 Jaycor + 00:E0:6A Kapsch Ag +-00:E0:6B W&g Special Products ++00:E0:6B W&G Special Products + 00:E0:6C Aep Systems International Ltd + 00:E0:6D Compuware Corporation +-00:E0:6E Far Systems S.p.a. +-00:E0:6F Terayon Corp. ++00:E0:6E Far Systems S.P.A. ++00:E0:6F Terayon Communications Systems + 00:E0:70 Dh Technology + 00:E0:71 Epis Microcomputer + 00:E0:72 Lynk + 00:E0:73 National Amusement Network, Inc. + 00:E0:74 Tiernan Communications, Inc. +-00:E0:75 Atlas Computer Equipment, Inc. ++00:E0:75 Verilink Corporation + 00:E0:76 Development Concepts, Inc. + 00:E0:77 Webgear, Inc. + 00:E0:78 Berkeley Networks +-00:E0:79 A.t.n.r. ++00:E0:79 A.T.N.R. + 00:E0:7A Mikrodidakt Ab + 00:E0:7B Bay Networks +-00:E0:7C Mettler-toledo, Inc. ++00:E0:7C Mettler-Toledo, Inc. + 00:E0:7D Netronix, Inc. + 00:E0:7E Walt Disney Imagineering +-00:E0:7F Logististem S.r.l. ++00:E0:7F Logististem S.R.L. + 00:E0:80 Control Resources Corporation + 00:E0:81 Tyan Computer Corp. + 00:E0:82 Anerma + 00:E0:83 Jato Technologies, Inc. +-00:E0:84 Compulite R&d ++00:E0:84 Compulite R&D + 00:E0:85 Global Maintech, Inc. + 00:E0:86 Cybex Computer Products + 00:E0:87 Lecroy - Networking Productions Division +@@ -6044,7 +7325,7 @@ + 00:E0:92 Admtek Incorporated + 00:E0:93 Ackfin Networks + 00:E0:94 Osai Srl +-00:E0:95 Advanced-vision Technolgies Corp. ++00:E0:95 Advanced-Vision Technolgies Corp. + 00:E0:96 Shimadzu Corporation + 00:E0:97 Carrier Access Corporation + 00:E0:98 Abocom Systems, Inc. +@@ -6059,14 +7340,14 @@ + 00:E0:A1 Hima Paul Hildebrandt Gmbh Co. Kg + 00:E0:A2 Microslate Inc. + 00:E0:A3 Cisco Systems, Inc. +-00:E0:A4 Esaote S.p.a. ++00:E0:A4 Esaote S.P.A. + 00:E0:A5 Comcore Semiconductor, Inc. + 00:E0:A6 Telogy Networks, Inc. + 00:E0:A7 Ipc Information Systems, Inc. + 00:E0:A8 Sat Gmbh & Co. + 00:E0:A9 Funai Electric Co., Ltd. + 00:E0:AA Electrosonic Ltd. +-00:E0:AB Dimat S.a. ++00:E0:AB Dimat S.A. + 00:E0:AC Midsco, Inc. + 00:E0:AD Ees Technology, Ltd. + 00:E0:AE Xaqti Corporation +@@ -6089,11 +7370,11 @@ + 00:E0:BF Torrent Networking Technologies Corp. + 00:E0:C0 Seiwa Electric Mfg. Co., Ltd. + 00:E0:C1 Memorex Telex Japan, Ltd. +-00:E0:C2 Necsy S.p.a. ++00:E0:C2 Necsy S.P.A. + 00:E0:C3 Sakai System Development Corp. + 00:E0:C4 Horner Electric, Inc. + 00:E0:C5 Bcom Electronics Inc. +-00:E0:C6 Link2it, L.l.c. ++00:E0:C6 Link2It, L.L.C. + 00:E0:C7 Eurotech Srl + 00:E0:C8 Virtual Access, Ltd. + 00:E0:C9 Automatedlogic Corporation +@@ -6118,15 +7399,15 @@ + 00:E0:DC Nexware Corp. + 00:E0:DD Zenith Electronics Corporation + 00:E0:DE Datax Nv +-00:E0:DF Ke Kommunikations-electronik ++00:E0:DF Ke Kommunikations-Electronik + 00:E0:E0 Si Electronics, Ltd. + 00:E0:E1 G2 Networks, Inc. + 00:E0:E2 Innova Corp. +-00:E0:E3 Sk-elektronik Gmbh ++00:E0:E3 Sk-Elektronik Gmbh + 00:E0:E4 Fanuc Robotics North America, Inc. + 00:E0:E5 Cinco Networks, Inc. +-00:E0:E6 Incaa Datacom B.v. +-00:E0:E7 Raytheon E-systems, Inc. ++00:E0:E6 Incaa Datacom B.V. ++00:E0:E7 Raytheon E-Systems, Inc. + 00:E0:E8 Gretacoder Data Systems Ag + 00:E0:E9 Data Labs, Inc. + 00:E0:EA Innovat Communications, Inc. +@@ -6139,7 +7420,7 @@ + 00:E0:F1 That Corporation + 00:E0:F2 Arlotto Comnet, Inc. + 00:E0:F3 Websprint Communications, Inc. +-00:E0:F4 Inside Technology A/s ++00:E0:F4 Inside Technology A/S + 00:E0:F5 Teles Ag + 00:E0:F6 Decision Europe + 00:E0:F7 Cisco Systems, Inc. +@@ -6148,25 +7429,25 @@ + 00:E0:FA Trl Technology, Ltd. + 00:E0:FB Leightronix, Inc. + 00:E0:FC Huawei Technologies Co., Ltd. +-00:E0:FD A-trend Technology Co., Ltd. ++00:E0:FD A-Trend Technology Co., Ltd. + 00:E0:FE Cisco Systems, Inc. + 00:E0:FF Security Dynamics Technologies, Inc. + 00:E6:D3 Nixdorf Computer Corp. +-02:07:01 Racal-datacom ++02:07:01 Racal-Datacom + 02:1C:7C Perq Systems Corporation + 02:60:86 Logic Replacement Tech. Ltd. +-02:60:8C 3com Corporation +-02:70:01 Racal-datacom +-02:70:B0 M/a-com Inc. Companies ++02:60:8C 3Com Corporation ++02:70:01 Racal-Datacom ++02:70:B0 M/A-Com Inc. Companies + 02:70:B3 Data Recall Ltd + 02:9D:8E Cardiac Recorders Inc. +-02:AA:3C Olivetti Telecomm Spa (olteco) ++02:AA:3C Olivetti Telecomm Spa (Olteco) + 02:BB:01 Octothorpe Corp. +-02:C0:8C 3com Corporation ++02:C0:8C 3Com Corporation + 02:CF:1C Communication Machinery Corp. + 02:E6:D3 Nixdorf Computer Corporation + 04:0A:E0 Xmit Ag Computer Networks +-04:E0:C4 Triumph-adler Ag ++04:E0:C4 Triumph-Adler Ag + 08:00:01 Computervision Corporation + 08:00:02 Bridge Communications Inc. + 08:00:03 Advanced Computer Comm. +@@ -6191,36 +7472,38 @@ + 08:00:17 National Semiconductor + 08:00:18 Pirelli Focom Networks + 08:00:19 General Electric Corporation +-08:00:1A Tiara/ 10net ++08:00:1A Tiara/ 10Net + 08:00:1B Data General +-08:00:1C Kdd-kokusai Debnsin Denwa Co. ++08:00:1C Kdd-Kokusai Debnsin Denwa Co. + 08:00:1D Able Communications Inc. + 08:00:1E Apollo Computer Inc. + 08:00:1F Sharp Corporation + 08:00:20 Sun Microsystems Inc. +-08:00:21 3m Company ++08:00:21 3M Company + 08:00:22 Nbi Inc. +-08:00:23 Matsuhita Graphic Comm Sys Inc +-08:00:24 10net Communications/dca ++08:00:23 Panasonic Communications Co., Ltd. ++08:00:24 10Net Communications/Dca + 08:00:25 Control Data +-08:00:26 Norsk Data A.s. ++08:00:26 Norsk Data A.S. + 08:00:27 Cadmus Computer Systems + 08:00:28 Texas Instruments + 08:00:29 Megatek Corporation + 08:00:2A Mosaic Technologies Inc. + 08:00:2B Digital Equipment Corporation + 08:00:2C Britton Lee Inc. +-08:00:2D Lan-tec Inc. ++08:00:2D Lan-Tec Inc. + 08:00:2E Metaphor Computer Systems + 08:00:2F Prime Computer Inc. ++08:00:30 Network Research Corporation + 08:00:30 Cern ++08:00:30 Royal Melbourne Inst Of Tech + 08:00:31 Little Machines Inc. + 08:00:32 Tigan Incorporated + 08:00:33 Bausch & Lomb + 08:00:34 Filenet Corporation + 08:00:35 Microfive Corporation + 08:00:36 Intergraph Corporation +-08:00:37 Fuji-xerox Co. Ltd. ++08:00:37 Fuji-Xerox Co. Ltd. + 08:00:38 Cii Honeywell Bull + 08:00:39 Spider Systems Limited + 08:00:3A Orcatech Inc. +@@ -6230,7 +7513,7 @@ + 08:00:3E Codex Corporation + 08:00:3F Fred Koschara Enterprises + 08:00:40 Ferranti Computer Sys. Limited +-08:00:41 Racal-milgo Information Sys.. ++08:00:41 Racal-Milgo Information Sys.. + 08:00:42 Japan Macnics Corp. + 08:00:43 Pixel Computer Inc. + 08:00:44 David Systems Inc. +@@ -6243,7 +7526,7 @@ + 08:00:4B Planning Research Corp. + 08:00:4C Hydra Computer Systems Inc. + 08:00:4D Corvus Systems Inc. +-08:00:4E 3com Europe Ltd. ++08:00:4E 3Com Europe Ltd. + 08:00:4F Cygnet Systems + 08:00:50 Daisy Systems Corp. + 08:00:51 Experdata +@@ -6253,7 +7536,7 @@ + 08:00:56 Stanford Linear Accel. Center + 08:00:57 Evans & Sutherland + 08:00:58 Systems Concepts +-08:00:59 A/s Mycron ++08:00:59 A/S Mycron + 08:00:5A Ibm Corporation + 08:00:5B Vta Technologies Inc. + 08:00:5C Four Phase Systems +@@ -6275,9 +7558,9 @@ + 08:00:6C Suntek Technology Int'l + 08:00:6D Whitechapel Computer Works + 08:00:6E Masscomp +-08:00:6F Philips Apeldoorn B.v. ++08:00:6F Philips Apeldoorn B.V. + 08:00:70 Mitsubishi Electric Corp. +-08:00:71 Matra (dsie) ++08:00:71 Matra (Dsie) + 08:00:72 Xerox Corp Univ Grant Program + 08:00:73 Tecmar Inc. + 08:00:74 Casio Computer Co. Ltd. +@@ -6289,15 +7572,15 @@ + 08:00:7A Indata + 08:00:7B Sanyo Electric Co. Ltd. + 08:00:7C Vitalink Communications Corp. +-08:00:7E Amalgamated Wireless(aus) Ltd +-08:00:7F Carnegie-mellon University ++08:00:7E Amalgamated Wireless(Aus) Ltd ++08:00:7F Carnegie-Mellon University + 08:00:80 Aes Data Inc. +-08:00:81 Astech Inc. ++08:00:81 ,Astech Inc. + 08:00:82 Veritas Software +-08:00:83 Seiko Instrum. And Electronics ++08:00:83 Seiko Instruments Inc. + 08:00:84 Tomen Electronics Corp. + 08:00:85 Elxsi +-08:00:86 Imagen Corporation ++08:00:86 Konica Minolta Holdings, Inc. + 08:00:87 Xyplex + 08:00:88 Mcdata Corporation + 08:00:89 Kinetics +@@ -6308,8 +7591,8 @@ + 08:00:8E Tandem Computers + 08:00:8F Chipcom Corporation + 08:00:90 Sonoma Systems +-08:14:43 Unibrain S.a. +-08:BB:CC Ak-nord Edv Vertriebsges. Mbh ++08:14:43 Unibrain S.A. ++08:BB:CC Ak-Nord Edv Vertriebsges. Mbh + 10:00:00 Private + 10:00:5A Ibm Corporation + 10:00:E8 National Semiconductor +@@ -6321,3 +7604,4 @@ + AA:00:02 Digital Equipment Corporation + AA:00:03 Digital Equipment Corporation + AA:00:04 Digital Equipment Corporation ++AC:DE:48 Private diff --git a/pads-1.2-leak.patch b/pads-1.2-leak.patch new file mode 100644 index 0000000..2aca8d9 --- /dev/null +++ b/pads-1.2-leak.patch @@ -0,0 +1,121 @@ +diff -urp pads-1.2.orig/src/monnet.c pads-1.2/src/monnet.c +--- pads-1.2.orig/src/monnet.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/monnet.c 2008-07-11 14:06:36.000000000 -0400 +@@ -214,3 +214,23 @@ short check_monnet (const struct in_addr + /* Asset does not fall within a monitored network. */ + return 0; + } ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : end_monnet ++ * DESCRIPTION : This function will free all the records ++ * : placed in the monnet data structure. ++ * INPUT : None! ++ * RETURN : None! ++ * ---------------------------------------------------------- */ ++void end_monnet (void) ++{ ++ struct mon_net *next; ++ ++ /* Free records in monnet list (mn). */ ++ while (mn != NULL) { ++ next = mn->next; ++ free (mn); ++ mn = next; ++ } ++} ++ +diff -urp pads-1.2.orig/src/monnet.h pads-1.2/src/monnet.h +--- pads-1.2.orig/src/monnet.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/monnet.h 2008-07-11 14:06:36.000000000 -0400 +@@ -44,6 +44,6 @@ void parse_networks (char *cmdline); + void init_netmasks (unsigned int nm[33]); + void add_monnet(char *network, char *netmask); + short check_monnet (const struct in_addr ip_addr); +- ++void end_monnet (void); + + /* GLOBALS ----------------------------------------- */ +diff -urp pads-1.2.orig/src/output/output-prelude.c pads-1.2/src/output/output-prelude.c +--- pads-1.2.orig/src/output/output-prelude.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/output/output-prelude.c 2008-07-11 14:06:49.000000000 -0400 +@@ -117,7 +117,7 @@ static int init_prelude(void) + static int new_alert_common(idmef_message_t **idmef, idmef_alert_t **alert) + { + int ret; +- idmef_time_t *ctime; ++ idmef_time_t *dt_time, *cr_time; + + ret = idmef_message_new(idmef); + PRELUDE_FAIL_CHECK; +@@ -130,10 +130,12 @@ static int new_alert_common(idmef_messag + IDMEF_LIST_PREPEND); + + // Set time this was created +- ret = idmef_time_new_from_gettimeofday(&ctime); ++ ret = idmef_time_new_from_gettimeofday(&dt_time); + PRELUDE_FAIL_CHECK; +- idmef_alert_set_detect_time(*alert, ctime); +- idmef_alert_set_create_time(*alert, ctime); ++ ret = idmef_time_clone(dt_time, &cr_time); ++ PRELUDE_FAIL_CHECK; ++ idmef_alert_set_detect_time(*alert, dt_time); ++ idmef_alert_set_create_time(*alert, cr_time); + + return 0; + err: +@@ -287,6 +289,7 @@ static int asset_alert(Asset *a, idmef_m + PRELUDE_FAIL_CHECK; + ret = prelude_string_set_dup(name, (char *)bdata(a->service)); + PRELUDE_FAIL_CHECK; ++ idmef_service_set_name(service, name); + if (bdata(a->application) != NULL) { + ret = idmef_alert_new_additional_data(alert, &data, + IDMEF_LIST_APPEND); +@@ -508,6 +511,7 @@ end_output_prelude () + + if (client) + prelude_client_destroy(client, PRELUDE_CLIENT_EXIT_STATUS_SUCCESS); ++ prelude_deinit(); + free(profile); + + return 0; +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-11 14:06:36.000000000 -0400 +@@ -392,6 +392,7 @@ end_pads(void) + if (gc.handle) { + log_message("Closing PCAP Connection"); + pcap_close(gc.handle); ++ pcap_freecode(&gc.filter); + } + + /* Remove PID File */ +@@ -407,10 +408,13 @@ end_pads(void) + #ifndef DISABLE_VENDOR + end_mac_resolution(); + #endif ++ end_monnet(); + + /* Garbage Collect GC Variable */ + if (gc.conf_file != NULL) + bdestroy(gc.conf_file); ++ if (gc.dev != NULL) ++ free(gc.dev); + if (gc.report_file != NULL) + bdestroy(gc.report_file); + if (gc.fifo_file != NULL) +diff -urp pads-1.2.orig/src/packet.c pads-1.2/src/packet.c +--- pads-1.2.orig/src/packet.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/packet.c 2008-07-10 13:04:38.000000000 -0400 +@@ -95,6 +95,10 @@ void process_sll (const struct pcap_pkth + /* Extract the sll header from the packet. */ + sllh = (struct sll_header*) packet; + ++ /* Avoid bogus packets */ ++ if (pkthdr->caplen < ETH_HLEN) ++ return; ++ + /* Determine what type of sll packet this is. */ + switch(ntohs(sllh->sll_protocol)) { + /* IP */ diff --git a/pads-1.2-memleak.patch b/pads-1.2-memleak.patch new file mode 100644 index 0000000..01f486d --- /dev/null +++ b/pads-1.2-memleak.patch @@ -0,0 +1,280 @@ +diff -urp pads-1.2.orig/src/identification.c pads-1.2/src/identification.c +--- pads-1.2.orig/src/identification.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/identification.c 2008-06-30 16:12:11.000000000 -0400 +@@ -96,7 +96,7 @@ int parse_raw_signature (bstring line, i + struct bstrList *raw_sig; + struct bstrList *title = NULL; + Signature *sig; +- bstring pcre_string; ++ bstring pcre_string = NULL; + const char *err; /* PCRE */ + int erroffset; /* PCRE */ + int ret = 0; +@@ -117,10 +117,12 @@ int parse_raw_signature (bstring line, i + } else if (raw_sig->qty > 3) { + pcre_string = bstrcpy(raw_sig->entry[2]); + for (i = 3; i < raw_sig->qty; i++) { +- if ((bconcat(pcre_string, bfromcstr(","))) == BSTR_ERR) ++ bstring tmp = bfromcstr(","); ++ if ((bconcat(pcre_string, tmp)) == BSTR_ERR) + ret = -1; + if ((bconcat(pcre_string, raw_sig->entry[i])) == BSTR_ERR) + ret = -1; ++ bdestroy(tmp); + } + } else { + pcre_string = bstrcpy(raw_sig->entry[2]); +@@ -129,8 +131,10 @@ int parse_raw_signature (bstring line, i + /* Split Title */ + if (raw_sig->entry[1] != NULL && ret != -1) + title = bsplit(raw_sig->entry[1], '/'); +- if (title == NULL) ++ if (title == NULL) { ++ bdestroy(pcre_string); + return -1; ++ } + + if (title->qty < 3) + ret = -1; +@@ -139,6 +143,7 @@ int parse_raw_signature (bstring line, i + if (ret != -1) { + sig = (Signature*)malloc(sizeof(Signature)); + sig->next = NULL; ++ sig->regex = NULL; + if (raw_sig->entry[0] != NULL) + sig->service = bstrcpy(raw_sig->entry[0]); + if (title->entry[1] != NULL) +@@ -280,6 +285,7 @@ int pcre_identify (struct in_addr ip_add + if (rc != -1) { + app = get_app_name(list, payload, ovector, rc); + update_asset(ip_addr, port, proto, list->service, app); ++ bdestroy(app); + return 1; + } + +@@ -359,7 +365,7 @@ bstring get_app_name (Signature *sig, + } + sub[z] = '\0'; + +- retval = bstrcpy(bfromcstr(sub)); ++ retval = bfromcstr(sub); + return retval; + + } +@@ -388,6 +394,7 @@ void end_identification() + bdestroy(signature_list->title.ver); + if (signature_list->title.misc != NULL) + bdestroy(signature_list->title.misc); ++ pcre_free(signature_list->regex); + + /* Free Record */ + if (signature_list != NULL) +diff -urp pads-1.2.orig/src/output/output.c pads-1.2/src/output/output.c +--- pads-1.2.orig/src/output/output.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/output/output.c 2008-06-30 16:12:11.000000000 -0400 +@@ -31,8 +31,8 @@ + #include "output-fifo.h" + #include "storage.h" + +-/* Global Variables */ +-OutputPluginList *output_plugin_list; ++/* Local Variables */ ++static OutputPluginList *output_plugin_list = NULL; + + /* ---------------------------------------------------------- + * FUNCTION : init_output() +@@ -77,6 +77,7 @@ int register_output_plugin (OutputPlugin + list = (OutputPluginList*)malloc(sizeof(OutputPluginList)); + list->plugin = plugin; + list->active = 0; ++ list->next = NULL; + + /* Place plugin in data structure. */ + if (output_plugin_list == NULL) { +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-06-30 16:12:11.000000000 -0400 +@@ -46,7 +46,7 @@ setup_output_csv (void) + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +- plugin->name = bstrcpy(bfromcstr("csv")); ++ plugin->name = bfromcstr("csv"); + plugin->init = init_output_csv; + plugin->print_asset = print_asset_csv; + plugin->print_arp = print_arp_asset_csv; +@@ -83,7 +83,7 @@ init_output_csv (bstring filename) + if (filename != NULL) + output_csv_conf.filename = bstrcpy(filename); + else +- output_csv_conf.filename = bstrcpy(bfromcstr("assets.csv")); ++ output_csv_conf.filename = bfromcstr("assets.csv"); + + /* Check to see if *filename exists. */ + if ((fp = fopen((char *)bdata(output_csv_conf.filename), "r")) == NULL) { +diff -urp pads-1.2.orig/src/output/output-fifo.c pads-1.2/src/output/output-fifo.c +--- pads-1.2.orig/src/output/output-fifo.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/output/output-fifo.c 2008-06-30 16:12:11.000000000 -0400 +@@ -71,7 +71,7 @@ setup_output_fifo (void) + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +- plugin->name = bstrcpy(bfromcstr("fifo")); ++ plugin->name = bfromcstr("fifo"); + plugin->init = init_output_fifo; + plugin->print_asset = print_asset_fifo; + plugin->print_arp = print_arp_asset_fifo; +@@ -102,7 +102,7 @@ init_output_fifo (bstring fifo_file) + + /* Make sure report_file isn't NULL. */ + if (fifo_file == NULL) +- fifo_file = bstrcpy(bfromcstr("pads.fifo")); ++ fifo_file = bfromcstr("pads.fifo"); + + output_fifo_conf.filename = bstrcpy(fifo_file); + +diff -urp pads-1.2.orig/src/output/output-screen.c pads-1.2/src/output/output-screen.c +--- pads-1.2.orig/src/output/output-screen.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/output/output-screen.c 2008-06-30 16:12:11.000000000 -0400 +@@ -43,7 +43,7 @@ setup_output_screen (void) + + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); +- plugin->name = bstrcpy(bfromcstr("screen")); ++ plugin->name = bfromcstr("screen"); + plugin->init = init_output_screen; + plugin->print_asset = print_asset_screen; + plugin->print_arp = print_arp_asset_screen; +diff -urp pads-1.2.orig/src/packet.c pads-1.2/src/packet.c +--- pads-1.2.orig/src/packet.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/packet.c 2008-06-30 16:12:11.000000000 -0400 +@@ -211,8 +211,13 @@ void process_tcp (const struct pcap_pkth + + /* Check to see if this is a known asset. */ + if(check_tcp_asset(ip_src, tcph->th_sport)) { ++ bstring serv, app; ++ serv = bfromcstr("unknown"); ++ app = bfromcstr("unknown"); + add_asset(ip_src, tcph->th_sport, +- IPPROTO_TCP, bfromcstr("unknown"), bfromcstr("unknown"), 0); ++ IPPROTO_TCP, serv, app, 0); ++ bdestroy(serv); ++ bdestroy(app); + } else { + /* Record connection for statistical purposes. */ + print_stat(ip_src, tcph->th_sport, IPPROTO_TCP); +@@ -269,8 +274,13 @@ void process_icmp (const struct pcap_pkt + + if (icmp->icmp_type == ICMP_ECHOREPLY) { + if(check_icmp_asset(ip_src)) { +- add_asset(ip_src, 0, IPPROTO_ICMP, bfromcstr("ICMP"), bfromcstr("ICMP"), 0); ++ bstring serv, app; ++ serv = bfromcstr("ICMP"); ++ app = bfromcstr("ICMP"); ++ add_asset(ip_src, 0, IPPROTO_ICMP, serv, app, 0); + print_asset(ip_src, 0, IPPROTO_ICMP); ++ bdestroy(serv); ++ bdestroy(app); + } + } + +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-06-30 16:23:31.000000000 -0400 +@@ -165,9 +165,33 @@ print_version (void) + * FUNCTION : init_pads + * DESCRIPTION : This function will initialize PADS. + * ---------------------------------------------------------- */ ++void init_gc(void) ++{ ++ gc.handle = NULL; ++ gc.dev = NULL; ++ gc.pcap_filter = NULL; ++ gc.conf_file = NULL; ++ gc.report_file = NULL; ++ gc.fifo_file = NULL; ++ gc.pcap_file = NULL; ++ gc.dump_file = NULL; ++ gc.pid_file = NULL; ++ gc.sig_file = NULL; ++ gc.mac_file = NULL; ++ gc.priv_user = NULL; ++ gc.priv_group = NULL; ++} ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : init_pads ++ * DESCRIPTION : This function will initialize PADS. ++ * ---------------------------------------------------------- */ + void + init_pads (void) + { ++ /* Init global config to known state */ ++ init_gc(); ++ + /* Process the command line parameters. */ + process_cmdline(prog_argc, prog_argv); + +@@ -179,15 +203,22 @@ init_pads (void) + init_configuration(gc.conf_file); + + } else { +- /* Default Output Plugins: These plugins are activated if a configuration +- * file is not specified. */ ++ bstring name, args; ++ /* Default Output Plugins: These plugins are activated if a ++ * configuration file is not specified. */ + + /* output: screen */ +- if ((activate_output_plugin(bfromcstr("screen"), bfromcstr(""))) == -1) ++ name = bfromcstr("screen"); ++ args = bfromcstr(""); ++ if ((activate_output_plugin(name, args)) == -1) + log_message("warning: 'activate_output_plugin' in function 'init_pads' failed."); ++ bdestroy(name); ++ bdestroy(args); + /* output: csv */ +- if ((activate_output_plugin(bfromcstr("csv"), gc.report_file)) == -1) ++ name = bfromcstr("csv"); ++ if ((activate_output_plugin(name, gc.report_file)) == -1) + log_message("warning: 'activate_output_plugin' in function 'init_pads' failed."); ++ bdestroy(name); + } + + /* Initialize Modules */ +diff -urp pads-1.2.orig/src/storage.c pads-1.2/src/storage.c +--- pads-1.2.orig/src/storage.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/storage.c 2008-06-30 16:12:11.000000000 -0400 +@@ -29,8 +29,8 @@ + #include "storage.h" + #include "mac-resolution.h" + +-Asset *asset_list; +-ArpAsset *arp_asset_list; ++static Asset *asset_list = NULL; ++static ArpAsset *arp_asset_list = NULL; + + /* ---------------------------------------------------------- + * FUNCTION : check_tcp_asset +@@ -343,7 +343,9 @@ short update_asset (struct in_addr ip_ad + && port == list->port + && proto == list->proto) { + /* Found! */ ++ bdestroy(list->service); + list->service = bstrcpy(service); ++ bdestroy(list->application); + list->application = bstrcpy(application); + return 0; + +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/util.c 2008-06-30 16:26:24.000000000 -0400 +@@ -120,7 +120,7 @@ init_pid_file (bstring pid_file, bstring + struct passwd *this_user; + + /* Default PID File */ +- if (gc.pid_file->slen >= 0) ++ if (gc.pid_file == NULL || gc.pid_file->slen == 0) + gc.pid_file = bfromcstr("/var/run/pads.pid"); + + /* Create PID File */ diff --git a/pads-1.2-misc.patch b/pads-1.2-misc.patch new file mode 100644 index 0000000..544c178 --- /dev/null +++ b/pads-1.2-misc.patch @@ -0,0 +1,47 @@ +diff -ur pads-1.2.orig/src/configuration.c pads-1.2/src/configuration.c +--- pads-1.2.orig/src/configuration.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/configuration.c 2008-07-01 21:11:22.000000000 -0400 +@@ -191,8 +191,10 @@ + log_message("warning: 'ptrFunc' in function 'conf_module_processor' failed."); + } else { + /* Input processor does not contain an argument. */ +- if (((*ptrFunc)(list->entry[0], bfromcstr(""))) == -1) ++ bstring empty = bfromcstr(""); ++ if (((*ptrFunc)(list->entry[0], empty)) == -1) + log_message("warning: 'ptrFunc' in function 'conf_module_processor' failed."); ++ bdestroy(empty); + } + if (list != NULL) + bstrListDestroy(list); +diff -ur pads-1.2.orig/src/monnet.c pads-1.2/src/monnet.c +--- pads-1.2.orig/src/monnet.c 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/monnet.c 2008-07-01 20:37:50.000000000 -0400 +@@ -32,7 +32,7 @@ + #include "monnet.h" + #include "util.h" + +-struct mon_net *mn; ++static struct mon_net *mn = NULL; + + /* ---------------------------------------------------------- + * FUNCTION : parse_networks +diff -ur pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-01 21:35:45.000000000 -0400 +@@ -343,11 +343,11 @@ + + /* Display PCAP Statistics */ + if (!pcap_stats(gc.handle, &pstat)) { +- log_message("\n"); +- log_message("%d Packets Received\n", pstat.ps_recv); +- log_message("%d Packets Dropped by Software\n", pstat.ps_drop); +- log_message("%d Packets Dropped by Interface\n", pstat.ps_ifdrop); +- log_message("\n"); ++ verbose_message("\n"); ++ verbose_message("%d Packets Received\n", pstat.ps_recv); ++ verbose_message("%d Packets Dropped by Software\n", pstat.ps_drop); ++ verbose_message("%d Packets Dropped by Interface\n", pstat.ps_ifdrop); ++ verbose_message("\n"); + } + + /* Close banner dump file if specifed (-d). */ diff --git a/pads-1.2-overrun.patch b/pads-1.2-overrun.patch new file mode 100644 index 0000000..7df4fc9 --- /dev/null +++ b/pads-1.2-overrun.patch @@ -0,0 +1,12 @@ +diff -urp pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/util.c 2008-06-30 17:27:44.000000000 -0400 +@@ -465,7 +465,7 @@ hex2mac(const char *mac) + { + static char buf[18]; + +- sprintf(buf, "%X:%02X:%02X:%02X:%02X:%02X", ++ snprintf(buf, sizeof(buf), "%02X:%02X:%02X:%02X:%02X:%02X", + mac[0], mac[1], mac[2], + mac[3], mac[4], mac[5]); + diff --git a/pads-1.2-perf.patch b/pads-1.2-perf.patch new file mode 100644 index 0000000..a4a667b --- /dev/null +++ b/pads-1.2-perf.patch @@ -0,0 +1,472 @@ +diff -urp pads-1.2.orig/src/identification.c pads-1.2/src/identification.c +--- pads-1.2.orig/src/identification.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/identification.c 2008-07-12 10:56:07.000000000 -0400 +@@ -30,7 +30,10 @@ + #include "storage.h" + #include "output/output.h" + +-Signature *signature_list; ++static Signature *signature_list = NULL, **tail = NULL; ++ ++/* Local Functions */ ++static void add_signature (Signature *sig); + + /* ---------------------------------------------------------- + * FUNCTION : init_identification +@@ -40,7 +43,7 @@ Signature *signature_list; + * RETURN : -1 - Error + * : 0 - Normal Return + * ---------------------------------------------------------- */ +-int init_identification() ++int init_identification(void) + { + FILE *fp; + bstring filename; +@@ -191,25 +194,13 @@ int parse_raw_signature (bstring line, i + * RETURN : 0 - Success + * : -1 - Error + * ---------------------------------------------------------- */ +-int add_signature (Signature *sig) ++static void add_signature (Signature *sig) + { +- Signature *list; +- +- if (signature_list == NULL) { ++ if (tail == NULL) + signature_list = sig; +- } else { +- list = signature_list; +- while (list != NULL) { +- if (list->next == NULL) { +- list->next = sig; +- break; +- } else { +- list = list->next; +- } +- } +- } +- +- return 0; ++ else ++ *tail = sig; ++ tail = &sig->next; + } + + /* ---------------------------------------------------------- +@@ -235,12 +226,12 @@ int tcp_identify (struct in_addr ip_addr + + if (i_attempts > 0) { + i_attempts--; +- update_i_attempts(ip_addr, port, IPPROTO_TCP, i_attempts); ++ update_i_attempts(i_attempts); + + if (pcre_identify(ip_addr, port, IPPROTO_TCP, payload, plen) == 1) { + /* MATCH! */ + i_attempts = 0; +- update_i_attempts(ip_addr, port, IPPROTO_TCP, 0); ++ update_i_attempts(0); + } + + /* Print asset if this is the last time to identify it. */ +diff -urp pads-1.2.orig/src/identification.h pads-1.2/src/identification.h +--- pads-1.2.orig/src/identification.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/identification.h 2008-07-12 10:56:07.000000000 -0400 +@@ -39,7 +39,6 @@ + /* PROTOTYPES -------------------------------------- */ + int init_identification(void); + int parse_raw_signature (bstring line, int lineno); +-int add_signature (Signature *sig); + int tcp_identify (struct in_addr ip_addr, u_int16_t port, char *payload, int plen); + int pcre_identify (struct in_addr ip_addr, u_int16_t port, unsigned short proto, const char *payload, int plen); + bstring get_app_name (Signature *sig, const char *payload, int *ovector, int rc); +diff -urp pads-1.2.orig/src/mac-resolution.c pads-1.2/src/mac-resolution.c +--- pads-1.2.orig/src/mac-resolution.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/mac-resolution.c 2008-07-12 10:56:07.000000000 -0400 +@@ -34,9 +34,14 @@ + #include "mac-resolution.h" + #include "util.h" + +-Vendor *vendor_list = NULL; ++static Vendor *vendor_list = NULL; ++static Vendor **vtail = NULL; + +-/* ---------------------------------------------------------- ++/* Local function prototype */ ++static int parse_raw_mac (bstring line); ++static int add_vendor (const char *mac, const char *vendor); ++ ++ /* ---------------------------------------------------------- + * FUNCTION : init_mac_resolution + * DESCRIPTION : This file reads in the MAC address table. + * INPUT : None +@@ -94,7 +99,7 @@ int init_mac_resolution (void) { + * RETURN : 0 - Success + * : -1 - Error + * ---------------------------------------------------------- */ +-int parse_raw_mac (bstring line) ++static int parse_raw_mac (bstring line) + { + char mac[4]; + char vendor[80]; +@@ -125,8 +130,8 @@ int parse_raw_mac (bstring line) + * INPUT : 0 - MAC Address (bstring) + * : 1 - Vendor (bstring) + * ---------------------------------------------------------- */ +-int add_vendor (char *mac, char *vendor){ +- Vendor *list; ++static int add_vendor (const char *mac, const char *vendor) ++{ + Vendor *rec; + + /* Assign data to temporary data structure. */ +@@ -136,19 +141,11 @@ int add_vendor (char *mac, char *vendor) + rec->next = NULL; + + /* Place data structure in MAC address list. */ +- if(vendor_list == NULL) { ++ if(vtail == NULL) + vendor_list = rec; +- } else { +- list = vendor_list; +- while (list != NULL) { +- if (list->next == NULL) { +- list->next = rec; +- break; +- } else { +- list = list->next; +- } +- } +- } ++ else ++ *vtail = rec; ++ vtail = &rec->next; + + return 0; + } +diff -urp pads-1.2.orig/src/mac-resolution.h pads-1.2/src/mac-resolution.h +--- pads-1.2.orig/src/mac-resolution.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/mac-resolution.h 2008-07-12 10:56:07.000000000 -0400 +@@ -39,8 +39,6 @@ + + /* PROTOTYPES -------------------------------------- */ + int init_mac_resolution (void); +-int parse_raw_mac (bstring line); +-int add_vendor (char *mac, char *vendor); + bstring get_vendor (const char *m); + void end_mac_resolution (void); + +diff -urp pads-1.2.orig/src/monnet.c pads-1.2/src/monnet.c +--- pads-1.2.orig/src/monnet.c 2008-07-12 08:36:10.000000000 -0400 ++++ pads-1.2/src/monnet.c 2008-07-12 10:56:07.000000000 -0400 +@@ -87,49 +87,41 @@ void parse_networks (char *cmdline) + } + } + +-/* ---------------------------------------------------------- +- * FUNCTION : init_netmasks +- * DESCRIPTION : This function will load netmasks into an +- * : array. +- * INPUT : 0 - Array +- * RETURN : None! +- * ---------------------------------------------------------- */ +-void init_netmasks (unsigned int nm[33]) +-{ +- nm[0] = 0x0; +- nm[1] = 0x80000000; +- nm[2] = 0xC0000000; +- nm[3] = 0xE0000000; +- nm[4] = 0xF0000000; +- nm[5] = 0xF8000000; +- nm[6] = 0xFC000000; +- nm[7] = 0xFE000000; +- nm[8] = 0xFF000000; +- nm[9] = 0xFF800000; +- nm[10] = 0xFFC00000; +- nm[11] = 0xFFE00000; +- nm[12] = 0xFFF00000; +- nm[13] = 0xFFF80000; +- nm[14] = 0xFFFC0000; +- nm[15] = 0xFFFE0000; +- nm[16] = 0xFFFF0000; +- nm[17] = 0xFFFF8000; +- nm[18] = 0xFFFFC000; +- nm[19] = 0xFFFFE000; +- nm[20] = 0xFFFFF000; +- nm[21] = 0xFFFFF800; +- nm[22] = 0xFFFFFC00; +- nm[23] = 0xFFFFFE00; +- nm[24] = 0xFFFFFF00; +- nm[25] = 0xFFFFFF80; +- nm[26] = 0xFFFFFFC0; +- nm[27] = 0xFFFFFFE0; +- nm[28] = 0xFFFFFFF0; +- nm[29] = 0xFFFFFFF8; +- nm[30] = 0xFFFFFFFC; +- nm[31] = 0xFFFFFFFE; +- nm[32] = 0xFFFFFFFF; +-} ++static unsigned int netmasks[33] = { ++ 0x0, ++ 0x80000000, ++ 0xC0000000, ++ 0xE0000000, ++ 0xF0000000, ++ 0xF8000000, ++ 0xFC000000, ++ 0xFE000000, ++ 0xFF000000, ++ 0xFF800000, ++ 0xFFC00000, ++ 0xFFE00000, ++ 0xFFF00000, ++ 0xFFF80000, ++ 0xFFFC0000, ++ 0xFFFE0000, ++ 0xFFFF0000, ++ 0xFFFF8000, ++ 0xFFFFC000, ++ 0xFFFFE000, ++ 0xFFFFF000, ++ 0xFFFFF800, ++ 0xFFFFFC00, ++ 0xFFFFFE00, ++ 0xFFFFFF00, ++ 0xFFFFFF80, ++ 0xFFFFFFC0, ++ 0xFFFFFFE0, ++ 0xFFFFFFF0, ++ 0xFFFFFFF8, ++ 0xFFFFFFFC, ++ 0xFFFFFFFE, ++ 0xFFFFFFFF, ++}; + + /* ---------------------------------------------------------- + * FUNCTION : add_monnet +@@ -143,12 +135,8 @@ void add_monnet(char *network, char *net + { + struct mon_net *rec, *data; + struct in_addr net_addr; +- unsigned int netmasks[33]; + int nmask; + +- /* Fill netmasks variable. See init_netmasks in util.c. */ +- init_netmasks(netmasks); +- + nmask = atoi(netmask); + + /* Ensure that the netmask is correct. */ +diff -urp pads-1.2.orig/src/monnet.h pads-1.2/src/monnet.h +--- pads-1.2.orig/src/monnet.h 2008-07-12 08:36:10.000000000 -0400 ++++ pads-1.2/src/monnet.h 2008-07-12 10:56:07.000000000 -0400 +@@ -41,7 +41,6 @@ struct mon_net { + + /* PROTOTYPES -------------------------------------- */ + void parse_networks (char *cmdline); +-void init_netmasks (unsigned int nm[33]); + void add_monnet(char *network, char *netmask); + short check_monnet (const struct in_addr ip_addr); + void end_monnet (void); +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-07-12 10:59:31.000000000 -0400 +@@ -231,10 +231,6 @@ parse_raw_report (bstring line) + // Clean Up + if (list != NULL) + bstrListDestroy(list); +- if (service != NULL) +- bdestroy(service); +- if (application != NULL) +- bdestroy(application); + + return ret; + } +diff -urp pads-1.2.orig/src/packet.c pads-1.2/src/packet.c +--- pads-1.2.orig/src/packet.c 2008-07-12 08:36:10.000000000 -0400 ++++ pads-1.2/src/packet.c 2008-07-12 10:56:07.000000000 -0400 +@@ -232,8 +232,6 @@ void process_tcp (const struct pcap_pkth + app = bfromcstr("unknown"); + add_asset(ip_src, tcph->th_sport, + IPPROTO_TCP, serv, app, 0); +- bdestroy(serv); +- bdestroy(app); + } else { + /* Record connection for statistical purposes. */ + print_stat(ip_src, tcph->th_sport, IPPROTO_TCP); +@@ -295,8 +293,6 @@ void process_icmp (const struct pcap_pkt + app = bfromcstr("ICMP"); + add_asset(ip_src, 0, IPPROTO_ICMP, serv, app, 0); + print_asset(ip_src, 0, IPPROTO_ICMP); +- bdestroy(serv); +- bdestroy(app); + } + } + +diff -urp pads-1.2.orig/src/storage.c pads-1.2/src/storage.c +--- pads-1.2.orig/src/storage.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/storage.c 2008-07-12 10:56:07.000000000 -0400 +@@ -29,8 +29,8 @@ + #include "storage.h" + #include "mac-resolution.h" + +-static Asset *asset_list = NULL; +-static ArpAsset *arp_asset_list = NULL; ++static Asset *asset_list = NULL, *current = NULL, **tail = NULL; ++static ArpAsset *arp_asset_list = NULL, **arp_tail = NULL; + + /* ---------------------------------------------------------- + * FUNCTION : check_tcp_asset +@@ -127,8 +127,8 @@ int check_arp_asset (struct in_addr ip_a + * INPUT : 0 - IP Address + * : 1 - Port + * : 2 - Protocol +- * : 3 - Service +- * : 4 - Application ++ * : 3 - Service - takes custody of this memory ++ * : 4 - Application - takes custody of this memory + * : 5 - Discovered + * RETURN : None! + * ---------------------------------------------------------- */ +@@ -140,15 +140,14 @@ void add_asset (struct in_addr ip_addr, + time_t discovered) + { + Asset *rec; +- Asset *list; + + /* Assign list to temp structure. */ + rec = (Asset*)malloc(sizeof(Asset)); + rec->ip_addr.s_addr = ip_addr.s_addr; + rec->port = port; + rec->proto = proto; +- rec->service = bstrcpy(service); +- rec->application = bstrcpy(application); ++ rec->service = service; ++ rec->application = application; + rec->next = NULL; + + /* +@@ -174,19 +173,11 @@ void add_asset (struct in_addr ip_addr, + } + + /* Find this record's location within linked list. */ +- if (asset_list == NULL) { ++ if (tail == NULL) + asset_list = rec; +- } else { +- list = asset_list; +- while (list != NULL) { +- if (list->next == NULL) { +- list->next = rec; +- break; +- } else { +- list = list->next; +- } +- } +- } ++ else ++ *tail = rec; ++ tail = &rec->next; + + return; + } +@@ -203,7 +194,6 @@ void add_asset (struct in_addr ip_addr, + void add_arp_asset (struct in_addr ip_addr, const char *mac_addr, + time_t discovered) + { +- ArpAsset *list; + ArpAsset *rec; + bstring mac_resolved; + +@@ -233,20 +223,11 @@ void add_arp_asset (struct in_addr ip_ad + } + + /* Find this record's location within linked list. */ +- if (arp_asset_list == NULL) { ++ if (arp_tail == NULL) + arp_asset_list = rec; +- } else { +- list = arp_asset_list; +- +- while (list != NULL) { +- if (list->next == NULL) { +- list->next = rec; +- break; +- } else { +- list = list->next; +- } +- } +- } ++ else ++ *arp_tail = arp_asset_list; ++ arp_tail = &arp_asset_list->next; + } + + /* ---------------------------------------------------------- +@@ -270,6 +251,7 @@ unsigned short get_i_attempts (struct in + && port == rec->port + && proto == rec->proto) { + /* Found! */ ++ current = rec; + return rec->i_attempts; + + } else { +@@ -277,13 +259,14 @@ unsigned short get_i_attempts (struct in + } + } + ++ current = NULL; + return 0; + } + + /* ---------------------------------------------------------- + * FUNCTION : update_i_attempts +- * DESCRIPTION : Updates the i_attempts field for a +- * : specified asset. ++ * DESCRIPTION : Updates the i_attempts field of the current ++ * : asset from previous call to get_i_attempts. + * INPUT : 0 - IP Address + * : 1 - Port + * : 2 - Proto +@@ -291,26 +274,11 @@ unsigned short get_i_attempts (struct in + * RETURN : 0 - Success + * : 1 - Failure + * ---------------------------------------------------------- */ +-short update_i_attempts (struct in_addr ip_addr, +- u_int16_t port, +- unsigned short proto, +- unsigned short i_attempts) ++short update_i_attempts (unsigned short i_attempts) + { +- Asset *rec; +- +- /* Find asset within linked list. */ +- rec = asset_list; +- while (rec != NULL) { +- if (ip_addr.s_addr == rec->ip_addr.s_addr +- && port == rec->port +- && proto == rec->proto) { +- /* Found! */ +- rec->i_attempts = i_attempts; +- return 0; +- +- } else { +- rec = rec->next; +- } ++ if (current) { ++ current->i_attempts = i_attempts; ++ return 0; + } + + return 1; +diff -urp pads-1.2.orig/src/storage.h pads-1.2/src/storage.h +--- pads-1.2.orig/src/storage.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/storage.h 2008-07-12 10:56:07.000000000 -0400 +@@ -54,7 +54,7 @@ int check_arp_asset (struct in_addr ip_a + void add_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto, bstring service, bstring application, time_t discovered); + void add_arp_asset (struct in_addr ip_addr, const char *mac_addr, time_t discovered); + unsigned short get_i_attempts (struct in_addr ip_addr, u_int16_t port, unsigned short proto); +-short update_i_attempts (struct in_addr ip_addr, u_int16_t port, unsigned short proto, unsigned short i_attempts); ++short update_i_attempts (unsigned short i_attempts); + short update_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto, bstring service, bstring application); + inline Asset *find_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto); + Asset *get_asset_pointer (void); diff --git a/pads-1.2-prelude-cleanup.patch b/pads-1.2-prelude-cleanup.patch new file mode 100644 index 0000000..3adca4b --- /dev/null +++ b/pads-1.2-prelude-cleanup.patch @@ -0,0 +1,109 @@ +diff -urp pads-1.2.orig/src/output/output.c pads-1.2/src/output/output.c +--- pads-1.2.orig/src/output/output.c 2008-07-08 10:53:14.000000000 -0400 ++++ pads-1.2/src/output/output.c 2008-07-08 10:41:13.000000000 -0400 +@@ -129,7 +129,8 @@ int activate_output_plugin (bstring name + /* MATCH! Set record to active and run 'init' function. */ + list->active = 1; + if (plugin != NULL && plugin->init != NULL) +- (*plugin->init)(args); ++ if ((*plugin->init)(args) < 0) ++ return -1; + break; + } + +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-07-07 13:56:10.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-07-08 10:44:48.000000000 -0400 +@@ -58,6 +58,7 @@ setup_output_csv (void) + if (plugin != NULL) + free(plugin); + log_message("warning: 'register_output_plugin' in function 'setup_output_csv' failed."); ++ return -1; + } + + return 0; +diff -urp pads-1.2.orig/src/output/output-fifo.c pads-1.2/src/output/output-fifo.c +--- pads-1.2.orig/src/output/output-fifo.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/output/output-fifo.c 2008-07-08 10:46:32.000000000 -0400 +@@ -83,6 +83,7 @@ setup_output_fifo (void) + if (plugin != NULL) + free(plugin); + log_message("warning: 'register_output_plugin' in function 'setup_output_fifo' failed."); ++ return -1; + } + + return 0; +@@ -109,8 +110,10 @@ init_output_fifo (bstring fifo_file) + mkfifo ((char *)bdata(fifo_file), 0755); + + verbose_message("Open FIFO File\n"); +- if ((output_fifo_conf.file = fopen((char*)bdata(fifo_file), "w+")) == NULL) ++ if ((output_fifo_conf.file = fopen((char*)bdata(fifo_file), "w+")) == NULL){ + err_message("Unable to open FIFO file (%s)!\n", bdata(fifo_file)); ++ return -1; ++ } + + return 0; + } +diff -urp pads-1.2.orig/src/output/output-prelude.c pads-1.2/src/output/output-prelude.c +--- pads-1.2.orig/src/output/output-prelude.c 2008-07-08 10:53:14.000000000 -0400 ++++ pads-1.2/src/output/output-prelude.c 2008-07-08 10:44:25.000000000 -0400 +@@ -407,9 +407,6 @@ setup_output_prelude (void) + OutputPlugin *plugin; + + +- if (init_prelude() < 0) +- return -1; +- + /* Allocate and setup plugin data record. */ + plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); + plugin->name = bfromcstr("prelude"); +@@ -424,6 +421,7 @@ setup_output_prelude (void) + if (plugin != NULL) + free(plugin); + log_message("warning: 'register_output_plugin' in function 'setup_output_prelude' failed."); ++ return -1; + } + + return 0; +@@ -442,6 +440,10 @@ init_output_prelude (bstring args) + { + verbose_message("Initializing PRELUDE output processor."); + profile = strdup((char *)bdata(args)); ++ ++ if (init_prelude() < 0) ++ return -1; ++ + return 0; + } + +diff -urp pads-1.2.orig/src/output/output-screen.c pads-1.2/src/output/output-screen.c +--- pads-1.2.orig/src/output/output-screen.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/output/output-screen.c 2008-07-08 10:45:03.000000000 -0400 +@@ -55,6 +55,7 @@ setup_output_screen (void) + if (plugin != NULL) + free(plugin); + log_message("warning: 'register_output_plugin' in function 'setup_output_screen' failed."); ++ return -1; + } + + return 0; +diff -urp pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-07-08 10:53:14.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-08 10:42:58.000000000 -0400 +@@ -228,13 +228,13 @@ init_pads (void) + name = bfromcstr("screen"); + args = bfromcstr(""); + if ((activate_output_plugin(name, args)) == -1) +- log_message("warning: 'activate_output_plugin' in function 'init_pads' failed."); ++ err_message("Error: 'activate_output_plugin' in function 'init_pads' failed."); + bdestroy(name); + bdestroy(args); + /* output: csv */ + name = bfromcstr("csv"); + if ((activate_output_plugin(name, gc.report_file)) == -1) +- log_message("warning: 'activate_output_plugin' in function 'init_pads' failed."); ++ err_message("Error: 'activate_output_plugin' in function 'init_pads' failed."); + bdestroy(name); + } + diff --git a/pads-1.2-prelude.patch b/pads-1.2-prelude.patch new file mode 100644 index 0000000..8e25db2 --- /dev/null +++ b/pads-1.2-prelude.patch @@ -0,0 +1,1024 @@ +diff -urpN pads-1.2.orig/config.h.in pads-1.2/config.h.in +--- pads-1.2.orig/config.h.in 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/config.h.in 2008-07-07 15:41:50.000000000 -0400 +@@ -24,6 +24,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_PCRE_H + ++/* PRELUDE */ ++#undef HAVE_PRELUDE ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_SIGNAL_H + +diff -urpN pads-1.2.orig/configure.in pads-1.2/configure.in +--- pads-1.2.orig/configure.in 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/configure.in 2008-07-07 15:42:55.000000000 -0400 +@@ -97,6 +97,26 @@ AC_CHECK_LIB(pcap, pcap_open_live, + AC_MSG_ERROR([Cannot find PCAP libraries!!])) + + ## ++# Configure prelude ++## ++AC_ARG_WITH(prelude, ++AS_HELP_STRING([--with-prelude],[enable prelude IDS support]), ++use_prelude=$withval, ++use_prelude=no) ++if test x$use_prelude = xno ; then ++ have_prelude=no; ++else ++ AC_CHECK_LIB(prelude, prelude_init, have_prelude=yes, have_prelude=no) ++ if test x$have_prelude = xno ; then ++ AC_MSG_ERROR([Prelude explicitly required and prelude library not found]) ++ else ++ AC_DEFINE(HAVE_PRELUDE,1,[Have Prelude Libraries]) ++ LIBS="$LIBS -lprelude" ++ fi ++fi ++AM_CONDITIONAL(HAVE_PRELUDE, test x$have_prelude = xyes) ++ ++## + # Checks for header files. + ## + AC_CHECK_HEADERS([stdio.h stdarg.h signal.h time.h unistd.h]) +diff -urpN pads-1.2.orig/doc/pads.conf.8 pads-1.2/doc/pads.conf.8 +--- pads-1.2.orig/doc/pads.conf.8 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/doc/pads.conf.8 2008-07-07 15:41:50.000000000 -0400 +@@ -77,6 +77,9 @@ can be specified as an argument. + This output plugin writes PADS data to a FIFO file. Optionally, a FIFO + filename can be specified as an argument. + ++.IP "output prelude: " ++This output plugin writes PADS data as IDMEF alerts via prelude. Optionally you can add a profile name if you want something different than the default of pads. ++ + .SH SEE ALSO + pads(8) + +diff -urpN pads-1.2.orig/etc/pads.conf pads-1.2/etc/pads.conf +--- pads-1.2.orig/etc/pads.conf 2008-07-02 09:24:19.000000000 -0400 ++++ pads-1.2/etc/pads.conf 2008-07-07 15:41:50.000000000 -0400 +@@ -75,3 +75,11 @@ output csv: /etc/pads-assets.csv + # This output plugin writes PADS data to a FIFO file. Optionally, a FIFO + # filename can be specified as an argument. + #output fifo: pads.fifo ++ ++# output: prelude ++# ------------------------- ++# This output plugin writes PADS data as IDMEF alerts via prelude. Optionally ++# you can add a profile name if you want something different than the default ++# of pads. ++# ++#output prelude: pads +diff -urpN pads-1.2.orig/src/configuration.h pads-1.2/src/configuration.h +--- pads-1.2.orig/src/configuration.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/configuration.h 2008-07-07 15:41:50.000000000 -0400 +@@ -26,6 +26,8 @@ + * $Id: pads-1.2-prelude.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef CONFIGURATION_HEADER ++#define CONFIGURATION_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -40,8 +42,7 @@ + + /* INCLUDES ---------------------------------------- */ + #include "global.h" +- +-#include ++#include "configuration.h" + #include "bstring/bstrlib.h" + + /* PROTOTYPES -------------------------------------- */ +@@ -51,3 +52,6 @@ int conf_module_plugin (bstring value, i + + /* External Prototypes */ + int activate_output_plugin (bstring name, bstring args); ++ ++#endif ++ +diff -urpN pads-1.2.orig/src/output/Makefile.am pads-1.2/src/output/Makefile.am +--- pads-1.2.orig/src/output/Makefile.am 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/output/Makefile.am 2008-07-07 15:41:50.000000000 -0400 +@@ -6,4 +6,8 @@ liboutput_a_SOURCES = output.c output.h + output-csv.c output-csv.h \ + output-fifo.c output-fifo.h + ++if HAVE_PRELUDE ++liboutput_a_SOURCES += output-prelude.c output-prelude.h ++endif ++ + INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_srcdir)/lib +diff -urpN pads-1.2.orig/src/output/output.c pads-1.2/src/output/output.c +--- pads-1.2.orig/src/output/output.c 2008-06-30 17:54:33.000000000 -0400 ++++ pads-1.2/src/output/output.c 2008-07-07 15:41:50.000000000 -0400 +@@ -29,6 +29,7 @@ + #include "output-screen.h" + #include "output-csv.h" + #include "output-fifo.h" ++#include "output-prelude.h" + #include "storage.h" + + /* Local Variables */ +@@ -43,7 +44,7 @@ static OutputPluginList *output_plugin_l + * INPUT : None! + * RETURN : None! + * ---------------------------------------------------------- */ +-void init_output() ++int init_output(void) + { + + /* Load Screen Plug-in */ +@@ -55,6 +56,11 @@ void init_output() + /* Load FIFO Plug-in */ + setup_output_fifo(); + ++ /* Load Prelude Plug-in */ ++ if (setup_output_prelude() < 0) ++ return -1; ++ ++ return 0; + } + + /* ---------------------------------------------------------- +diff -urpN pads-1.2.orig/src/output/output.h pads-1.2/src/output/output.h +--- pads-1.2.orig/src/output/output.h 2008-06-30 13:56:52.000000000 -0400 ++++ pads-1.2/src/output/output.h 2008-07-07 15:41:50.000000000 -0400 +@@ -71,7 +71,7 @@ typedef struct _OutputPluginList + } OutputPluginList; + + /* PROTOTYPES -------------------------------------- */ +-void init_output(); ++int init_output(void); + int register_output_plugin (OutputPlugin *plugin); + int activate_output_plugin (bstring name, bstring args); + int print_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto); +diff -urpN pads-1.2.orig/src/output/output-prelude.c pads-1.2/src/output/output-prelude.c +--- pads-1.2.orig/src/output/output-prelude.c 1969-12-31 19:00:00.000000000 -0500 ++++ pads-1.2/src/output/output-prelude.c 2008-07-07 15:41:50.000000000 -0400 +@@ -0,0 +1,513 @@ ++/************************************************************************* ++ * output-prelude.c ++ * ++ * This module contains the output mechanism for PADS to send IDMEF alerts ++ * via the prelude library ++ * ++ * Copyright (C) 2008 Steve Grubb ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ **************************************************************************/ ++#include "output-prelude.h" ++#include "util.h" ++#include "pads.h" // For argc/v and gc ++#include ++#include ++ ++#define ANALYZER_MODEL "pads" ++#define ANALYZER_CLASS "PVS" ++#define ANALYZER_MANUFACTURER "http://passive.sourceforge.net" ++#define PRELUDE_FAIL_CHECK if (ret < 0) goto err; ++static prelude_client_t *client = NULL; ++static char *profile = NULL; ++ ++static int setup_analyzer(idmef_analyzer_t *analyzer) ++{ ++ int ret; ++ prelude_string_t *string; ++ ++ ret = idmef_analyzer_new_model(analyzer, &string); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_dup(string, ANALYZER_MODEL); ++ ++ ret = idmef_analyzer_new_class(analyzer, &string); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_dup(string, ANALYZER_CLASS); ++ ++ ret = idmef_analyzer_new_manufacturer(analyzer, &string); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_dup(string, ANALYZER_MANUFACTURER); ++ ++ ret = idmef_analyzer_new_version(analyzer, &string); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_dup(string, PACKAGE_VERSION); ++ ++ return 0; ++ ++ err: ++ log_message("%s: IDMEF error: %s.\n", ++ prelude_strsource(ret), prelude_strerror(ret)); ++ ++ return -1; ++} ++ ++static int init_prelude(void) ++{ ++ int ret; ++ prelude_client_flags_t flags; ++ ++ ret = prelude_thread_init(NULL); ++ ret = prelude_init(&prog_argc, prog_argv); ++ if (ret < 0) { ++ log_message("Unable to initialize the Prelude library: %s.\n", ++ prelude_strerror(ret)); ++ return -1; ++ } ++ ret = prelude_client_new(&client, profile ? profile : ANALYZER_MODEL); ++ if (!client) { ++ log_message("Unable to create a prelude client object: %s.\n", ++ prelude_strerror(ret)); ++ return -1; ++ } ++ ret = setup_analyzer(prelude_client_get_analyzer(client)); ++ if (ret < 0) { ++ log_message("Unable to setup analyzer: %s\n", ++ prelude_strerror(ret)); ++ ++ prelude_client_destroy(client, ++ PRELUDE_CLIENT_EXIT_STATUS_FAILURE); ++ return -1; ++ } ++ flags = prelude_client_get_flags(client); ++ flags |= PRELUDE_CLIENT_FLAGS_ASYNC_TIMER; ++ ret = prelude_client_set_flags(client, flags); ++ if (ret < 0) { ++ log_message("Unable to set prelude client flags: %s\n", ++ prelude_strerror(ret)); ++ ++ prelude_client_destroy(client, ++ PRELUDE_CLIENT_EXIT_STATUS_FAILURE); ++ return -1; ++ } ++ ret = prelude_client_start(client); ++ if (ret < 0) { ++ log_message("Unable to start prelude client: %s\n", ++ prelude_strerror(ret)); ++ ++ prelude_client_destroy(client, ++ PRELUDE_CLIENT_EXIT_STATUS_FAILURE); ++ return -1; ++ } ++ return 0; ++} ++ ++static int new_alert_common(idmef_message_t **idmef, idmef_alert_t **alert) ++{ ++ int ret; ++ idmef_time_t *ctime; ++ ++ ret = idmef_message_new(idmef); ++ PRELUDE_FAIL_CHECK; ++ ++ ret = idmef_message_new_alert(*idmef, alert); ++ PRELUDE_FAIL_CHECK; ++ ++ idmef_alert_set_analyzer(*alert, ++ idmef_analyzer_ref(prelude_client_get_analyzer(client)), ++ IDMEF_LIST_PREPEND); ++ ++ // Set time this was created ++ ret = idmef_time_new_from_gettimeofday(&ctime); ++ PRELUDE_FAIL_CHECK; ++ idmef_alert_set_detect_time(*alert, ctime); ++ idmef_alert_set_create_time(*alert, ctime); ++ ++ return 0; ++ err: ++ syslog(LOG_ERR, "%s: IDMEF error: %s.\n", ++ prelude_strsource(ret), prelude_strerror(ret)); ++ idmef_message_destroy(*idmef); ++ return -1; ++} ++ ++static int set_classification(idmef_alert_t *alert, const char *text) ++{ ++ int ret; ++ idmef_classification_t *classification; ++ prelude_string_t *str; ++ ++ ret = idmef_alert_new_classification(alert, &classification); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_new(&str); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_set_ref(str, text); ++ PRELUDE_FAIL_CHECK; ++ idmef_classification_set_text(classification, str); ++ ++ return 0; ++ err: ++ return -1; ++} ++ ++static int do_assessment(idmef_alert_t *alert, ++ idmef_impact_severity_t severity, ++ idmef_impact_type_t type, const char *descr) ++{ ++ int ret; ++ idmef_assessment_t *assessment; ++ idmef_impact_t *impact; ++ ++ ret = idmef_alert_new_assessment(alert, &assessment); ++ PRELUDE_FAIL_CHECK; ++ ret = idmef_assessment_new_impact(assessment, &impact); ++ PRELUDE_FAIL_CHECK; ++ idmef_impact_set_severity(impact, severity); ++ idmef_impact_set_type(impact, type); ++ if (descr) { ++ prelude_string_t *str; ++ ret = idmef_impact_new_description(impact, &str); ++ prelude_string_set_ref(str, descr); ++ } ++ idmef_impact_set_completion(impact, IDMEF_IMPACT_COMPLETION_SUCCEEDED); ++ return 0; ++ err: ++ return -1; ++} ++ ++// FIXME: handle ipv6 addresses ++static int fill_in_node_addr(idmef_node_t *node, struct in_addr *addr) ++{ ++ int ret; ++ prelude_string_t *str; ++ char buf[INET6_ADDRSTRLEN+1]; ++ ++ inet_ntop(AF_INET, addr, buf, sizeof(buf)); ++ ++ /* Setup the address string */ ++ ret = prelude_string_new(&str); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_set_dup(str, buf); ++ PRELUDE_FAIL_CHECK; ++ ++ /* Now record IP address */ ++ idmef_address_t *my_addr; ++ ret = idmef_address_new(&my_addr); ++ PRELUDE_FAIL_CHECK; ++ idmef_address_set_category(my_addr, IDMEF_ADDRESS_CATEGORY_IPV4_ADDR); ++ idmef_address_set_address(my_addr, str); ++ idmef_node_set_address(node, my_addr, 0); ++ ++ return 0; ++ err: ++ return -1; ++} ++ ++// FIXME: handle ipv6 addresses ++static int fill_in_node_mac(idmef_node_t *node, ArpAsset *a) ++{ ++ int ret; ++ prelude_string_t *str, *mac_str; ++ char buf[INET6_ADDRSTRLEN+1]; ++ ++ inet_ntop(AF_INET, &a->ip_addr, buf, sizeof(buf)); ++ ++ /* Setup the address string */ ++ ret = prelude_string_new(&str); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_set_dup(str, buf); ++ PRELUDE_FAIL_CHECK; ++ ++ /* Now record IP address */ ++ idmef_address_t *my_addr; ++ ret = idmef_address_new(&my_addr); ++ PRELUDE_FAIL_CHECK; ++ idmef_address_set_category(my_addr, IDMEF_ADDRESS_CATEGORY_IPV4_ADDR); ++ idmef_address_set_address(my_addr, str); ++ idmef_node_set_address(node, my_addr, 0); ++ ++ /* Now record MAC address */ ++ idmef_address_t *mac_addr; ++ ret = idmef_address_new(&mac_addr); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_new(&mac_str); ++ PRELUDE_FAIL_CHECK; ++ idmef_address_set_category(mac_addr, IDMEF_ADDRESS_CATEGORY_MAC); ++ ret = prelude_string_set_dup(mac_str, hex2mac(a->mac_addr)); ++ PRELUDE_FAIL_CHECK; ++ idmef_address_set_address(mac_addr, mac_str); ++ idmef_node_set_address(node, mac_addr, 0); ++ return 0; ++ err: ++ return -1; ++} ++ ++ ++static int asset_alert(Asset *a, idmef_message_t *idmef, ++ idmef_alert_t *alert, const char *msg, ++ idmef_impact_severity_t severity, char *descr) ++{ ++ int ret; ++ idmef_source_t *source; ++ idmef_target_t *target; ++ idmef_node_t *node, *node2; ++ idmef_service_t *service; ++ idmef_impact_type_t impact; ++ prelude_string_t *name, *str; ++ idmef_additional_data_t *data; ++ ++ /* Fill in information about the event's source */ ++ ret = idmef_alert_new_source(alert, &source, -1); ++ PRELUDE_FAIL_CHECK; ++ ret = idmef_source_new_node(source, &node); ++ PRELUDE_FAIL_CHECK; ++ idmef_node_set_category(node, IDMEF_NODE_CATEGORY_UNKNOWN); ++ ret = fill_in_node_addr(node, &a->ip_addr); ++ PRELUDE_FAIL_CHECK; ++ ++ // Describe the service ++ ret = idmef_source_new_service(source, &service); ++ PRELUDE_FAIL_CHECK; ++ idmef_service_set_iana_protocol_number(service, a->proto); ++ idmef_service_set_ip_version(service, 4); ++ idmef_service_set_port(service, ntohs(a->port)); ++ ret = prelude_string_new(&name); ++ PRELUDE_FAIL_CHECK; ++ ret = prelude_string_set_dup(name, (char *)bdata(a->service)); ++ PRELUDE_FAIL_CHECK; ++ if (bdata(a->application) != NULL) { ++ ret = idmef_alert_new_additional_data(alert, &data, ++ IDMEF_LIST_APPEND); ++ PRELUDE_FAIL_CHECK; ++ ret = idmef_additional_data_new_meaning(data, &str); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_ref(str, "Application"); ++ idmef_additional_data_set_type(data, ++ IDMEF_ADDITIONAL_DATA_TYPE_STRING); ++ idmef_additional_data_set_string_dup(data, ++ (char *)bdata(a->application)); ++ } ++ ++ /* Fill in information about the target of the event */ ++ ret = idmef_alert_new_target(alert, &target, -1); ++ PRELUDE_FAIL_CHECK; ++ ++ /* FIXME: I assume that the target is the whole network */ ++ ret = idmef_target_new_node(target, &node2); ++ PRELUDE_FAIL_CHECK; ++ idmef_node_set_category(node, IDMEF_NODE_CATEGORY_UNKNOWN); ++ ++ /* Describe event */ ++ ret = set_classification(alert, msg); ++ PRELUDE_FAIL_CHECK; ++ ++ /* Assess impact */ ++ impact = IDMEF_IMPACT_TYPE_OTHER; ++ ret = do_assessment(alert, severity, impact, descr); ++ PRELUDE_FAIL_CHECK; ++ ++ prelude_client_send_idmef(client, idmef); ++ idmef_message_destroy(idmef); ++ ++ return 0; ++ err: ++ syslog(LOG_ERR, "asset_alert: IDMEF error: %s.\n", ++ prelude_strerror(ret)); ++ idmef_message_destroy(idmef); ++ return -1; ++} ++ ++ ++static int arp_alert(ArpAsset *a, idmef_message_t *idmef, ++ idmef_alert_t *alert, const char *msg, ++ idmef_impact_severity_t severity, char *descr) ++{ ++ int ret; ++ idmef_source_t *source; ++ idmef_target_t *target; ++ idmef_node_t *node, *node2; ++ idmef_impact_type_t impact; ++ prelude_string_t *str; ++ idmef_additional_data_t *data; ++ ++ /* Fill in information about the event's source */ ++ ret = idmef_alert_new_source(alert, &source, -1); ++ PRELUDE_FAIL_CHECK; ++ ret = idmef_source_new_node(source, &node); ++ PRELUDE_FAIL_CHECK; ++ idmef_node_set_category(node, IDMEF_NODE_CATEGORY_UNKNOWN); ++ ret = fill_in_node_mac(node, a); ++ PRELUDE_FAIL_CHECK; ++ ++ if (bdata(a->mac_resolved) != NULL) { ++ ret = idmef_alert_new_additional_data(alert, &data, ++ IDMEF_LIST_APPEND); ++ PRELUDE_FAIL_CHECK; ++ ret = idmef_additional_data_new_meaning(data, &str); ++ PRELUDE_FAIL_CHECK; ++ prelude_string_set_ref(str, "Vendor"); ++ idmef_additional_data_set_type(data, ++ IDMEF_ADDITIONAL_DATA_TYPE_STRING); ++ idmef_additional_data_set_string_dup(data, ++ (char *)bdata(a->mac_resolved)); ++ } ++ ++ /* Fill in information about the target of the event */ ++ ret = idmef_alert_new_target(alert, &target, -1); ++ PRELUDE_FAIL_CHECK; ++ ++ /* FIXME: I assume that the target is the whole network */ ++ ret = idmef_target_new_node(target, &node2); ++ PRELUDE_FAIL_CHECK; ++ idmef_node_set_category(node, IDMEF_NODE_CATEGORY_UNKNOWN); ++ ++ /* Describe event */ ++ ret = set_classification(alert, msg); ++ PRELUDE_FAIL_CHECK; ++ ++ /* Assess impact */ ++ impact = IDMEF_IMPACT_TYPE_OTHER; ++ ret = do_assessment(alert, severity, impact, descr); ++ PRELUDE_FAIL_CHECK; ++ ++ prelude_client_send_idmef(client, idmef); ++ idmef_message_destroy(idmef); ++ ++ return 0; ++ err: ++ syslog(LOG_ERR, "arp_alert: IDMEF error: %s.\n", ++ prelude_strerror(ret)); ++ idmef_message_destroy(idmef); ++ return -1; ++} ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : setup_output_screen ++ * DESCRIPTION : This function will register the output ++ * : plugin. ++ * INPUT : None! ++ * RETURN : 0 - Success ++ * : -1 - Error ++ * ---------------------------------------------------------- */ ++int ++setup_output_prelude (void) ++{ ++ OutputPlugin *plugin; ++ ++ ++ if (init_prelude() < 0) ++ return -1; ++ ++ /* Allocate and setup plugin data record. */ ++ plugin = (OutputPlugin*)malloc(sizeof(OutputPlugin)); ++ plugin->name = bfromcstr("prelude"); ++ plugin->init = init_output_prelude; ++ plugin->print_asset = print_asset_prelude; ++ plugin->print_arp = print_arp_asset_prelude; ++ plugin->print_stat = NULL; ++ plugin->end = end_output_prelude; ++ ++ /* Register plugin with input module. */ ++ if ((register_output_plugin(plugin)) == -1) { ++ if (plugin != NULL) ++ free(plugin); ++ log_message("warning: 'register_output_plugin' in function 'setup_output_prelude' failed."); ++ } ++ ++ return 0; ++} ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : init_output_prelude ++ * DESCRIPTION : This output module will initialize the prelude ++ * : subsystem. ++ * INPUT : None ++ * RETURN : 0 - Success ++ * : -1 - Error ++ * --------------------------------------------------------- */ ++int ++init_output_prelude (bstring args) ++{ ++ verbose_message("Initializing PRELUDE output processor."); ++ profile = strdup((char *)bdata(args)); ++ return 0; ++} ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : print_asset_prelude ++ * DESCRIPTION : This function will send asset events to prelude ++ * INPUT : 0 - Port ++ * : 1 - IP Address ++ * : 2 - Service ++ * : 3 - Application ++ * RETURN : 0 - Success ++ * : -1 - Error ++ * ---------------------------------------------------------- */ ++int ++print_asset_prelude (Asset *rec) ++{ ++ idmef_message_t *idmef; ++ idmef_alert_t *alert; ++ ++ if (new_alert_common(&idmef, &alert) >= 0){ ++ asset_alert(rec, idmef, alert, ++ "New Network Asset Detected", IDMEF_IMPACT_SEVERITY_LOW, ++ "A service that was not previously known has been used."); ++ } ++ return 0; ++} ++ ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : print_arp_asset_prelude ++ * DESCRIPTION : This function will send ARP asset events to prelude ++ * INPUT : 0 - IP Address ++ * : 1 - MAC Address ++ * RETURN : 0 - Success ++ * : -1 - Error ++ * ---------------------------------------------------------- */ ++int ++print_arp_asset_prelude (ArpAsset *rec) ++{ ++ idmef_message_t *idmef; ++ idmef_alert_t *alert; ++ ++ if (new_alert_common(&idmef, &alert) >= 0){ ++ arp_alert(rec, idmef, alert, ++ "New MAC Address Detected", IDMEF_IMPACT_SEVERITY_INFO, ++ "A network card that was not previously known has been used."); ++ } ++ return 0; ++} ++ ++/* ---------------------------------------------------------- ++ * FUNCTION : end_output_prelude ++ * DESCRIPTION : This function will free the resources used ++ * : by the prelude output module. ++ * INPUT : None! ++ * RETURN : None! ++ * ---------------------------------------------------------- */ ++int ++end_output_prelude () ++{ ++ verbose_message("Ending PRELUDE Output Processor."); ++ ++ if (client) ++ prelude_client_destroy(client, PRELUDE_CLIENT_EXIT_STATUS_SUCCESS); ++ free(profile); ++ ++ return 0; ++} ++ +diff -urpN pads-1.2.orig/src/output/output-prelude.h pads-1.2/src/output/output-prelude.h +--- pads-1.2.orig/src/output/output-prelude.h 1969-12-31 19:00:00.000000000 -0500 ++++ pads-1.2/src/output/output-prelude.h 2008-07-07 15:41:50.000000000 -0400 +@@ -0,0 +1,54 @@ ++/************************************************************************* ++ * output-prelude.h ++ * ++ * This module contains the output mechanism for PADS to send IDMEF alerts ++ * via the prelude library. ++ * ++ * Copyright (C) 2008 Steve Grubb ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ **************************************************************************/ ++#ifndef OUTPUT_PRELUDE_HEADER ++#define OUTPUT_PRELUDE_HEADER ++ ++/* DEFINES ----------------------------------------- */ ++#ifdef LINUX ++#ifndef __FAVOR_BSD ++#define __FAVOR_BSD ++#endif ++#ifndef _BSD_SOURCE ++#define _BSD_SOURCE ++#endif ++#endif /* ifdef LINUX */ ++ ++ ++/* INCLUDES ---------------------------------------- */ ++#include "output.h" ++ ++ ++/* PROTOTYPES -------------------------------------- */ ++#ifdef HAVE_PRELUDE ++int setup_output_prelude (void); ++#else ++#define setup_output_prelude() 0 ++#endif ++int init_output_prelude (bstring args); ++int print_asset_prelude (Asset *rec); ++int print_arp_asset_prelude (ArpAsset *rec); ++int end_output_prelude (void); ++ ++#endif ++ +diff -urpN pads-1.2.orig/src/pads.c pads-1.2/src/pads.c +--- pads-1.2.orig/src/pads.c 2008-07-02 09:24:53.000000000 -0400 ++++ pads-1.2/src/pads.c 2008-07-07 15:41:50.000000000 -0400 +@@ -43,6 +43,18 @@ int prog_argc; + + /* Function Declarations */ + static int process_cmdline (int argc, char *argv[]); ++static void set_processor (pcap_t *this_handle); ++static void print_header(void); ++static void print_usage(void); ++static void print_version(void); ++static int init_pads(void); ++static int main_pads(void); ++ ++static void sig_term_handler(int signal); ++static void sig_int_handler(int signal); ++static void sig_quit_handler(int signal); ++static void sig_hup_handler(int signal); ++ + + /* ---------------------------------------------------------- + * FUNCTION : process_pkt +@@ -68,7 +80,7 @@ process_pkt (u_char *args, const struct + * INPUT : PCAP Handle + * RETURN : None! + * ---------------------------------------------------------- */ +-void ++static void + set_processor (pcap_t *this_handle) + { + int datalink; +@@ -100,7 +112,7 @@ set_processor (pcap_t *this_handle) + * FUNCTION : print_header + * DESCRIPTION : Prints initial header. + * ---------------------------------------------------------- */ +-void ++static void + print_header () + { + printf("pads - Passive Asset Detection System\n"); +@@ -113,7 +125,7 @@ print_header () + * FUNCTION : print_usage + * DESCRIPTION : Prints the Program Usage + * ---------------------------------------------------------- */ +-void ++static void + print_usage() + { + printf("Usage:\n" +@@ -148,7 +160,7 @@ print_usage() + * DESCRIPTION : This function will print version + * : version information. + * ---------------------------------------------------------- */ +-void ++static void + print_version (void) + { + printf("Build:\n"); +@@ -162,7 +174,7 @@ print_version (void) + } + + /* ---------------------------------------------------------- +- * FUNCTION : init_pads ++ * FUNCTION : init_gc + * DESCRIPTION : This function will initialize PADS. + * ---------------------------------------------------------- */ + void init_gc(void) +@@ -185,8 +197,9 @@ void init_gc(void) + /* ---------------------------------------------------------- + * FUNCTION : init_pads + * DESCRIPTION : This function will initialize PADS. ++ * RETURN : 0 success, -1 failure + * ---------------------------------------------------------- */ +-void ++static int + init_pads (void) + { + /* Init global config to known state */ +@@ -199,7 +212,8 @@ init_pads (void) + print_header(); + + /* Initialize Output Module */ +- init_output(); ++ if (init_output() < 0) ++ return -1; + + /* Process the configuration file. */ + if (gc.conf_file) { +@@ -230,7 +244,10 @@ init_pads (void) + + /* Daemon Mode: fork child process */ + if (gc.daemon_mode) { +- daemonize(); ++ verbose_message("[-] Daemonizing...\n"); ++ if (daemon(0, 0) < 0) { ++ err_message("Daemonize failed"); ++ } + init_pid_file(gc.pid_file, gc.priv_user, gc.priv_group); + } + +@@ -239,17 +256,21 @@ init_pads (void) + (void) signal(SIGINT, sig_int_handler); + (void) signal(SIGQUIT, sig_quit_handler); + (void) signal(SIGHUP, sig_hup_handler); ++ ++ return 0; + } + + /* ---------------------------------------------------------- + * FUNCTION : main_pads + * DESCRIPTION : This is the main function for PADS. ++ * RETURN : 0 success, -1 failure + * ---------------------------------------------------------- */ +-void ++static int + main_pads (void) + { + /* Initialize */ +- init_pads(); ++ if (init_pads() < 0) ++ return -1; + + if (gc.pcap_file) { + /* Read from PCAP file specified by '-r' switch. */ +@@ -324,6 +345,7 @@ main_pads (void) + + /* End */ + end_pads(); ++ return 0; + } + + /* ---------------------------------------------------------- +@@ -490,25 +512,25 @@ process_cmdline (int argc, char *argv[]) + * initialized in 'init_pads' and will perform a function + * based on the signal. + * ---------------------------------------------------------- */ +-void ++static void + sig_term_handler(int signal) + { + end_pads(); + } + +-void ++static void + sig_int_handler(int signal) + { + end_pads(); + } + +-void ++static void + sig_quit_handler(int signal) + { + end_pads(); + } + +-void ++static void + sig_hup_handler(int signal) + { + /* The HUP signal has not been implemented yet. */ +@@ -526,9 +548,7 @@ main(int argc, char *argv[]) + prog_argv = argv; + + /* Main Program */ +- main_pads(); +- +- return(0); ++ return main_pads(); + } + + /* vim:expandtab:cindent:smartindent:ts=4:tw=0:sw=4: +diff -urpN pads-1.2.orig/src/pads.h pads-1.2/src/pads.h +--- pads-1.2.orig/src/pads.h 2008-06-29 20:16:30.000000000 -0400 ++++ pads-1.2/src/pads.h 2008-07-07 15:41:50.000000000 -0400 +@@ -25,6 +25,8 @@ + * $Id: pads-1.2-prelude.patch,v 1.1 2008/08/13 17:35:11 sgrubb Exp $ + * + **************************************************************************/ ++#ifndef PADS_HEADER ++#define PADS_HEADER + + /* DEFINES ----------------------------------------- */ + #ifdef LINUX +@@ -51,25 +53,19 @@ + /* TYPEDEFS ---------------------------------------- */ + typedef void (*proc_t)(const struct pcap_pkthdr *, const u_char *); + ++extern char **prog_argv; ++extern int prog_argc; ++extern GC gc; ++ + + /* PROTOTYPES -------------------------------------- */ + void process_pkt(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet); +-void set_processor (pcap_t *this_handle); +-void print_header(void); +-void print_usage(void); +-void print_version(void); +-void init_pads(void); +-void main_pads(void); + void end_pads(void); + +-void sig_term_handler(int signal); +-void sig_int_handler(int signal); +-void sig_quit_handler(int signal); +-void sig_hup_handler(int signal); +- + /* packet.h LLC prototypes */ + void process_eth (const struct pcap_pkthdr* pkthdr, const u_char* packet); + void process_sll (const struct pcap_pkthdr* pkthdr, const u_char* packet); + + /* vim:expandtab:cindent:smartindent:ts=4:tw=0:sw=4: + */ ++#endif +diff -urpN pads-1.2.orig/src/util.c pads-1.2/src/util.c +--- pads-1.2.orig/src/util.c 2008-07-07 13:56:10.000000000 -0400 ++++ pads-1.2/src/util.c 2008-07-07 15:41:50.000000000 -0400 +@@ -75,38 +75,6 @@ chomp (char *string, int size) + } + + /* ---------------------------------------------------------- +- * FUNCTION : daemonize +- * DESCRIPTION : This function will place the application in +- * : the background. +- * INPUT : None! +- * RETURN : None! +- * ---------------------------------------------------------- */ +-void +-daemonize () +-{ +- pid_t pid; +- +- if (!gc.daemon_mode) +- printf("[-] Daemonizing...\n"); +- +- pid = fork(); +- if (pid > 0) { +- /* Parent */ +- exit(0); +- } else if (pid < 0) { +- /* Error */ +- err_message("fork"); +- exit(0); +- } else { +- /* Child */ +- setsid(); +- close(0); +- close(1); +- close(2); +- } +-} +- +-/* ---------------------------------------------------------- + * FUNCTION : init_pid_file + * DESCRIPTION : This function will generate a file + * : containing the application's PID. +diff -urpN pads-1.2.orig/src/util.h pads-1.2/src/util.h +--- pads-1.2.orig/src/util.h 2008-07-07 13:56:10.000000000 -0400 ++++ pads-1.2/src/util.h 2008-07-07 15:41:50.000000000 -0400 +@@ -39,12 +39,27 @@ + /* PROTOTYPES -------------------------------------- */ + void strip_comment (char *string); + int chomp (char *string, int size); +-void daemonize (void); + void init_pid_file (bstring pid_file, bstring user, bstring group); + char *copy_argv(register char **argv); +-void log_message (const char *msg, ...); +-void err_message (const char *msg, ...); +-void verbose_message (const char *msg, ...); ++void log_message (const char *msg, ...) ++#ifdef __GNUC__ ++ __attribute__ ((format (printf, 1, 2))); ++#else ++ ; ++#endif ++void err_message (const char *msg, ...) ++#ifdef __GNUC__ ++ __attribute__ ((format (printf, 1, 2))); ++#else ++ ; ++#endif ++void verbose_message (const char *msg, ...) ++#ifdef __GNUC__ ++ __attribute__ ((format (printf, 1, 2))); ++#else ++ ; ++#endif ++ + #ifndef HAVE_STRLCPY + size_t strlcpy(char *dst, const char *src, size_t size); + #endif diff --git a/pads-1.2-readonly.patch b/pads-1.2-readonly.patch new file mode 100644 index 0000000..0304097 --- /dev/null +++ b/pads-1.2-readonly.patch @@ -0,0 +1,153 @@ +diff -urp pads-1.2.orig/doc/pads.conf.8 pads-1.2/doc/pads.conf.8 +--- pads-1.2.orig/doc/pads.conf.8 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/doc/pads.conf.8 2008-07-08 17:36:41.000000000 -0400 +@@ -69,9 +69,12 @@ assets found in these networks will be r + This output plugin displays PADS data to the screen. When using the + configuration file, it defaults to off. + +-.IP "output csv: " ++.IP "output csv: [readonly]" + This output plugin writes PADS data to a CSV file. Optionally, a CSV filename +-can be specified as an argument. ++can be specified as an argument. If you want the file used only to populate ++the internal known assets list but never be updated, then use the readonly ++option. This would be handy when you have a baseline and want to use it for ++intrusion detection. + + .IP "output fifo: " + This output plugin writes PADS data to a FIFO file. Optionally, a FIFO +diff -urp pads-1.2.orig/etc/pads.conf pads-1.2/etc/pads.conf +--- pads-1.2.orig/etc/pads.conf 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/etc/pads.conf 2008-07-08 17:36:51.000000000 -0400 +@@ -67,7 +67,9 @@ pid_file /var/run/pads.pid + # output: csv + # ------------------------- + # This output plugin writes PADS data to a CSV file. Optionally, a CSV filename +-# can be specified as an argument. ++# can be specified as an argument. If you want the file used only to populate ++# the internal known assets list but never be updated, then add the readonly ++# option. + output csv: /etc/pads-assets.csv + + # output: fifo +@@ -81,5 +83,4 @@ output csv: /etc/pads-assets.csv + # This output plugin writes PADS data as IDMEF alerts via prelude. Optionally + # you can add a profile name if you want something different than the default + # of pads. +-# + #output prelude: pads +diff -urp pads-1.2.orig/src/output/output-csv.c pads-1.2/src/output/output-csv.c +--- pads-1.2.orig/src/output/output-csv.c 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/output/output-csv.c 2008-07-08 17:36:41.000000000 -0400 +@@ -60,6 +60,9 @@ setup_output_csv (void) + log_message("warning: 'register_output_plugin' in function 'setup_output_csv' failed."); + return -1; + } ++ output_csv_conf.filename = NULL; ++ output_csv_conf.file = NULL; ++ output_csv_conf.readonly = 0; + + return 0; + } +@@ -81,22 +84,39 @@ init_output_csv (bstring filename) + verbose_message("Initializing CSV output plugin."); + + /* Make sure filename isn't NULL. */ +- if (filename != NULL) +- output_csv_conf.filename = bstrcpy(filename); +- else ++ if (filename != NULL) { ++ /* Parse the args looking for readonly and file name */ ++ int i; ++ struct bstrList *list = bsplit(filename, ' '); ++ if (list->qty > 2) { ++ err_message("Too many args for output csv"); ++ return -1; ++ } ++ for (i=0; i< list->qty; i++) { ++ if (biseqcstr(list->entry[i], "readonly") == 1) { ++ output_csv_conf.readonly = 1; ++ verbose_message("Using csv file in read only mode."); ++ } else if (output_csv_conf.filename == NULL) ++ output_csv_conf.filename = bstrcpy(filename); ++ else ++ err_message("Unrecognized output csv option"); ++ } ++ bstrListDestroy(list); ++ } else + output_csv_conf.filename = bfromcstr("assets.csv"); + + /* Check to see if *filename exists. */ + if ((fp = fopen((char *)bdata(output_csv_conf.filename), "r")) == NULL) { + +- /* File does not exist, create new.. */ +- if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "w")) != NULL) { +- fprintf(output_csv_conf.file, "asset,port,proto,service,application,discovered\n"); +- fflush(output_csv_conf.file); +- +- } else { +- err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); +- return -1; ++ if (output_csv_conf.readonly == 0) { ++ /* File does not exist, create new.. */ ++ if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "w")) != NULL) { ++ fprintf(output_csv_conf.file, "asset,port,proto,service,application,discovered\n"); ++ fflush(output_csv_conf.file); ++ } else { ++ err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); ++ return -1; ++ } + } + + } else { +@@ -105,11 +125,14 @@ init_output_csv (bstring filename) + fclose(fp); + read_report_file(); + +- /* Open file and assign it to the global FILE pointer. */ +- if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "a")) == NULL) { +- err_message("Cannot open file %s!", bdata(output_csv_conf.filename)); +- return -1; +- } ++ if (output_csv_conf.readonly == 0) { ++ /* Open file and assign it to the global FILE pointer. */ ++ if ((output_csv_conf.file = fopen((char *)bdata(output_csv_conf.filename), "a")) == NULL) { ++ err_message("Cannot open file %s!", ++ bdata(output_csv_conf.filename)); ++ return -1; ++ } ++ } + } + + return 0; +@@ -255,6 +278,9 @@ parse_raw_report (bstring line) + int + print_asset_csv (Asset *rec) + { ++ if (output_csv_conf.readonly) ++ return 0; ++ + if (output_csv_conf.file != NULL) { + if (gc.hide_unknowns == 0 || ((biseqcstr(rec->service, "unknown") != 0) && + (biseqcstr(rec->application, "unknown") != 0))) { +@@ -285,6 +311,9 @@ print_asset_csv (Asset *rec) + int + print_arp_asset_csv (ArpAsset *rec) + { ++ if (output_csv_conf.readonly) ++ return 0; ++ + /* Print to File */ + if (output_csv_conf.file != NULL) { + if (rec->mac_resolved != NULL) { +diff -urp pads-1.2.orig/src/output/output-csv.h pads-1.2/src/output/output-csv.h +--- pads-1.2.orig/src/output/output-csv.h 2008-07-08 14:28:29.000000000 -0400 ++++ pads-1.2/src/output/output-csv.h 2008-07-08 17:36:41.000000000 -0400 +@@ -50,6 +50,7 @@ typedef struct _OutputCSVConf + { + FILE *file; + bstring filename; ++ int readonly; + } OutputCSVConf; + + diff --git a/pads.init b/pads.init new file mode 100644 index 0000000..98ceacd --- /dev/null +++ b/pads.init @@ -0,0 +1,90 @@ +#!/bin/sh +# Startup script for pads +# +# chkconfig: - 40 60 +# description: Run pads +# config /etc/pads/pads.conf + +PATH=/sbin:/bin:/usr/bin:/usr/sbin +prog="pads" + +# Source function library. +. /etc/rc.d/init.d/functions + +# Allow anyone to run status +if [ "$1" = "status" ] ; then + status $prog + RETVAL=$? + exit $RETVAL +fi + +# Check that we are root ... so non-root users stop here +test $EUID = 0 || exit 4 + +# Check config +test -f /etc/sysconfig/pads && . /etc/sysconfig/pads + +RETVAL=0 + +start() { + test -x /usr/bin/$prog || exit 5 + test -f $CONFIG_FILE || exit 6 + + if test "x`pidof $prog`" != x; then + echo "$prog already started" + action $"Starting $prog: " /bin/false + RETVAL=1 + return $RETVAL + else + echo -n $"Starting $prog: " + unset HOME MAIL USER USERNAME + daemon $prog -D -c $CONFIG_FILE $EXTRA_OPTIONS + RETVAL=$? + if test $RETVAL = 0 ; then + touch /var/lock/subsys/$prog + fi + echo + return $RETVAL + fi +} + +stop() { + if test "x`pidof $prog`" != x; then + echo -n $"Stopping $prog: " + killproc $prog + RETVAL=$? + echo + fi + rm -f /var/lock/subsys/$prog + return $RETVAL +} + +case "$1" in + start) + start + ;; + + stop) + stop + ;; + + restart|reload) + stop + sleep 3 + start + ;; + condrestart) + if test "x`pidof prog`" != x; then + stop + start + fi + ;; + + *) + echo $"Usage: $0 {start|stop|restart|condrestart|status}" + RETVAL=3 + +esac + +exit $RETVAL + diff --git a/pads.spec b/pads.spec new file mode 100644 index 0000000..a9ba28f --- /dev/null +++ b/pads.spec @@ -0,0 +1,107 @@ +Name: pads +Version: 1.2 +Release: 1%{?dist} +Summary: Passive Asset Detection System +Group: Applications/System +License: GPLv2+ +URL: http://passive.sourceforge.net/ +Source0: http://prdownloads.sourceforge.net/passive/%{name}-%{version}.tar.gz +Source1: pads.init +Source2: pads.sysconfig +Patch1: pads-1.2-cleanup.patch +Patch2: pads-1.2-memleak.patch +Patch3: pads-1.2-overrun.patch +Patch4: pads-1.2-disable-debug.patch +Patch5: pads-1.2-daemonize.patch +Patch6: pads-1.2-ether-codes-update.patch +Patch7: pads-1.2-misc.patch +Patch8: pads-1.2-arp.patch +Patch9: pads-1.2-prelude.patch +Patch10: pads+vlan.patch +Patch11: pads-1.2-prelude-cleanup.patch +Patch12: pads-1.2-readonly.patch +Patch13: pads-1.2-bstring.patch +Patch14: pads-1.2-leak.patch +Patch15: pads-1.2-perf.patch +Patch16: pads-1.2-daemon.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: automake autoconf +BuildRequires: pcre-devel libpcap-devel +BuildRequires: libprelude-devel +Requires(post) : /sbin/chkconfig +Requires(preun) : /sbin/chkconfig +Requires(preun) : /sbin/service +Requires(postun): /sbin/service + +%description +PADS is a libpcap based detection engine used to passively +detect network assets. It is designed to complement IDS +technology by providing context to IDS alerts. When new assets +are found, it can send IDMEF alerts via prelude. + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 + +%build +autoreconf -fv --install +%configure --with-prelude +make %{?_smp_mflags} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}%{_initrddir} +mkdir -p %{buildroot}%{_sysconfdir}/sysconfig +make install DESTDIR=%{buildroot} +install -m 755 %SOURCE1 %{buildroot}%{_initrddir}/%{name} +install -m 640 %SOURCE2 %{buildroot}%{_sysconfdir}/sysconfig/%{name} +# Remove installed docs since we pick this up another way +rm -rf $RPM_BUILD_ROOT/usr/share/pads/ + +%clean +rm -rf %{buildroot} + +%post +/sbin/chkconfig --add %{name} + +%preun +if [ $1 = 0 ]; then + /sbin/service %{name} stop > /dev/null 2>&1 || : + /sbin/chkconfig --del %{name} +fi + +%postun +if [ "$1" -ge "1" ]; then + /sbin/service %{name} condrestart >/dev/null 2>&1 || : +fi + +%files +%defattr(-,root,root,-) +%doc doc/AUTHORS doc/COPYING doc/README doc/ChangeLog +%{_sysconfdir}/pads-ether-codes +%{_sysconfdir}/pads-signature-list +%config(noreplace) %attr(0640,root,root) %{_sysconfdir}/pads.conf +%config(noreplace) %attr(0640,root,root) %{_sysconfdir}/sysconfig/%{name} +%attr(0755,root,root) %{_initrddir}/%{name} +%{_bindir}/pads +%{_bindir}/pads-report +%{_mandir}/*/* + +%changelog +* Tue Aug 12 2008 Steve Grubb 1.2-1 + Initial rpm build with many bug fixes diff --git a/pads.sysconfig b/pads.sysconfig new file mode 100644 index 0000000..87053a2 --- /dev/null +++ b/pads.sysconfig @@ -0,0 +1,6 @@ +# Config file location +CONFIG_FILE="/etc/pads.conf" + +# Add extra options here +EXTRA_OPTIONS="" + diff --git a/sources b/sources index e69de29..ccb5115 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +2a366195c55ad6b6859c4c84ce877ee8 pads-1.2.tar.gz From d187c650e78b750ed0be492cbf5c71faeed2ff12 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Wed, 13 Aug 2008 21:53:42 +0000 Subject: [PATCH 02/61] don't deal with fuzz right now, new version coming out soon. --- pads.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/pads.spec b/pads.spec index a9ba28f..7eaf664 100644 --- a/pads.spec +++ b/pads.spec @@ -1,3 +1,4 @@ +%define _default_patch_fuzz 2 Name: pads Version: 1.2 Release: 1%{?dist} From a2cb05a69816305c172aadb897a232296ce4633a Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 28 Oct 2008 13:49:27 +0000 Subject: [PATCH 03/61] - Update CFLAGS for newer libprelude --- pads-1.2-pthreads.patch | 40 ++++++++++++++++++++++++++++++++++++++++ pads.spec | 9 +++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 pads-1.2-pthreads.patch diff --git a/pads-1.2-pthreads.patch b/pads-1.2-pthreads.patch new file mode 100644 index 0000000..13ede64 --- /dev/null +++ b/pads-1.2-pthreads.patch @@ -0,0 +1,40 @@ +diff -ur pads-1.2.orig/lib/bstring/Makefile.am pads-1.2/lib/bstring/Makefile.am +--- pads-1.2.orig/lib/bstring/Makefile.am 2008-10-26 09:54:10.000000000 -0400 ++++ pads-1.2/lib/bstring/Makefile.am 2008-10-28 09:40:50.000000000 -0400 +@@ -1,5 +1,6 @@ + # $Id: Makefile.am,v 1.1 2005/02/13 17:54:58 mattshelton Exp $ + AUTOMAKE_OPTIONS=foreign no-dependencies + noinst_LIBRARIES = libbstring.a ++libbstring_a_CFLAGS = -pthread + libbstring_a_SOURCES = bstrlib.c bstrlib.h bstraux.c bstraux.h util.c util.h + INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src +diff -ur pads-1.2.orig/src/Makefile.am pads-1.2/src/Makefile.am +--- pads-1.2.orig/src/Makefile.am 2008-10-26 09:54:10.000000000 -0400 ++++ pads-1.2/src/Makefile.am 2008-10-28 09:41:43.000000000 -0400 +@@ -1,6 +1,7 @@ + ## $Id: Makefile.am,v 1.3 2005/02/17 16:29:54 mattshelton Exp $ + AUTOMAKE_OPTIONS=foreign no-dependencies + bin_PROGRAMS = pads ++pads_CFLAGS = -pthread + pads_SOURCES = pads.c pads.h \ + storage.c storage.h \ + identification.c identification.h \ +@@ -10,6 +11,7 @@ + configuration.c configuration.h \ + util.c util.h \ + global.h ++pads_LDFLAGS = -pthread + pads_LDADD = $(top_srcdir)/lib/bstring/libbstring.a output/liboutput.a + bin_SCRIPTS = pads-report + +diff -ur pads-1.2.orig/src/output/Makefile.am pads-1.2/src/output/Makefile.am +--- pads-1.2.orig/src/output/Makefile.am 2008-10-26 09:54:10.000000000 -0400 ++++ pads-1.2/src/output/Makefile.am 2008-10-28 09:40:50.000000000 -0400 +@@ -1,6 +1,7 @@ + # $Id: Makefile.am,v 1.1 2005/02/10 06:05:06 mattshelton Exp $ + AUTOMAKE_OPTIONS=foreign no-dependencies + noinst_LIBRARIES = liboutput.a ++liboutput_a_CFLAGS = -pthread + liboutput_a_SOURCES = output.c output.h \ + output-screen.c output-screen.h \ + output-csv.c output-csv.h \ diff --git a/pads.spec b/pads.spec index 7eaf664..f3d8b97 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -25,10 +25,11 @@ Patch13: pads-1.2-bstring.patch Patch14: pads-1.2-leak.patch Patch15: pads-1.2-perf.patch Patch16: pads-1.2-daemon.patch +Patch17: pads-1.2-pthreads.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel -BuildRequires: libprelude-devel +BuildRequires: libprelude-devel >= 0.9.21 Requires(post) : /sbin/chkconfig Requires(preun) : /sbin/chkconfig Requires(preun) : /sbin/service @@ -58,6 +59,7 @@ are found, it can send IDMEF alerts via prelude. %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 %build autoreconf -fv --install @@ -104,5 +106,8 @@ fi %{_mandir}/*/* %changelog +* Tue Oct 28 2008 Steve Grubb 1.2-2 +- Update CFLAGS for newer libprelude + * Tue Aug 12 2008 Steve Grubb 1.2-1 Initial rpm build with many bug fixes From 221fa0f5c07491b94f1ad699538d49de63dc1f69 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 28 Oct 2008 13:50:54 +0000 Subject: [PATCH 04/61] - Update CFLAGS for newer libprelude (#465964) --- pads.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index f3d8b97..16da241 100644 --- a/pads.spec +++ b/pads.spec @@ -107,7 +107,7 @@ fi %changelog * Tue Oct 28 2008 Steve Grubb 1.2-2 -- Update CFLAGS for newer libprelude +- Update CFLAGS for newer libprelude (#465964) * Tue Aug 12 2008 Steve Grubb 1.2-1 Initial rpm build with many bug fixes From 758410f07c413eab4f170d4e05011b3f9a7921e7 Mon Sep 17 00:00:00 2001 From: Jesse Keating Date: Thu, 26 Feb 2009 09:24:17 +0000 Subject: [PATCH 05/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 16da241..eb173de 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -106,6 +106,9 @@ fi %{_mandir}/*/* %changelog +* Thu Feb 26 2009 Fedora Release Engineering - 1.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + * Tue Oct 28 2008 Steve Grubb 1.2-2 - Update CFLAGS for newer libprelude (#465964) From fcb477bed3f1b2f5f1552bf5776092f2bff0701d Mon Sep 17 00:00:00 2001 From: Jesse Keating Date: Sat, 25 Jul 2009 21:05:24 +0000 Subject: [PATCH 06/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index eb173de..14f171f 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -106,6 +106,9 @@ fi %{_mandir}/*/* %changelog +* Sat Jul 25 2009 Fedora Release Engineering - 1.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + * Thu Feb 26 2009 Fedora Release Engineering - 1.2-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild From 533be1f156e2198ef9a2f4de47a49200bf8425db Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Wed, 25 Nov 2009 23:30:18 +0000 Subject: [PATCH 07/61] Fix typo that causes a failure to update the common directory. (releng #2781) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b378297..6bd6fe4 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ # Makefile for source rpm: pads -# $Id$ +# $Id: Makefile,v 1.1 2008/08/13 17:23:26 kevin Exp $ NAME := pads SPECFILE = $(firstword $(wildcard *.spec)) define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done endef MAKEFILE_COMMON := $(shell $(find-makefile-common)) From 06fe77fa6b511451905ec775b9f301ea50091acf Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 29 Jul 2010 05:25:48 +0000 Subject: [PATCH 08/61] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 21 --------------------- import.log | 1 - 3 files changed, 22 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 import.log diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 6bd6fe4..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: pads -# $Id: Makefile,v 1.1 2008/08/13 17:23:26 kevin Exp $ -NAME := pads -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/import.log b/import.log deleted file mode 100644 index 0f1ecca..0000000 --- a/import.log +++ /dev/null @@ -1 +0,0 @@ -pads-1_2-1_fc9:HEAD:pads-1.2-1.fc9.src.rpm:1218648805 From 77e944f80cb29883dcee2c1d94090c5f13a547e1 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Tue, 8 Feb 2011 07:55:22 -0600 Subject: [PATCH 09/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 14f171f..5d154e2 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -106,6 +106,9 @@ fi %{_mandir}/*/* %changelog +* Tue Feb 08 2011 Fedora Release Engineering - 1.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + * Sat Jul 25 2009 Fedora Release Engineering - 1.2-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild From d03110ffc2460ed821c4ebb9886dcac96019047e Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 13 Jan 2012 05:53:13 -0600 Subject: [PATCH 10/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 5d154e2..92b25a6 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -106,6 +106,9 @@ fi %{_mandir}/*/* %changelog +* Fri Jan 13 2012 Fedora Release Engineering - 1.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + * Tue Feb 08 2011 Fedora Release Engineering - 1.2-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild From 8175dc5a237785e22deb8e54c5434d82fa5ba4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Fri, 10 Feb 2012 12:14:19 +0100 Subject: [PATCH 11/61] Rebuild against PCRE 8.30 --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 92b25a6..feb7db2 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -106,6 +106,9 @@ fi %{_mandir}/*/* %changelog +* Fri Feb 10 2012 Petr Pisar - 1.2-7 +- Rebuild against PCRE 8.30 + * Fri Jan 13 2012 Fedora Release Engineering - 1.2-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild From 61c1d87840636f24bdea8cc731dca265f3d465f0 Mon Sep 17 00:00:00 2001 From: Jon Ciesla Date: Mon, 20 Feb 2012 08:53:58 -0600 Subject: [PATCH 12/61] Migrate to systemd. --- pads.service | 11 +++++++++ pads.spec | 64 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 pads.service diff --git a/pads.service b/pads.service new file mode 100644 index 0000000..e32d1e7 --- /dev/null +++ b/pads.service @@ -0,0 +1,11 @@ +[Unit] +Description=Passive Asset Detection System +After=network.target + +[Service] +Type=forking +PIDFile=/run/pads.pid +ExecStart=/usr/bin/pads -D -c /etc/pads.conf + +[Install] +WantedBy=multi-user.target diff --git a/pads.spec b/pads.spec index feb7db2..f7c1fff 100644 --- a/pads.spec +++ b/pads.spec @@ -1,13 +1,13 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 7%{?dist} +Release: 8%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ URL: http://passive.sourceforge.net/ Source0: http://prdownloads.sourceforge.net/passive/%{name}-%{version}.tar.gz -Source1: pads.init +Source1: pads.service Source2: pads.sysconfig Patch1: pads-1.2-cleanup.patch Patch2: pads-1.2-memleak.patch @@ -30,10 +30,14 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel BuildRequires: libprelude-devel >= 0.9.21 -Requires(post) : /sbin/chkconfig -Requires(preun) : /sbin/chkconfig -Requires(preun) : /sbin/service -Requires(postun): /sbin/service +#Requires(post) : /sbin/chkconfig +#Requires(preun) : /sbin/chkconfig +#Requires(preun) : /sbin/service +#Requires(postun): /sbin/service +Requires(post): systemd-units +Requires(preun): systemd-units +Requires(postun): systemd-units + %description PADS is a libpcap based detection engine used to passively @@ -68,10 +72,10 @@ make %{?_smp_mflags} %install rm -rf %{buildroot} -mkdir -p %{buildroot}%{_initrddir} +mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_sysconfdir}/sysconfig make install DESTDIR=%{buildroot} -install -m 755 %SOURCE1 %{buildroot}%{_initrddir}/%{name} +install -m 755 %SOURCE1 %{buildroot}%{_unitdir}/%{name}.service install -m 640 %SOURCE2 %{buildroot}%{_sysconfdir}/sysconfig/%{name} # Remove installed docs since we pick this up another way rm -rf $RPM_BUILD_ROOT/usr/share/pads/ @@ -80,19 +84,46 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ rm -rf %{buildroot} %post -/sbin/chkconfig --add %{name} +#/sbin/chkconfig --add %{name} +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi + %preun -if [ $1 = 0 ]; then - /sbin/service %{name} stop > /dev/null 2>&1 || : - /sbin/chkconfig --del %{name} +#if [ $1 = 0 ]; then +# /sbin/service %{name} stop > /dev/null 2>&1 || : +# /sbin/chkconfig --del %{name} +#fi +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload pads.service > /dev/null 2>&1 || : + /bin/systemctl stop pads.service > /dev/null 2>&1 || : fi + %postun -if [ "$1" -ge "1" ]; then - /sbin/service %{name} condrestart >/dev/null 2>&1 || : +#if [ "$1" -ge "1" ]; then +# /sbin/service %{name} condrestart >/dev/null 2>&1 || : +#fi +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + # Package upgrade, not uninstall + /bin/systemctl try-restart pads.service >/dev/null 2>&1 || : fi +%triggerun -- pads < 1.2-8 +# Save the current service runlevel info +# User must manually run systemd-sysv-convert --apply pads +# to migrate them to systemd targets +/usr/bin/systemd-sysv-convert --save pads >/dev/null 2>&1 ||: + +# Run these because the SysV package being removed won't do them +/sbin/chkconfig --del pads >/dev/null 2>&1 || : +/bin/systemctl try-restart pads.service >/dev/null 2>&1 || : + + %files %defattr(-,root,root,-) %doc doc/AUTHORS doc/COPYING doc/README doc/ChangeLog @@ -100,12 +131,15 @@ fi %{_sysconfdir}/pads-signature-list %config(noreplace) %attr(0640,root,root) %{_sysconfdir}/pads.conf %config(noreplace) %attr(0640,root,root) %{_sysconfdir}/sysconfig/%{name} -%attr(0755,root,root) %{_initrddir}/%{name} +%attr(0755,root,root) %{_unitdir}/%{name}.service %{_bindir}/pads %{_bindir}/pads-report %{_mandir}/*/* %changelog +* Mon Feb 20 2012 Jon Ciesla - 1.2-8 +- Migrate to systemd, BZ 661632. + * Fri Feb 10 2012 Petr Pisar - 1.2-7 - Rebuild against PCRE 8.30 From b8691a0d368bcb0a5d9b8166770f7e82943aa193 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 20 Jul 2012 02:44:08 -0500 Subject: [PATCH 13/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index f7c1fff..44f0db3 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 8%{?dist} +Release: 9%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -137,6 +137,9 @@ fi %{_mandir}/*/* %changelog +* Fri Jul 20 2012 Fedora Release Engineering - 1.2-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + * Mon Feb 20 2012 Jon Ciesla - 1.2-8 - Migrate to systemd, BZ 661632. From af63eada3e6965c3a91932a2ea9650b54096dbd0 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Thu, 14 Feb 2013 03:42:16 -0600 Subject: [PATCH 14/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 44f0db3..2f7f6f7 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 9%{?dist} +Release: 10%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -137,6 +137,9 @@ fi %{_mandir}/*/* %changelog +* Thu Feb 14 2013 Fedora Release Engineering - 1.2-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + * Fri Jul 20 2012 Fedora Release Engineering - 1.2-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild From 498c7eb45b56a004a127f262002f0dc971cd5042 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 2 Jun 2013 09:02:33 -0400 Subject: [PATCH 15/61] Support Aarch64 (#926298) --- pads-aarch64.patch | 2549 ++++++++++++++++++++++++++++++++++++++++++++ pads.spec | 7 +- 2 files changed, 2555 insertions(+), 1 deletion(-) create mode 100644 pads-aarch64.patch diff --git a/pads-aarch64.patch b/pads-aarch64.patch new file mode 100644 index 0000000..33e9263 --- /dev/null +++ b/pads-aarch64.patch @@ -0,0 +1,2549 @@ +diff -urN pads-1.2/config.guess pads-1.2-aarch64/config.guess +--- pads-1.2/config.guess 2004-09-29 00:15:05.000000000 -0500 ++++ pads-1.2-aarch64/config.guess 2013-03-03 07:01:43.314424034 -0600 +@@ -1,9 +1,10 @@ + #! /bin/sh + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012 Free Software Foundation, Inc. + +-timestamp='2004-09-07' ++timestamp='2012-09-25' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -16,24 +17,24 @@ + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++# along with this program; if not, see . + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under + # the same distribution terms that you use for the rest of that program. + +-# Originally written by Per Bothner . +-# Please send patches to . Submit a context +-# diff and a properly formatted ChangeLog entry. ++ ++# Originally written by Per Bothner. Please send patches (context ++# diff format) to and include a ChangeLog ++# entry. + # + # This script attempts to guess a canonical system name similar to + # config.sub. If it succeeds, it prints the system name on stdout, and + # exits with 0. Otherwise, it exits with 1. + # +-# The plan is that this can be called by configure scripts if you +-# don't specify an explicit build system type. ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + + me=`echo "$0" | sed -e 's,.*/,,'` + +@@ -53,7 +54,8 @@ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 + Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO +@@ -66,11 +68,11 @@ + while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) +- echo "$timestamp" ; exit 0 ;; ++ echo "$timestamp" ; exit ;; + --version | -v ) +- echo "$version" ; exit 0 ;; ++ echo "$version" ; exit ;; + --help | --h* | -h ) +- echo "$usage"; exit 0 ;; ++ echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. +@@ -104,7 +106,7 @@ + trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; + trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; + : ${TMPDIR=/tmp} ; +- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || ++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +@@ -123,7 +125,7 @@ + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +-esac ;' ++esac ; set_cc_for_build= ;' + + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. + # (ghazi@noc.rutgers.edu 1994-08-24) +@@ -141,7 +143,7 @@ + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or +- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward +@@ -158,6 +160,7 @@ + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; ++ sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched +@@ -166,7 +169,7 @@ + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ +- | grep __ELF__ >/dev/null ++ | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? +@@ -176,7 +179,7 @@ + fi + ;; + *) +- os=netbsd ++ os=netbsd + ;; + esac + # The OS release +@@ -196,62 +199,34 @@ + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" +- exit 0 ;; +- amd64:OpenBSD:*:*) +- echo x86_64-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- amiga:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- cats:OpenBSD:*:*) +- echo arm-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- hp300:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- luna88k:OpenBSD:*:*) +- echo m88k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mac68k:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- macppc:OpenBSD:*:*) +- echo powerpc-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvme68k:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvme88k:OpenBSD:*:*) +- echo m88k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvmeppc:OpenBSD:*:*) +- echo powerpc-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- sgi:OpenBSD:*:*) +- echo mips64-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- sun3:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ *:Bitrig:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} ++ exit ;; + *:OpenBSD:*:*) +- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; ++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} ++ exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ *:SolidBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} ++ exit ;; + macppc:MirBSD:*:*) +- echo powerppc-unknown-mirbsd${UNAME_RELEASE} +- exit 0 ;; ++ echo powerpc-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) +- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on +@@ -297,37 +272,46 @@ + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- exit 0 ;; ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix +- exit 0 ;; ++ exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 +- exit 0 ;; ++ exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 +- exit 0;; ++ exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos +- exit 0 ;; ++ exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos +- exit 0 ;; ++ exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition +- exit 0 ;; ++ exit ;; ++ *:z/VM:*:*) ++ echo s390-ibm-zvmoe ++ exit ;; + *:OS400:*:*) +- echo powerpc-ibm-os400 +- exit 0 ;; ++ echo powerpc-ibm-os400 ++ exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} +- exit 0;; ++ exit ;; ++ arm*:riscos:*:*|arm*:RISCOS:*:*) ++ echo arm-unknown-riscos ++ exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp +- exit 0;; ++ exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then +@@ -335,32 +319,51 @@ + else + echo pyramid-pyramid-bsd + fi +- exit 0 ;; ++ exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 +- exit 0 ;; ++ exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 +- exit 0 ;; +- DRS?6000:UNIX_SV:4.2*:7*) ++ exit ;; ++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in +- sparc) echo sparc-icl-nx7 && exit 0 ;; ++ sparc) echo sparc-icl-nx7; exit ;; + esac ;; ++ s390x:SunOS:*:*) ++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; +- i86pc:SunOS:5.*:*) +- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; ++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) ++ echo i386-pc-auroraux${UNAME_RELEASE} ++ exit ;; ++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) ++ eval $set_cc_for_build ++ SUN_ARCH="i386" ++ # If there is a compiler, see if it is configured for 64-bit objects. ++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. ++ # This test works for both compilers. ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ SUN_ARCH="x86_64" ++ fi ++ fi ++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) +@@ -369,10 +372,10 @@ + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` +- exit 0 ;; ++ exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 +@@ -384,10 +387,10 @@ + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac +- exit 0 ;; ++ exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor +@@ -397,41 +400,41 @@ + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) +- echo m68k-milan-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) +- echo m68k-hades-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) +- echo m68k-unknown-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 +- exit 0 ;; ++ exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +@@ -455,35 +458,36 @@ + exit (-1); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c \ +- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ +- && exit 0 ++ $CC_FOR_BUILD -o $dummy $dummy.c && ++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && ++ SYSTEM_NAME=`$dummy $dummyarg` && ++ { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax +- exit 0 ;; ++ exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax +- exit 0 ;; ++ exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax +- exit 0 ;; ++ exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix +- exit 0 ;; ++ exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 +- exit 0 ;; ++ exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 +- exit 0 ;; ++ exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 +- exit 0 ;; ++ exit ;; + AViiON:dgux:*:*) +- # DG/UX returns AViiON for all architectures +- UNAME_PROCESSOR=`/usr/bin/uname -p` ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ +@@ -496,29 +500,29 @@ + else + echo i586-dg-dgux${UNAME_RELEASE} + fi +- exit 0 ;; ++ exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 +- exit 0 ;; ++ exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 +- exit 0 ;; ++ exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 +- exit 0 ;; ++ exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd +- exit 0 ;; ++ exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` +- exit 0 ;; ++ exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. +- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id +- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id ++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix +- exit 0 ;; ++ exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` +@@ -526,7 +530,7 @@ + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} +- exit 0 ;; ++ exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build +@@ -541,15 +545,19 @@ + exit(0); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 +- echo rs6000-ibm-aix3.2.5 ++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` ++ then ++ echo "$SYSTEM_NAME" ++ else ++ echo rs6000-ibm-aix3.2.5 ++ fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi +- exit 0 ;; +- *:AIX:*:[45]) ++ exit ;; ++ *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 +@@ -562,28 +570,28 @@ + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} +- exit 0 ;; ++ exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix +- exit 0 ;; ++ exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 +- exit 0 ;; ++ exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to +- exit 0 ;; # report: romp-ibm BSD 4.3 ++ exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx +- exit 0 ;; ++ exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 +- exit 0 ;; ++ exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd +- exit 0 ;; ++ exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 +- exit 0 ;; ++ exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in +@@ -592,52 +600,52 @@ + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` +- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` +- case "${sc_cpu_version}" in +- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 +- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 +- 532) # CPU_PA_RISC2_0 +- case "${sc_kernel_bits}" in +- 32) HP_ARCH="hppa2.0n" ;; +- 64) HP_ARCH="hppa2.0w" ;; ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 +- esac ;; +- esac ++ esac ;; ++ esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c ++ sed 's/^ //' << EOF >$dummy.c + +- #define _HPUX_SOURCE +- #include +- #include +- +- int main () +- { +- #if defined(_SC_KERNEL_BITS) +- long bits = sysconf(_SC_KERNEL_BITS); +- #endif +- long cpu = sysconf (_SC_CPU_VERSION); +- +- switch (cpu) +- { +- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; +- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; +- case CPU_PA_RISC2_0: +- #if defined(_SC_KERNEL_BITS) +- switch (bits) +- { +- case 64: puts ("hppa2.0w"); break; +- case 32: puts ("hppa2.0n"); break; +- default: puts ("hppa2.0"); break; +- } break; +- #else /* !defined(_SC_KERNEL_BITS) */ +- puts ("hppa2.0"); break; +- #endif +- default: puts ("hppa1.0"); break; +- } +- exit (0); +- } ++ #define _HPUX_SOURCE ++ #include ++ #include ++ ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); ++ ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } + EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa +@@ -645,9 +653,19 @@ + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then +- # avoid double evaluation of $set_cc_for_build +- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build +- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null ++ eval $set_cc_for_build ++ ++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating ++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler ++ # generating 64-bit code. GNU and HP use different nomenclature: ++ # ++ # $ CC_FOR_BUILD=cc ./config.guess ++ # => hppa2.0w-hp-hpux11.23 ++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess ++ # => hppa64-hp-hpux11.23 ++ ++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | ++ grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else +@@ -655,11 +673,11 @@ + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} +- exit 0 ;; ++ exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} +- exit 0 ;; ++ exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +@@ -687,216 +705,269 @@ + exit (0); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 ++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 +- exit 0 ;; ++ exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd +- exit 0 ;; ++ exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd +- exit 0 ;; ++ exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix +- exit 0 ;; ++ exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf +- exit 0 ;; ++ exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf +- exit 0 ;; ++ exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi +- exit 0 ;; ++ exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites +- exit 0 ;; ++ exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd +- exit 0 ;; ++ exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi +- exit 0 ;; ++ exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd +- exit 0 ;; ++ exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd +- exit 0 ;; ++ exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd +- exit 0 ;; ++ exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` +- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit 0 ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + 5000:UNIX_System_V:4.*:*) +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` +- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit 0 ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:FreeBSD:*:*) +- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` +- exit 0 ;; ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in ++ amd64) ++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ *) ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ esac ++ exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin +- exit 0 ;; +- i*:MINGW*:*) ++ exit ;; ++ *:MINGW64*:*) ++ echo ${UNAME_MACHINE}-pc-mingw64 ++ exit ;; ++ *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 +- exit 0 ;; ++ exit ;; ++ i*:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; ++ i*:windows32*:*) ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 ++ exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 +- exit 0 ;; +- x86:Interix*:[34]*) +- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' +- exit 0 ;; ++ exit ;; ++ *:Interix*:*) ++ case ${UNAME_MACHINE} in ++ x86) ++ echo i586-pc-interix${UNAME_RELEASE} ++ exit ;; ++ authenticamd | genuineintel | EM64T) ++ echo x86_64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ IA64) ++ echo ia64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks +- exit 0 ;; ++ exit ;; ++ 8664:Windows_NT:*) ++ echo x86_64-pc-mks ++ exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix +- exit 0 ;; ++ exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin +- exit 0 ;; ++ exit ;; ++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) ++ echo x86_64-unknown-cygwin ++ exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin +- exit 0 ;; ++ exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` +- exit 0 ;; ++ exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu +- exit 0 ;; ++ exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix +- exit 0 ;; ++ exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ alpha:Linux:*:*) ++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ++ EV5) UNAME_MACHINE=alphaev5 ;; ++ EV56) UNAME_MACHINE=alphaev56 ;; ++ PCA56) UNAME_MACHINE=alphapca56 ;; ++ PCA57) UNAME_MACHINE=alphapca56 ;; ++ EV6) UNAME_MACHINE=alphaev6 ;; ++ EV67) UNAME_MACHINE=alphaev67 ;; ++ EV68*) UNAME_MACHINE=alphaev68 ;; ++ esac ++ objdump --private-headers /bin/sh | grep -q ld.so.1 ++ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi ++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ++ exit ;; + arm*:Linux:*:*) ++ eval $set_cc_for_build ++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_EABI__ ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ else ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf ++ fi ++ fi ++ exit ;; ++ avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ exit ;; + cris:Linux:*:*) +- echo cris-axis-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-axis-linux-gnu ++ exit ;; + crisv32:Linux:*:*) +- echo crisv32-axis-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-axis-linux-gnu ++ exit ;; + frv:Linux:*:*) +- echo frv-unknown-linux-gnu +- exit 0 ;; +- ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; +- m32r*:Linux:*:*) ++ exit ;; ++ hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; +- m68*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; +- mips:Linux:*:*) ++ exit ;; ++ i*86:Linux:*:*) ++ LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +- #undef CPU +- #undef mips +- #undef mipsel +- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mipsel +- #else +- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips +- #else +- CPU= +- #endif ++ #ifdef __dietlibc__ ++ LIBC=dietlibc + #endif + EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` +- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 +- ;; +- mips64:Linux:*:*) ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}" ++ exit ;; ++ ia64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ m32r*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ m68*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU +- #undef mips64 +- #undef mips64el ++ #undef ${UNAME_MACHINE} ++ #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mips64el ++ CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips64 ++ CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif + EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` +- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` ++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; +- ppc:Linux:*:*) +- echo powerpc-unknown-linux-gnu +- exit 0 ;; +- ppc64:Linux:*:*) +- echo powerpc64-unknown-linux-gnu +- exit 0 ;; +- alpha:Linux:*:*) +- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in +- EV5) UNAME_MACHINE=alphaev5 ;; +- EV56) UNAME_MACHINE=alphaev56 ;; +- PCA56) UNAME_MACHINE=alphapca56 ;; +- PCA57) UNAME_MACHINE=alphapca56 ;; +- EV6) UNAME_MACHINE=alphaev6 ;; +- EV67) UNAME_MACHINE=alphaev67 ;; +- EV68*) UNAME_MACHINE=alphaev68 ;; +- esac +- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null +- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi +- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +- exit 0 ;; ++ or32:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ padre:Linux:*:*) ++ echo sparc-unknown-linux-gnu ++ exit ;; ++ parisc64:Linux:*:* | hppa64:Linux:*:*) ++ echo hppa64-unknown-linux-gnu ++ exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in +@@ -904,115 +975,71 @@ + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac +- exit 0 ;; +- parisc64:Linux:*:* | hppa64:Linux:*:*) +- echo hppa64-unknown-linux-gnu +- exit 0 ;; ++ exit ;; ++ ppc64:Linux:*:*) ++ echo powerpc64-unknown-linux-gnu ++ exit ;; ++ ppc:Linux:*:*) ++ echo powerpc-unknown-linux-gnu ++ exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux +- exit 0 ;; ++ exit ;; + sh64*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ vax:Linux:*:*) ++ echo ${UNAME_MACHINE}-dec-linux-gnu ++ exit ;; + x86_64:Linux:*:*) +- echo x86_64-unknown-linux-gnu +- exit 0 ;; +- i*86:Linux:*:*) +- # The BFD linker knows what the default object file format is, so +- # first see if it will tell us. cd to the root directory to prevent +- # problems with other programs or directories called `ld' in the path. +- # Set LC_ALL=C to ensure ld outputs messages in English. +- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ +- | sed -ne '/supported targets:/!d +- s/[ ][ ]*/ /g +- s/.*supported targets: *// +- s/ .*// +- p'` +- case "$ld_supported_targets" in +- elf32-i386) +- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" +- ;; +- a.out-i386-linux) +- echo "${UNAME_MACHINE}-pc-linux-gnuaout" +- exit 0 ;; +- coff-i386) +- echo "${UNAME_MACHINE}-pc-linux-gnucoff" +- exit 0 ;; +- "") +- # Either a pre-BFD a.out linker (linux-gnuoldld) or +- # one that does not give us useful --help. +- echo "${UNAME_MACHINE}-pc-linux-gnuoldld" +- exit 0 ;; +- esac +- # Determine whether the default compiler is a.out or elf +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #include +- #ifdef __ELF__ +- # ifdef __GLIBC__ +- # if __GLIBC__ >= 2 +- LIBC=gnu +- # else +- LIBC=gnulibc1 +- # endif +- # else +- LIBC=gnulibc1 +- # endif +- #else +- #ifdef __INTEL_COMPILER +- LIBC=gnu +- #else +- LIBC=gnuaout +- #endif +- #endif +- #ifdef __dietlibc__ +- LIBC=dietlibc +- #endif +-EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` +- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 +- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 +- ;; ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ xtensa*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 +- exit 0 ;; ++ exit ;; + i*86:UNIX_SV:4.2MP:2.*) +- # Unixware is an offshoot of SVR4, but it has its own version +- # number series starting with 2... +- # I am not positive that other SVR4 systems won't match this, ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. +- # Use sysv4.2uw... so that sysv4* matches it. ++ # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} +- exit 0 ;; ++ exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx +- exit 0 ;; ++ exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop +- exit 0 ;; ++ exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos +- exit 0 ;; +- i*86:syllable:*:*) ++ exit ;; ++ i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable +- exit 0 ;; +- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) ++ exit ;; ++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp +- exit 0 ;; ++ exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then +@@ -1020,15 +1047,16 @@ + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi +- exit 0 ;; +- i*86:*:5:[78]*) ++ exit ;; ++ i*86:*:5:[678]*) ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} +- exit 0 ;; ++ exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi +- exit 0 ;; ++ exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv +- exit 0 ;; ++ exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv +- exit 0 ;; ++ exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix +- exit 0 ;; ++ exit ;; + M68*:*:R3V[5678]*:*) +- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; ++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && echo i486-ncr-sysv4.3${OS_REL} && exit 0 ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ +- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) +- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && echo i486-ncr-sysv4 && exit 0 ;; ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; ++ NCR*:*:4.2:* | MPRAS*:*:4.2:*) ++ OS_REL='.3' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 +- exit 0 ;; ++ exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; +- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) ++ exit ;; ++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 +- exit 0 ;; ++ exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 +- exit 0 ;; ++ exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` +@@ -1120,69 +1161,97 @@ + else + echo ns32k-sni-sysv + fi +- exit 0 ;; +- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort +- # says +- echo i586-unisys-sysv4 +- exit 0 ;; ++ exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says ++ echo i586-unisys-sysv4 ++ exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 +- exit 0 ;; ++ exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 +- exit 0 ;; ++ exit ;; ++ i*86:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo ${UNAME_MACHINE}-stratus-vos ++ exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos +- exit 0 ;; ++ exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 +- exit 0 ;; ++ exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then +- echo mips-nec-sysv${UNAME_RELEASE} ++ echo mips-nec-sysv${UNAME_RELEASE} + else +- echo mips-unknown-sysv${UNAME_RELEASE} ++ echo mips-unknown-sysv${UNAME_RELEASE} + fi +- exit 0 ;; ++ exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos +- exit 0 ;; ++ exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos +- exit 0 ;; ++ exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos +- exit 0 ;; ++ exit ;; ++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. ++ echo i586-pc-haiku ++ exit ;; ++ x86_64:Haiku:*:*) ++ echo x86_64-unknown-haiku ++ exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ SX-7:SUPER-UX:*:*) ++ echo sx7-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8:SUPER-UX:*:*) ++ echo sx8-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8R:SUPER-UX:*:*) ++ echo sx8r-nec-superux${UNAME_RELEASE} ++ exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in +- *86) UNAME_PROCESSOR=i686 ;; ++ i386) ++ eval $set_cc_for_build ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ UNAME_PROCESSOR="x86_64" ++ fi ++ fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then +@@ -1190,22 +1259,28 @@ + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:QNX:*:4*) + echo i386-pc-qnx +- exit 0 ;; ++ exit ;; ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSE-*:NONSTOP_KERNEL:*:*) ++ echo nse-tandem-nsk${UNAME_RELEASE} ++ exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux +- exit 0 ;; ++ exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv +- exit 0 ;; ++ exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 +@@ -1216,43 +1291,55 @@ + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 +- exit 0 ;; ++ exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 +- exit 0 ;; ++ exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex +- exit 0 ;; ++ exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 +- exit 0 ;; ++ exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 +- exit 0 ;; ++ exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 +- exit 0 ;; ++ exit ;; + *:ITS:*:*) + echo pdp10-unknown-its +- exit 0 ;; ++ exit ;; + SEI:*:*:SEIUX) +- echo mips-sei-seiux${UNAME_RELEASE} +- exit 0 ;; ++ echo mips-sei-seiux${UNAME_RELEASE} ++ exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` +- exit 0 ;; ++ exit ;; + *:*VMS:*:*) +- UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in +- A*) echo alpha-dec-vms && exit 0 ;; +- I*) echo ia64-dec-vms && exit 0 ;; +- V*) echo vax-dec-vms && exit 0 ;; +- esac ++ A*) echo alpha-dec-vms ; exit ;; ++ I*) echo ia64-dec-vms ; exit ;; ++ V*) echo vax-dec-vms ; exit ;; ++ esac ;; ++ *:XENIX:*:SysV) ++ echo i386-pc-xenix ++ exit ;; ++ i*86:skyos:*:*) ++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' ++ exit ;; ++ i*86:rdos:*:*) ++ echo ${UNAME_MACHINE}-pc-rdos ++ exit ;; ++ i*86:AROS:*:*) ++ echo ${UNAME_MACHINE}-pc-aros ++ exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; + esac + +-#echo '(No uname command or uname output not recognized.)' 1>&2 +-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +- + eval $set_cc_for_build + cat >$dummy.c < + printf ("m68k-sony-newsos%s\n", + #ifdef NEWSOS4 +- "4" ++ "4" + #else +- "" ++ "" + #endif +- ); exit (0); ++ ); exit (0); + #endif + #endif + + #if defined (__arm) && defined (__acorn) && defined (__unix) +- printf ("arm-acorn-riscix"); exit (0); ++ printf ("arm-acorn-riscix\n"); exit (0); + #endif + + #if defined (hp300) && !defined (hpux) +@@ -1368,11 +1455,12 @@ + } + EOF + +-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 ++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } + + # Apollos put the system type in the environment. + +-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } ++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + + # Convex versions that predate uname can use getsysinfo(1) + +@@ -1381,22 +1469,22 @@ + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd +- exit 0 ;; ++ exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi +- exit 0 ;; ++ exit ;; + c34*) + echo c34-convex-bsd +- exit 0 ;; ++ exit ;; + c38*) + echo c38-convex-bsd +- exit 0 ;; ++ exit ;; + c4*) + echo c4-convex-bsd +- exit 0 ;; ++ exit ;; + esac + fi + +@@ -1407,7 +1495,9 @@ + the operating system you are using. It is advised that you + download the most up to date version of the config scripts from + +- ftp://ftp.gnu.org/pub/gnu/config/ ++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD ++and ++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + + If the version you run ($0) is already up to date, please + send the following data and any information you think might be +diff -urN pads-1.2/config.sub pads-1.2-aarch64/config.sub +--- pads-1.2/config.sub 2004-09-29 00:15:05.000000000 -0500 ++++ pads-1.2-aarch64/config.sub 2013-03-03 07:01:43.339421146 -0600 +@@ -1,9 +1,10 @@ + #! /bin/sh + # Configuration validation subroutine script. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012 Free Software Foundation, Inc. + +-timestamp='2004-08-29' ++timestamp='2012-10-10' + + # This file is (in principle) common to ALL GNU software. + # The presence of a machine in this file suggests that SOME GNU software +@@ -20,23 +21,25 @@ + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, +-# Boston, MA 02111-1307, USA. +- ++# along with this program; if not, see . ++# + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under + # the same distribution terms that you use for the rest of that program. + ++ + # Please send patches to . Submit a context +-# diff and a properly formatted ChangeLog entry. ++# diff and a properly formatted GNU ChangeLog entry. + # + # Configuration subroutine to validate and canonicalize a configuration type. + # Supply the specified configuration type as an argument. + # If it is invalid, we print an error message on stderr and exit with code 1. + # Otherwise, we print the canonical config type on stdout and succeed. + ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD ++ + # This file is supposed to be the same for all GNU packages + # and recognize all the CPU types, system types and aliases + # that are meaningful with *any* GNU software. +@@ -70,7 +73,8 @@ + version="\ + GNU config.sub ($timestamp) + +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 + Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO +@@ -83,11 +87,11 @@ + while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) +- echo "$timestamp" ; exit 0 ;; ++ echo "$timestamp" ; exit ;; + --version | -v ) +- echo "$version" ; exit 0 ;; ++ echo "$version" ; exit ;; + --help | --h* | -h ) +- echo "$usage"; exit 0 ;; ++ echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. +@@ -99,7 +103,7 @@ + *local*) + # First pass through any local machine types. + echo $1 +- exit 0;; ++ exit ;; + + * ) + break ;; +@@ -118,11 +122,18 @@ + # Here we must recognize all the valid KERNEL-OS combinations. + maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` + case $maybe_os in +- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ +- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) ++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ ++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ knetbsd*-gnu* | netbsd*-gnu* | \ ++ kopensolaris*-gnu* | \ ++ storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] +@@ -145,10 +156,13 @@ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ +- -apple | -axis | -knuth | -cray) ++ -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; ++ -bluegene*) ++ os=-cnk ++ ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 +@@ -163,13 +177,17 @@ + os=-chorusos + basic_machine=$1 + ;; +- -chorusrdb) +- os=-chorusrdb ++ -chorusrdb) ++ os=-chorusrdb + basic_machine=$1 +- ;; ++ ;; + -hiux*) + os=-hiuxwe2 + ;; ++ -sco6) ++ os=-sco5v6 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +@@ -186,6 +204,10 @@ + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -sco5v6*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +@@ -203,6 +225,12 @@ + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -lynx*178) ++ os=-lynxos178 ++ ;; ++ -lynx*5) ++ os=-lynxos5 ++ ;; + -lynx*) + os=-lynxos + ;; +@@ -227,25 +255,36 @@ + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ ++ | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ +- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ ++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ ++ | be32 | be64 \ ++ | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ +- | fr30 | frv \ ++ | epiphany \ ++ | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ++ | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ +- | m32r | m32rle | m68000 | m68k | m88k | mcore \ ++ | le32 | le64 \ ++ | lm32 \ ++ | m32c | m32r | m32rle | m68000 | m68k | m88k \ ++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ +- | mips64vr | mips64vrel \ ++ | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ ++ | mips64r5900 | mips64r5900el \ ++ | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ ++ | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ +@@ -254,30 +293,65 @@ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ ++ | moxie \ ++ | mt \ + | msp430 \ ++ | nds32 | nds32le | nds32be \ ++ | nios | nios2 \ + | ns16k | ns32k \ +- | openrisc | or32 \ ++ | open8 \ ++ | or32 \ + | pdp10 | pdp11 | pj | pjl \ +- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ ++ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ +- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ ++ | rl78 | rx \ ++ | score \ ++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ +- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ +- | strongarm \ +- | tahoe | thumb | tic4x | tic80 | tron \ +- | v850 | v850e \ ++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ ++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ ++ | spu \ ++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ ++ | ubicom32 \ ++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ +- | x86 | xscale | xstormy16 | xtensa \ +- | z8k) ++ | x86 | xc16x | xstormy16 | xtensa \ ++ | z8k | z80) + basic_machine=$basic_machine-unknown + ;; +- m6811 | m68hc11 | m6812 | m68hc12) +- # Motorola 68HC11/12. ++ c54x) ++ basic_machine=tic54x-unknown ++ ;; ++ c55x) ++ basic_machine=tic55x-unknown ++ ;; ++ c6x) ++ basic_machine=tic6x-unknown ++ ;; ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; ++ ms1) ++ basic_machine=mt-unknown ++ ;; ++ ++ strongarm | thumb | xscale) ++ basic_machine=arm-unknown ++ ;; ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ xscaleeb) ++ basic_machine=armeb-unknown ++ ;; ++ ++ xscaleel) ++ basic_machine=armel-unknown ++ ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and +@@ -293,32 +367,41 @@ + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ ++ | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ +- | avr-* \ +- | bs2000-* \ +- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ ++ | avr-* | avr32-* \ ++ | be32-* | be64-* \ ++ | bfin-* | bs2000-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ +- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ ++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ++ | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ +- | m32r-* | m32rle-* \ ++ | le32-* | le64-* \ ++ | lm32-* \ ++ | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ +- | m88110-* | m88k-* | mcore-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ ++ | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ +- | mips64vr-* | mips64vrel-* \ ++ | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ ++ | mips64r5900-* | mips64r5900el-* \ ++ | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ ++ | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ +@@ -327,26 +410,38 @@ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ ++ | mt-* \ + | msp430-* \ ++ | nds32-* | nds32le-* | nds32be-* \ ++ | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ ++ | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ +- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ ++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ +- | romp-* | rs6000-* \ +- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ ++ | rl78-* | romp-* | rs6000-* | rx-* \ ++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ +- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ +- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ +- | tahoe-* | thumb-* \ ++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ ++ | sparclite-* \ ++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ ++ | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ ++ | tile*-* \ + | tron-* \ +- | v850-* | v850e-* | vax-* \ ++ | ubicom32-* \ ++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ ++ | vax-* \ + | we32k-* \ +- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ +- | xtensa-* \ ++ | x86-* | x86_64-* | xc16x-* | xps100-* \ ++ | xstormy16-* | xtensa*-* \ + | ymp-* \ +- | z8k-*) ++ | z8k-* | z80-*) ++ ;; ++ # Recognize the basic CPU types without company name, with glob match. ++ xtensa*) ++ basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. +@@ -364,7 +459,7 @@ + basic_machine=a29k-amd + os=-udi + ;; +- abacus) ++ abacus) + basic_machine=abacus-unknown + ;; + adobe68k) +@@ -410,6 +505,10 @@ + basic_machine=m68k-apollo + os=-bsd + ;; ++ aros) ++ basic_machine=i386-pc ++ os=-aros ++ ;; + aux) + basic_machine=m68k-apple + os=-aux +@@ -418,10 +517,35 @@ + basic_machine=ns32k-sequent + os=-dynix + ;; ++ blackfin) ++ basic_machine=bfin-unknown ++ os=-linux ++ ;; ++ blackfin-*) ++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ bluegene*) ++ basic_machine=powerpc-ibm ++ os=-cnk ++ ;; ++ c54x-*) ++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c55x-*) ++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c6x-*) ++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; ++ cegcc) ++ basic_machine=arm-unknown ++ os=-cegcc ++ ;; + convex-c1) + basic_machine=c1-convex + os=-bsd +@@ -450,8 +574,8 @@ + basic_machine=craynv-cray + os=-unicosmp + ;; +- cr16c) +- basic_machine=cr16c-unknown ++ cr16 | cr16-*) ++ basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) +@@ -489,6 +613,14 @@ + basic_machine=m88k-motorola + os=-sysv3 + ;; ++ dicos) ++ basic_machine=i686-pc ++ os=-dicos ++ ;; ++ djgpp) ++ basic_machine=i586-pc ++ os=-msdosdjgpp ++ ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx +@@ -600,7 +732,6 @@ + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +-# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 +@@ -639,6 +770,14 @@ + basic_machine=m68k-isi + os=-sysv + ;; ++ m68knommu) ++ basic_machine=m68k-unknown ++ os=-linux ++ ;; ++ m68knommu-*) ++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; + m88k-omron*) + basic_machine=m88k-omron + ;; +@@ -650,10 +789,21 @@ + basic_machine=ns32k-utek + os=-sysv + ;; ++ microblaze*) ++ basic_machine=microblaze-xilinx ++ ;; ++ mingw64) ++ basic_machine=x86_64-pc ++ os=-mingw64 ++ ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; ++ mingw32ce) ++ basic_machine=arm-unknown ++ os=-mingw32ce ++ ;; + miniframe) + basic_machine=m68000-convergent + ;; +@@ -679,10 +829,21 @@ + basic_machine=i386-pc + os=-msdos + ;; ++ ms1-*) ++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ++ ;; ++ msys) ++ basic_machine=i386-pc ++ os=-msys ++ ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ++ nacl) ++ basic_machine=le32-unknown ++ os=-nacl ++ ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 +@@ -747,6 +908,12 @@ + np1) + basic_machine=np1-gould + ;; ++ neo-tandem) ++ basic_machine=neo-tandem ++ ;; ++ nse-tandem) ++ basic_machine=nse-tandem ++ ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; +@@ -754,9 +921,8 @@ + basic_machine=hppa1.1-oki + os=-proelf + ;; +- or32 | or32-*) ++ openrisc | openrisc-*) + basic_machine=or32-unknown +- os=-coff + ;; + os400) + basic_machine=powerpc-ibm +@@ -778,6 +944,14 @@ + basic_machine=i860-intel + os=-osf + ;; ++ parisc) ++ basic_machine=hppa-unknown ++ os=-linux ++ ;; ++ parisc-*) ++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; + pbd) + basic_machine=sparc-tti + ;; +@@ -787,6 +961,12 @@ + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; ++ pc98) ++ basic_machine=i386-pc ++ ;; ++ pc98-*) ++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; +@@ -816,9 +996,10 @@ + ;; + power) basic_machine=power-ibm + ;; +- ppc) basic_machine=powerpc-unknown ++ ppc | ppcbe) basic_machine=powerpc-unknown + ;; +- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc-* | ppcbe-*) ++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown +@@ -843,6 +1024,10 @@ + basic_machine=i586-unknown + os=-pw32 + ;; ++ rdos) ++ basic_machine=i386-pc ++ os=-rdos ++ ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff +@@ -869,6 +1054,10 @@ + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; ++ sde) ++ basic_machine=mipsisa32-sde ++ os=-elf ++ ;; + sei) + basic_machine=mips-sei + os=-seiux +@@ -880,6 +1069,9 @@ + basic_machine=sh-hitachi + os=-hms + ;; ++ sh5el) ++ basic_machine=sh5le-unknown ++ ;; + sh64) + basic_machine=sh64-unknown + ;; +@@ -901,6 +1093,9 @@ + basic_machine=i860-stratus + os=-sysv4 + ;; ++ strongarm-* | thumb-*) ++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + sun2) + basic_machine=m68000-sun + ;; +@@ -957,17 +1152,9 @@ + basic_machine=t90-cray + os=-unicos + ;; +- tic54x | c54x*) +- basic_machine=tic54x-unknown +- os=-coff +- ;; +- tic55x | c55x*) +- basic_machine=tic55x-unknown +- os=-coff +- ;; +- tic6x | c6x*) +- basic_machine=tic6x-unknown +- os=-coff ++ tile*) ++ basic_machine=$basic_machine-unknown ++ os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown +@@ -1029,9 +1216,16 @@ + basic_machine=hppa1.1-winbond + os=-proelf + ;; ++ xbox) ++ basic_machine=i686-pc ++ os=-mingw32 ++ ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; ++ xscale-* | xscalee[bl]-*) ++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ++ ;; + ymp) + basic_machine=ymp-cray + os=-unicos +@@ -1040,6 +1234,10 @@ + basic_machine=z8k-unknown + os=-sim + ;; ++ z80-*-coff) ++ basic_machine=z80-unknown ++ os=-sim ++ ;; + none) + basic_machine=none-none + os=-none +@@ -1078,13 +1276,10 @@ + we32k) + basic_machine=we32k-att + ;; +- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) ++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; +- sh64) +- basic_machine=sh64-unknown +- ;; +- sparc | sparcv8 | sparcv9 | sparcv9b) ++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) +@@ -1128,9 +1323,12 @@ + if [ x"$os" != x"" ] + then + case $os in +- # First match some system type aliases +- # that might get confused with valid system types. ++ # First match some system type aliases ++ # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. ++ -auroraux) ++ os=-auroraux ++ ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; +@@ -1151,26 +1349,31 @@ + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ +- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ +- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ ++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ ++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ ++ | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ +- | -aos* \ ++ | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ +- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ ++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ ++ | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ +- | -chorusos* | -chorusrdb* \ +- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ ++ | -chorusos* | -chorusrdb* | -cegcc* \ ++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ ++ | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ +- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) ++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ ++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) +@@ -1188,7 +1391,7 @@ + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ +- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ ++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) +@@ -1209,7 +1412,7 @@ + -opened*) + os=-openedition + ;; +- -os400*) ++ -os400*) + os=-os400 + ;; + -wince*) +@@ -1258,7 +1461,7 @@ + -sinix*) + os=-sysv4 + ;; +- -tpf*) ++ -tpf*) + os=-tpf + ;; + -triton*) +@@ -1297,6 +1500,14 @@ + -kaos*) + os=-kaos + ;; ++ -zvmoe) ++ os=-zvmoe ++ ;; ++ -dicos*) ++ os=-dicos ++ ;; ++ -nacl*) ++ ;; + -none) + ;; + *) +@@ -1319,6 +1530,12 @@ + # system, and we'll never get to this point. + + case $basic_machine in ++ score-*) ++ os=-elf ++ ;; ++ spu-*) ++ os=-elf ++ ;; + *-acorn) + os=-riscix1.2 + ;; +@@ -1328,9 +1545,21 @@ + arm*-semi) + os=-aout + ;; +- c4x-* | tic4x-*) +- os=-coff +- ;; ++ c4x-* | tic4x-*) ++ os=-coff ++ ;; ++ hexagon-*) ++ os=-elf ++ ;; ++ tic54x-*) ++ os=-coff ++ ;; ++ tic55x-*) ++ os=-coff ++ ;; ++ tic6x-*) ++ os=-coff ++ ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 +@@ -1349,13 +1578,13 @@ + ;; + m68000-sun) + os=-sunos3 +- # This also exists in the configure program, but was not the +- # default. +- # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; ++ mep-*) ++ os=-elf ++ ;; + mips*-cisco) + os=-elf + ;; +@@ -1374,10 +1603,13 @@ + *-be) + os=-beos + ;; ++ *-haiku) ++ os=-haiku ++ ;; + *-ibm) + os=-aix + ;; +- *-knuth) ++ *-knuth) + os=-mmixware + ;; + *-wec) +@@ -1482,7 +1714,7 @@ + -sunos*) + vendor=sun + ;; +- -aix*) ++ -cnk*|-aix*) + vendor=ibm + ;; + -beos*) +@@ -1545,7 +1777,7 @@ + esac + + echo $basic_machine$os +-exit 0 ++exit + + # Local variables: + # eval: (add-hook 'write-file-hooks 'time-stamp) diff --git a/pads.spec b/pads.spec index 2f7f6f7..f7bf08c 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 10%{?dist} +Release: 11%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -26,6 +26,7 @@ Patch14: pads-1.2-leak.patch Patch15: pads-1.2-perf.patch Patch16: pads-1.2-daemon.patch Patch17: pads-1.2-pthreads.patch +Patch18: pads-aarch64.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel @@ -64,6 +65,7 @@ are found, it can send IDMEF alerts via prelude. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 %build autoreconf -fv --install @@ -137,6 +139,9 @@ fi %{_mandir}/*/* %changelog +* Sun Jun 02 2013 Steve Grubb 1.2-11 +- Support Aarch64 (#926298) + * Thu Feb 14 2013 Fedora Release Engineering - 1.2-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild From dfdbb178f07b4468f295706bc8ba471b5d577dde Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 21 Jun 2013 15:30:22 -0400 Subject: [PATCH 16/61] Drop prelude support --- pads.spec | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pads.spec b/pads.spec index f7bf08c..e4b0688 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 11%{?dist} +Release: 12%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -30,7 +30,6 @@ Patch18: pads-aarch64.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel -BuildRequires: libprelude-devel >= 0.9.21 #Requires(post) : /sbin/chkconfig #Requires(preun) : /sbin/chkconfig #Requires(preun) : /sbin/service @@ -42,9 +41,7 @@ Requires(postun): systemd-units %description PADS is a libpcap based detection engine used to passively -detect network assets. It is designed to complement IDS -technology by providing context to IDS alerts. When new assets -are found, it can send IDMEF alerts via prelude. +detect network assets. %prep %setup -q @@ -69,7 +66,7 @@ are found, it can send IDMEF alerts via prelude. %build autoreconf -fv --install -%configure --with-prelude +%configure make %{?_smp_mflags} %install @@ -139,6 +136,9 @@ fi %{_mandir}/*/* %changelog +* Fri Jun 21 2013 Steve Grubb 1.2-12 +- Drop prelude support + * Sun Jun 02 2013 Steve Grubb 1.2-11 - Support Aarch64 (#926298) From cdf19c2768012af5119aa90a6528a69c1978c660 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 21 Jun 2013 15:51:11 -0400 Subject: [PATCH 17/61] Drop prelude support --- pads.spec | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/pads.spec b/pads.spec index e4b0688..a646ec4 100644 --- a/pads.spec +++ b/pads.spec @@ -30,10 +30,7 @@ Patch18: pads-aarch64.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel -#Requires(post) : /sbin/chkconfig -#Requires(preun) : /sbin/chkconfig -#Requires(preun) : /sbin/service -#Requires(postun): /sbin/service +BuildRequires: systemd Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units @@ -74,7 +71,7 @@ rm -rf %{buildroot} mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_sysconfdir}/sysconfig make install DESTDIR=%{buildroot} -install -m 755 %SOURCE1 %{buildroot}%{_unitdir}/%{name}.service +install -m 644 %SOURCE1 %{buildroot}%{_unitdir}/pads.service install -m 640 %SOURCE2 %{buildroot}%{_sysconfdir}/sysconfig/%{name} # Remove installed docs since we pick this up another way rm -rf $RPM_BUILD_ROOT/usr/share/pads/ @@ -83,7 +80,6 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ rm -rf %{buildroot} %post -#/sbin/chkconfig --add %{name} if [ $1 -eq 1 ] ; then # Initial installation /bin/systemctl daemon-reload >/dev/null 2>&1 || : @@ -91,10 +87,6 @@ fi %preun -#if [ $1 = 0 ]; then -# /sbin/service %{name} stop > /dev/null 2>&1 || : -# /sbin/chkconfig --del %{name} -#fi if [ $1 -eq 0 ] ; then # Package removal, not upgrade /bin/systemctl --no-reload pads.service > /dev/null 2>&1 || : @@ -103,9 +95,6 @@ fi %postun -#if [ "$1" -ge "1" ]; then -# /sbin/service %{name} condrestart >/dev/null 2>&1 || : -#fi /bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall @@ -130,7 +119,7 @@ fi %{_sysconfdir}/pads-signature-list %config(noreplace) %attr(0640,root,root) %{_sysconfdir}/pads.conf %config(noreplace) %attr(0640,root,root) %{_sysconfdir}/sysconfig/%{name} -%attr(0755,root,root) %{_unitdir}/%{name}.service +%{_unitdir}/pads.service %{_bindir}/pads %{_bindir}/pads-report %{_mandir}/*/* From 1d7733517e6a8647bd7a66217dbb6aa45cafcf5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Wed, 17 Jul 2013 20:24:58 +0200 Subject: [PATCH 18/61] Perl 5.18 rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index a646ec4..5bfa072 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 12%{?dist} +Release: 13%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -125,6 +125,9 @@ fi %{_mandir}/*/* %changelog +* Wed Jul 17 2013 Petr Pisar - 1.2-13 +- Perl 5.18 rebuild + * Fri Jun 21 2013 Steve Grubb 1.2-12 - Drop prelude support From 06440e9b1c408c1ae6553e2cbf3f033434be5824 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sat, 3 Aug 2013 11:19:06 -0500 Subject: [PATCH 19/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 5bfa072..fe95575 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 13%{?dist} +Release: 14%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -125,6 +125,9 @@ fi %{_mandir}/*/* %changelog +* Sat Aug 03 2013 Fedora Release Engineering - 1.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + * Wed Jul 17 2013 Petr Pisar - 1.2-13 - Perl 5.18 rebuild From 2d8dbdd6e316056045a4e9ac16b3178e461a1c42 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 6 Jun 2014 18:26:14 -0500 Subject: [PATCH 20/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index fe95575..126c174 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 14%{?dist} +Release: 15%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -125,6 +125,9 @@ fi %{_mandir}/*/* %changelog +* Fri Jun 06 2014 Fedora Release Engineering - 1.2-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + * Sat Aug 03 2013 Fedora Release Engineering - 1.2-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild From 7224f1726ce0dca55174a6d8a812ce2101c31d58 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 17 Aug 2014 14:33:13 +0000 Subject: [PATCH 21/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 126c174..a09bc52 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 15%{?dist} +Release: 16%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -125,6 +125,9 @@ fi %{_mandir}/*/* %changelog +* Sun Aug 17 2014 Fedora Release Engineering - 1.2-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + * Fri Jun 06 2014 Fedora Release Engineering - 1.2-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild From 6cc4e64a70a81d7e8f37b328371aa04e84519507 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Thu, 18 Jun 2015 00:35:42 +0000 Subject: [PATCH 22/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index a09bc52..3a366e4 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 16%{?dist} +Release: 17%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -125,6 +125,9 @@ fi %{_mandir}/*/* %changelog +* Thu Jun 18 2015 Fedora Release Engineering - 1.2-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + * Sun Aug 17 2014 Fedora Release Engineering - 1.2-16 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild From 786d646de5195eb338385db8edf5d6e850662c2f Mon Sep 17 00:00:00 2001 From: sgrubb Date: Mon, 17 Aug 2015 10:26:17 -0400 Subject: [PATCH 23/61] Fix bad inline keyword use (#1239755) --- pads-1.2-inline-cleanup.patch | 24 ++++++++++++++++++++++++ pads.spec | 7 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 pads-1.2-inline-cleanup.patch diff --git a/pads-1.2-inline-cleanup.patch b/pads-1.2-inline-cleanup.patch new file mode 100644 index 0000000..9f76219 --- /dev/null +++ b/pads-1.2-inline-cleanup.patch @@ -0,0 +1,24 @@ +diff -urp pads-1.2.orig/src/storage.c pads-1.2/src/storage.c +--- pads-1.2.orig/src/storage.c 2015-08-17 10:18:51.304266249 -0400 ++++ pads-1.2/src/storage.c 2015-08-17 10:22:40.551260540 -0400 +@@ -369,7 +369,7 @@ void end_storage () + * : 2 - Protocol + * RETURN : Pointer to Asset + * ---------------------------------------------------------- */ +-inline Asset * ++Asset * + find_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto) + { + Asset *list; +diff -urp pads-1.2.orig/src/storage.h pads-1.2/src/storage.h +--- pads-1.2.orig/src/storage.h 2015-08-17 10:18:51.304266249 -0400 ++++ pads-1.2/src/storage.h 2015-08-17 10:21:10.412262785 -0400 +@@ -56,7 +56,7 @@ void add_arp_asset (struct in_addr ip_ad + unsigned short get_i_attempts (struct in_addr ip_addr, u_int16_t port, unsigned short proto); + short update_i_attempts (unsigned short i_attempts); + short update_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto, bstring service, bstring application); +-inline Asset *find_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto); ++Asset *find_asset (struct in_addr ip_addr, u_int16_t port, unsigned short proto); + Asset *get_asset_pointer (void); + ArpAsset *get_arp_pointer (void); + void end_storage (void); diff --git a/pads.spec b/pads.spec index 3a366e4..26c77c1 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 17%{?dist} +Release: 18%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -27,6 +27,7 @@ Patch15: pads-1.2-perf.patch Patch16: pads-1.2-daemon.patch Patch17: pads-1.2-pthreads.patch Patch18: pads-aarch64.patch +Patch19: pads-1.2-inline-cleanup.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel @@ -60,6 +61,7 @@ detect network assets. %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %build autoreconf -fv --install @@ -125,6 +127,9 @@ fi %{_mandir}/*/* %changelog +* Mon Aug 17 2015 Steve Grubb 1.2-18 +- Fix bad inline keyword use (#1239755) + * Thu Jun 18 2015 Fedora Release Engineering - 1.2-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild From dfa94ab8c7c09dc54dd1ecaf54e6cb01f1ab584b Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 4 Feb 2016 11:49:31 +0000 Subject: [PATCH 24/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 26c77c1..77075c7 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 18%{?dist} +Release: 19%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -127,6 +127,9 @@ fi %{_mandir}/*/* %changelog +* Thu Feb 04 2016 Fedora Release Engineering - 1.2-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + * Mon Aug 17 2015 Steve Grubb 1.2-18 - Fix bad inline keyword use (#1239755) From 68330d68eefe41e48c34e7e9f894983a9a6bf275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Fri, 24 Jun 2016 10:48:54 +0200 Subject: [PATCH 25/61] Mandatory Perl build-requires added --- pads.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/pads.spec b/pads.spec index 77075c7..0a98121 100644 --- a/pads.spec +++ b/pads.spec @@ -31,6 +31,7 @@ Patch19: pads-1.2-inline-cleanup.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel +BuildRequires: perl-generators BuildRequires: systemd Requires(post): systemd-units Requires(preun): systemd-units From 51d6c6cf4ec75c66830541159f2f5a6861f5fc93 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 11 Feb 2017 01:09:53 +0000 Subject: [PATCH 26/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 0a98121..9b3b19d 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 19%{?dist} +Release: 20%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -128,6 +128,9 @@ fi %{_mandir}/*/* %changelog +* Sat Feb 11 2017 Fedora Release Engineering - 1.2-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Thu Feb 04 2016 Fedora Release Engineering - 1.2-19 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild From 6ea5ca562beff2b15cda13d4265d2dc8dab61216 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 27 Jul 2017 02:04:46 +0000 Subject: [PATCH 27/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 9b3b19d..3c206b8 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 20%{?dist} +Release: 21%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -128,6 +128,9 @@ fi %{_mandir}/*/* %changelog +* Thu Jul 27 2017 Fedora Release Engineering - 1.2-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Sat Feb 11 2017 Fedora Release Engineering - 1.2-20 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From ce862dec5942e6ac6e179048ba2b7a7811de7367 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 3 Aug 2017 04:45:18 +0000 Subject: [PATCH 28/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 3c206b8..ffb8d69 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 21%{?dist} +Release: 22%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -128,6 +128,9 @@ fi %{_mandir}/*/* %changelog +* Thu Aug 03 2017 Fedora Release Engineering - 1.2-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Thu Jul 27 2017 Fedora Release Engineering - 1.2-21 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 301d2e0e3f40551f17c8a002a5ec5fed85376ca2 Mon Sep 17 00:00:00 2001 From: sgrubb Date: Thu, 21 Sep 2017 18:15:34 -0400 Subject: [PATCH 29/61] Add systemd macros. (#850262) --- pads.spec | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/pads.spec b/pads.spec index ffb8d69..37c94d5 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 22%{?dist} +Release: 23%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -83,37 +83,13 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ rm -rf %{buildroot} %post -if [ $1 -eq 1 ] ; then - # Initial installation - /bin/systemctl daemon-reload >/dev/null 2>&1 || : -fi - +%systemd_post auditd.service %preun -if [ $1 -eq 0 ] ; then - # Package removal, not upgrade - /bin/systemctl --no-reload pads.service > /dev/null 2>&1 || : - /bin/systemctl stop pads.service > /dev/null 2>&1 || : -fi - +%systemd_preun auditd.service %postun -/bin/systemctl daemon-reload >/dev/null 2>&1 || : -if [ $1 -ge 1 ] ; then - # Package upgrade, not uninstall - /bin/systemctl try-restart pads.service >/dev/null 2>&1 || : -fi - -%triggerun -- pads < 1.2-8 -# Save the current service runlevel info -# User must manually run systemd-sysv-convert --apply pads -# to migrate them to systemd targets -/usr/bin/systemd-sysv-convert --save pads >/dev/null 2>&1 ||: - -# Run these because the SysV package being removed won't do them -/sbin/chkconfig --del pads >/dev/null 2>&1 || : -/bin/systemctl try-restart pads.service >/dev/null 2>&1 || : - +%systemd_postun_with_restart pads.service %files %defattr(-,root,root,-) @@ -128,6 +104,9 @@ fi %{_mandir}/*/* %changelog +* Thu Sep 21 2017 Steve Grubb 1.2-23 +- Add systemd macros. (#850262) + * Thu Aug 03 2017 Fedora Release Engineering - 1.2-22 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild From 4d4ea6e621c5518fa45f3e712043fe9c6d9dd168 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 8 Feb 2018 18:08:29 +0000 Subject: [PATCH 30/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 37c94d5..bc3a641 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 23%{?dist} +Release: 24%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -104,6 +104,9 @@ rm -rf %{buildroot} %{_mandir}/*/* %changelog +* Thu Feb 08 2018 Fedora Release Engineering - 1.2-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Thu Sep 21 2017 Steve Grubb 1.2-23 - Add systemd macros. (#850262) From 2691a0d8faf1e2c033295efe8ab0e1f8667af39c Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Tue, 13 Feb 2018 23:59:05 +0100 Subject: [PATCH 31/61] Remove BuildRoot definition None of currently supported distributions need that. It was needed last for EL5 which is EOL now Signed-off-by: Igor Gnatenko --- pads.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/pads.spec b/pads.spec index bc3a641..12edc70 100644 --- a/pads.spec +++ b/pads.spec @@ -28,7 +28,6 @@ Patch16: pads-1.2-daemon.patch Patch17: pads-1.2-pthreads.patch Patch18: pads-aarch64.patch Patch19: pads-1.2-inline-cleanup.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel BuildRequires: perl-generators From 1b5d8db46b33f7fc00f79fa3c5ff3687965c8616 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Wed, 14 Feb 2018 07:24:18 +0100 Subject: [PATCH 32/61] Remove %clean section None of currently supported distributions need that. Last one was EL5 which is EOL for a while. Signed-off-by: Igor Gnatenko --- pads.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/pads.spec b/pads.spec index 12edc70..3ccf698 100644 --- a/pads.spec +++ b/pads.spec @@ -78,9 +78,6 @@ install -m 640 %SOURCE2 %{buildroot}%{_sysconfdir}/sysconfig/%{name} # Remove installed docs since we pick this up another way rm -rf $RPM_BUILD_ROOT/usr/share/pads/ -%clean -rm -rf %{buildroot} - %post %systemd_post auditd.service From bc58c61121e764e674b0b805053442974faefc2b Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 9 Jul 2018 19:06:50 +0200 Subject: [PATCH 33/61] add BuildRequires: gcc Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot --- pads.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/pads.spec b/pads.spec index 3ccf698..66f25c9 100644 --- a/pads.spec +++ b/pads.spec @@ -28,6 +28,7 @@ Patch16: pads-1.2-daemon.patch Patch17: pads-1.2-pthreads.patch Patch18: pads-aarch64.patch Patch19: pads-1.2-inline-cleanup.patch +BuildRequires: gcc BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel BuildRequires: perl-generators From 718aa9bd74f4dbc583c037a0d34461b5a89e1854 Mon Sep 17 00:00:00 2001 From: Jason Tibbitts Date: Tue, 10 Jul 2018 02:14:49 -0500 Subject: [PATCH 34/61] Remove needless use of %defattr --- pads.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/pads.spec b/pads.spec index 66f25c9..a29b42e 100644 --- a/pads.spec +++ b/pads.spec @@ -89,7 +89,6 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %systemd_postun_with_restart pads.service %files -%defattr(-,root,root,-) %doc doc/AUTHORS doc/COPYING doc/README doc/ChangeLog %{_sysconfdir}/pads-ether-codes %{_sysconfdir}/pads-signature-list From 7904b57be3b67ae187c1266866b727b8b345b65f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 13 Jul 2018 15:23:48 +0000 Subject: [PATCH 35/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index a29b42e..bde12b6 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 24%{?dist} +Release: 25%{?dist} Summary: Passive Asset Detection System Group: Applications/System License: GPLv2+ @@ -100,6 +100,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Fri Jul 13 2018 Fedora Release Engineering - 1.2-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Thu Feb 08 2018 Fedora Release Engineering - 1.2-24 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From d6e6ac61e840457e8761056ff7a4e4a30a5cbee7 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:18:00 +0100 Subject: [PATCH 36/61] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- pads.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/pads.spec b/pads.spec index bde12b6..f69bda7 100644 --- a/pads.spec +++ b/pads.spec @@ -3,7 +3,6 @@ Name: pads Version: 1.2 Release: 25%{?dist} Summary: Passive Asset Detection System -Group: Applications/System License: GPLv2+ URL: http://passive.sourceforge.net/ Source0: http://prdownloads.sourceforge.net/passive/%{name}-%{version}.tar.gz From 26c1a4ccd4e46cc8258e16ba76c59d914ace42fd Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 1 Feb 2019 17:48:44 +0000 Subject: [PATCH 37/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index f69bda7..1e38956 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 25%{?dist} +Release: 26%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -99,6 +99,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Fri Feb 01 2019 Fedora Release Engineering - 1.2-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Fri Jul 13 2018 Fedora Release Engineering - 1.2-25 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 4ac7ad3ddd8f0cf32a14e3c5dc113e07463599c6 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Mon, 11 Feb 2019 17:15:55 -0500 Subject: [PATCH 38/61] add debug commands --- pads.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pads.spec b/pads.spec index 1e38956..c72f28b 100644 --- a/pads.spec +++ b/pads.spec @@ -66,6 +66,8 @@ detect network assets. %build autoreconf -fv --install %configure +cat config.log +grep -r EXTRA_LIBS * make %{?_smp_mflags} %install From aa41d4ac69f6a97d194b2d87c3504972b4fcf65c Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Mon, 11 Feb 2019 17:51:49 -0500 Subject: [PATCH 39/61] Add pads-1.2-extra-libs.patch to fix missing EXTRA_LIBS --- pads-1.2-extra-libs.patch | 12 ++++++++++++ pads.spec | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 pads-1.2-extra-libs.patch diff --git a/pads-1.2-extra-libs.patch b/pads-1.2-extra-libs.patch new file mode 100644 index 0000000..85c8da0 --- /dev/null +++ b/pads-1.2-extra-libs.patch @@ -0,0 +1,12 @@ +diff -ur pads-1.2.orig/src/Makefile.am pads-1.2/src/Makefile.am +--- pads-1.2.orig/src/Makefile.am 2019-02-11 16:48:47.516302720 -0500 ++++ pads-1.2/src/Makefile.am 2019-02-11 17:49:51.772909507 -0500 +@@ -12,7 +12,7 @@ + util.c util.h \ + global.h + pads_LDFLAGS = -pthread +-pads_LDADD = $(top_srcdir)/lib/bstring/libbstring.a output/liboutput.a ++pads_LDADD = $(top_srcdir)/lib/bstring/libbstring.a output/liboutput.a $(EXTRA_LIBS) + bin_SCRIPTS = pads-report + + EXTRA_DIST = pads-report.pl diff --git a/pads.spec b/pads.spec index c72f28b..aa7aa6c 100644 --- a/pads.spec +++ b/pads.spec @@ -27,6 +27,7 @@ Patch16: pads-1.2-daemon.patch Patch17: pads-1.2-pthreads.patch Patch18: pads-aarch64.patch Patch19: pads-1.2-inline-cleanup.patch +Patch20: pads-1.2-extra-libs.patch BuildRequires: gcc BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel @@ -62,12 +63,11 @@ detect network assets. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build autoreconf -fv --install %configure -cat config.log -grep -r EXTRA_LIBS * make %{?_smp_mflags} %install From 6ee706ada09e757f595bc74ea6bac763bba707cc Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jul 2019 23:53:14 +0000 Subject: [PATCH 40/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index aa7aa6c..7ec8115 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 26%{?dist} +Release: 27%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -101,6 +101,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jul 25 2019 Fedora Release Engineering - 1.2-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Fri Feb 01 2019 Fedora Release Engineering - 1.2-26 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 0bbfdd6b6db4b6c7ea14816ac7495738b2e895e7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jan 2020 20:43:27 +0000 Subject: [PATCH 41/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 7ec8115..47e0eec 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 27%{?dist} +Release: 28%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -101,6 +101,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Wed Jan 29 2020 Fedora Release Engineering - 1.2-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Thu Jul 25 2019 Fedora Release Engineering - 1.2-27 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 489e8b927a45cb763d05c9d6fe3288a88abbc542 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jul 2020 13:02:32 +0000 Subject: [PATCH 42/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 47e0eec..0959e56 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 28%{?dist} +Release: 29%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -101,6 +101,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Tue Jul 28 2020 Fedora Release Engineering - 1.2-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Wed Jan 29 2020 Fedora Release Engineering - 1.2-28 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From c1150678db9016fc405443b3f97f8ed6861b3983 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 7 Jan 2021 06:51:41 +0000 Subject: [PATCH 43/61] Add BuildRequires: make https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot --- pads.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/pads.spec b/pads.spec index 0959e56..13717af 100644 --- a/pads.spec +++ b/pads.spec @@ -28,6 +28,7 @@ Patch17: pads-1.2-pthreads.patch Patch18: pads-aarch64.patch Patch19: pads-1.2-inline-cleanup.patch Patch20: pads-1.2-extra-libs.patch +BuildRequires: make BuildRequires: gcc BuildRequires: automake autoconf BuildRequires: pcre-devel libpcap-devel From 29393ab3f74ec25ef8ca761fa6a0929f161b3161 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 22:49:46 +0000 Subject: [PATCH 44/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 13717af..6f53375 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 29%{?dist} +Release: 30%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 1.2-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Tue Jul 28 2020 Fedora Release Engineering - 1.2-29 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From 47c99b175baba38974ce7566e3864c6b9b815e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 2 Mar 2021 16:13:06 +0100 Subject: [PATCH 45/61] Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. --- pads.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 6f53375..dc37876 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 30%{?dist} +Release: 31%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -102,6 +102,10 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Tue Mar 02 2021 Zbigniew JÄ™drzejewski-Szmek - 1.2-31 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + * Tue Jan 26 2021 Fedora Release Engineering - 1.2-30 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 61a9764dda3ee5cc34822bda6bfdb244e154873e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 22 Jul 2021 17:35:06 +0000 Subject: [PATCH 46/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index dc37876..5edf3fa 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 31%{?dist} +Release: 32%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jul 22 2021 Fedora Release Engineering - 1.2-32 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Tue Mar 02 2021 Zbigniew JÄ™drzejewski-Szmek - 1.2-31 - Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. From 9f7e9615ed02416732821db4234e8368f04ad5fa Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 20 Jan 2022 22:44:46 +0000 Subject: [PATCH 47/61] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 5edf3fa..0c4e4f5 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 32%{?dist} +Release: 33%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jan 20 2022 Fedora Release Engineering - 1.2-33 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Thu Jul 22 2021 Fedora Release Engineering - 1.2-32 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 8d14733b724a8446ad888952947366e67966c696 Mon Sep 17 00:00:00 2001 From: Troy Dawson Date: Thu, 10 Feb 2022 15:23:51 -0800 Subject: [PATCH 48/61] epel8-playground decommissioned : https://pagure.io/epel/issue/136 --- .cvsignore | 0 Makefile | 21 --------------------- dead.package | 1 + sources | 0 4 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 .cvsignore delete mode 100644 Makefile create mode 100644 dead.package delete mode 100644 sources diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index e69de29..0000000 diff --git a/Makefile b/Makefile deleted file mode 100644 index b378297..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: pads -# $Id$ -NAME := pads -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..a72aec0 --- /dev/null +++ b/dead.package @@ -0,0 +1 @@ +epel8-playground decommissioned : https://pagure.io/epel/issue/136 diff --git a/sources b/sources deleted file mode 100644 index e69de29..0000000 From 1af60d26ae778f8d39944df718aa93912b72e6a0 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 22 Jul 2022 02:31:51 +0000 Subject: [PATCH 49/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 0c4e4f5..943b32a 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 33%{?dist} +Release: 34%{?dist} Summary: Passive Asset Detection System License: GPLv2+ URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Fri Jul 22 2022 Fedora Release Engineering - 1.2-34 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Thu Jan 20 2022 Fedora Release Engineering - 1.2-33 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 3e34b32631b7b6128e5fe4e925d7517e99019997 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Thu, 22 Dec 2022 12:28:31 -0500 Subject: [PATCH 50/61] SPDX Migration --- pads.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pads.spec b/pads.spec index 943b32a..b9dcad3 100644 --- a/pads.spec +++ b/pads.spec @@ -1,9 +1,9 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 34%{?dist} +Release: 35%{?dist} Summary: Passive Asset Detection System -License: GPLv2+ +License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ Source0: http://prdownloads.sourceforge.net/passive/%{name}-%{version}.tar.gz Source1: pads.service @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Dec 22 2022 Steve Grubb - 1.2-35 +- SPDX Migration + * Fri Jul 22 2022 Fedora Release Engineering - 1.2-34 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From da71523d43210d8b7d13f78829b979fde0bf046a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 19 Jan 2023 23:14:03 +0000 Subject: [PATCH 51/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index b9dcad3..42ce6b3 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 35%{?dist} +Release: 36%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jan 19 2023 Fedora Release Engineering - 1.2-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Thu Dec 22 2022 Steve Grubb - 1.2-35 - SPDX Migration From 1cfcda870df5941eeb482210f95ab32512f3b0df Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 20 Jul 2023 18:29:20 +0000 Subject: [PATCH 52/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 42ce6b3..d4f927b 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 36%{?dist} +Release: 37%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jul 20 2023 Fedora Release Engineering - 1.2-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Thu Jan 19 2023 Fedora Release Engineering - 1.2-36 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 4f0ccc36c33c89b1cea596c0c60391aaa4c9d950 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 14 Nov 2023 13:19:19 -0500 Subject: [PATCH 53/61] update patch directives in spec file --- pads.spec | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pads.spec b/pads.spec index d4f927b..01fe668 100644 --- a/pads.spec +++ b/pads.spec @@ -45,26 +45,26 @@ detect network assets. %prep %setup -q -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 +%patch 1 -p1 +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 +%patch 5 -p1 +%patch 6 -p1 +%patch 7 -p1 +%patch 8 -p1 +%patch 9 -p1 +%patch 10 -p1 +%patch 11 -p1 +%patch 12 -p1 +%patch 13 -p1 +%patch 14 -p1 +%patch 15 -p1 +%patch 16 -p1 +%patch 17 -p1 +%patch 18 -p1 +%patch 19 -p1 +%patch 20 -p1 %build autoreconf -fv --install From 310f4bc004654d86bd9f0745717d70617dd03075 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 14 Nov 2023 13:24:49 -0500 Subject: [PATCH 54/61] Update service security settings --- pads.service | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pads.service b/pads.service index e32d1e7..f4e5340 100644 --- a/pads.service +++ b/pads.service @@ -1,11 +1,20 @@ [Unit] Description=Passive Asset Detection System After=network.target +Documentation=man:pads(8) [Service] Type=forking PIDFile=/run/pads.pid ExecStart=/usr/bin/pads -D -c /etc/pads.conf +### Security Settings ### +MemoryDenyWriteExecute=true +LockPersonality=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectControlGroups=true +RestrictRealtime=true + [Install] WantedBy=multi-user.target From 5d145534b596f55c772041fabd09547546a7c3d5 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 14 Nov 2023 13:27:37 -0500 Subject: [PATCH 55/61] Fix patching and improve security settings in service file --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 01fe668..1324410 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 37%{?dist} +Release: 38%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Tue Nov 14 2023 Steve Grubb - 1.2-38 +- Fix patching and improve security settings in service file + * Thu Jul 20 2023 Fedora Release Engineering - 1.2-37 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From c3050717fe9c0681caab3334337ed65bf046e2f9 Mon Sep 17 00:00:00 2001 From: Steve Grubb Date: Tue, 14 Nov 2023 14:46:13 -0500 Subject: [PATCH 56/61] correct service restarts --- pads.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pads.spec b/pads.spec index 1324410..eab426c 100644 --- a/pads.spec +++ b/pads.spec @@ -82,10 +82,10 @@ install -m 640 %SOURCE2 %{buildroot}%{_sysconfdir}/sysconfig/%{name} rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %post -%systemd_post auditd.service +%systemd_post pads.service %preun -%systemd_preun auditd.service +%systemd_preun pads.service %postun %systemd_postun_with_restart pads.service From 0eb683f55561438692e9e9823271ea8b2240b4c4 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 21 Jan 2024 11:41:07 +0000 Subject: [PATCH 57/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index eab426c..e4fc47f 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 38%{?dist} +Release: 39%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Sun Jan 21 2024 Fedora Release Engineering - 1.2-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Tue Nov 14 2023 Steve Grubb - 1.2-38 - Fix patching and improve security settings in service file From 2a82b655e185d455ebeca5a2bb3e44e3654084b7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jan 2024 11:46:56 +0000 Subject: [PATCH 58/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index e4fc47f..b470b63 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 39%{?dist} +Release: 40%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jan 25 2024 Fedora Release Engineering - 1.2-40 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Sun Jan 21 2024 Fedora Release Engineering - 1.2-39 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From a81639dc4e7ffbbdfe89006740851960b93a05ec Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 18 Jul 2024 21:18:18 +0000 Subject: [PATCH 59/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index b470b63..0b5c38c 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 40%{?dist} +Release: 41%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jul 18 2024 Fedora Release Engineering - 1.2-41 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Thu Jan 25 2024 Fedora Release Engineering - 1.2-40 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From f5bd6a873d4f1cf65ec41ea214eb6df9151c9a43 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 17 Jan 2025 22:10:57 +0000 Subject: [PATCH 60/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 0b5c38c..60d00d5 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 41%{?dist} +Release: 42%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Fri Jan 17 2025 Fedora Release Engineering - 1.2-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Thu Jul 18 2024 Fedora Release Engineering - 1.2-41 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From a476e8990d5514cc647ddfa2c148523752dd912b Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 24 Jul 2025 23:51:44 +0000 Subject: [PATCH 61/61] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- pads.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pads.spec b/pads.spec index 60d00d5..fb18f27 100644 --- a/pads.spec +++ b/pads.spec @@ -1,7 +1,7 @@ %define _default_patch_fuzz 2 Name: pads Version: 1.2 -Release: 42%{?dist} +Release: 43%{?dist} Summary: Passive Asset Detection System License: GPL-2.0-or-later URL: http://passive.sourceforge.net/ @@ -102,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT/usr/share/pads/ %{_mandir}/*/* %changelog +* Thu Jul 24 2025 Fedora Release Engineering - 1.2-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Fri Jan 17 2025 Fedora Release Engineering - 1.2-42 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild