diff -r 119553d296d2 -r c10fb90893b9 honeyd/honeyd.patch --- a/honeyd/honeyd.patch Thu Oct 04 20:26:02 2012 +0200 +++ b/honeyd/honeyd.patch Thu Oct 04 20:30:05 2012 +0200 @@ -190,3 +190,108 @@ SLIST_HEAD(pf_osfp_list, pf_os_fingerprint) pf_osfp_list; pool_t pf_osfp_entry_pl; pool_t pf_osfp_pl; +Index: nmap.prints +--- nmap.prints.orig 2007-05-28 08:05:05.000000000 +0200 ++++ nmap.prints 2012-10-02 20:41:53.110772932 +0200 +@@ -662,18 +662,6 @@ + T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) + PU(DF=N%TOS=0%IPLEN=38%RIPTL=15C%RID=E%RIPCK=0%UCK=0%ULEN=134%DAT=E) + +-Fingerprint IBM OS/400 V4R2M0 +-Class IBM | OS/400 | V4 | general purpose +-TSeq(Class=TD|RI%gcd=<6%SI=<285DC&>206%IPID=I%TS=U) +-T1(DF=N%W=8000%ACK=S++%Flags=AS%Ops=M) +-T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) +-T3(Resp=Y%DF=N%W=8000%ACK=S++%Flags=AS%Ops=M) +-T4(DF=N%W=0%ACK=S%Flags=R%Ops=) +-T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) +-T6(DF=N%W=0%ACK=S%Flags=R%Ops=) +-T7(DF=N%W=0%ACK=S++%Flags=AR%Ops=) +-PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) +- + Fingerprint IBM OS/400 V4R5M0 + Class IBM | OS/400 | V4 | general purpose + T1(DF=N%W=2000%ACK=S++%Flags=AS%Ops=MNWNNT) +@@ -11085,18 +11073,6 @@ + + Fingerprint Microsoft Windows NT 4.0 SP3 + Class Microsoft | Windows | NT/2K/XP | general purpose +-TSeq(Class=TD|RI%gcd=<18%SI=<2A00DA&>6B73) +-T1(DF=Y%W=7FFF|2017%ACK=S++%Flags=AS%Ops=M|MNWNNT) +-T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) +-T3(Resp=Y%DF=Y%W=7FFF|2017%ACK=S++|O%Flags=AS|A%Ops=M|NNT) +-T4(DF=N%W=0%ACK=O|S%Flags=R%Ops=) +-T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) +-T6(DF=N%W=0%ACK=O|S++%Flags=R%Ops=) +-T7(DF=N%W=0%ACK=S++%Flags=AR%Ops=) +-PU(TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) +- +-Fingerprint Microsoft Windows NT 4.0 SP3 +-Class Microsoft | Windows | NT/2K/XP | general purpose + TSeq(Class=TD%gcd=if_ent.intf_len = sizeof(struct intf_entry); +- strlcpy(inter->if_ent.intf_name, dev, sizeof(inter->if_ent.intf_name)); ++ ++ /* mitigate slash paths in OS that provide */ ++ /* network devices in subdirectories of /dev */ ++ iface = strrchr(dev, '/'); ++ if (iface) ++ iface += sizeof(char); ++ else ++ iface = dev; ++ ++ strlcpy(inter->if_ent.intf_name, iface, sizeof(inter->if_ent.intf_name)); + + if (intf_get(intf, &inter->if_ent) < 0) + err(1, "%s: intf_get", __func__); + + if (inter->if_ent.intf_addr.addr_type != ADDR_TYPE_IP) + errx(1, "%s: bad interface configuration: %s is not IP", +- __func__, dev); ++ __func__, iface); + + return (inter); + } +@@ -244,7 +254,7 @@ + } + + void +-interface_ether_filter(struct interface *inter, ++interface_ether_filter(char *dev, struct interface *inter, + int naddresses, char **addresses) + { + char line[48]; +@@ -259,7 +269,7 @@ + sizeof(inter->if_filter)) + errx(1, "%s: pcap filter exceeds maximum length", __func__); + +- inter->if_eth = eth_open(inter->if_ent.intf_name); ++ inter->if_eth = eth_open(dev); + if (inter->if_eth == NULL) + errx(1, "%s: eth_open: %s", inter->if_ent.intf_name); + +@@ -307,7 +317,7 @@ + * ignore our own packets. + */ + if (inter->if_ent.intf_link_addr.addr_type == ADDR_TYPE_ETH) { +- interface_ether_filter(inter, naddresses, addresses); ++ interface_ether_filter(dev, inter, naddresses, addresses); + + /* + * We open all interfaces before parsing the