1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-30 22:26:47 +02:00
openwrt-xburst/openwrt/package/dsniff/patches/gdbm.patch
wbx e12528e55d fix dsniff read -r
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@1201 3c298f89-4303-0410-b956-a3cf2f4a3e73
2005-06-11 15:19:17 +00:00

205 lines
4.5 KiB
Diff

diff -Nur dsniff-2.3/configure dsniff-2.3.patched/configure
--- dsniff-2.3/configure 2005-06-11 18:13:59.000000000 +0200
+++ dsniff-2.3.patched/configure 2005-06-11 18:14:37.000000000 +0200
@@ -16,6 +16,8 @@
ac_help="$ac_help
--with-db=DIR use Berkeley DB (with --enable-compat185) in DIR"
ac_help="$ac_help
+ --with-gdbm=DIR use GNU DBM in DIR"
+ac_help="$ac_help
--with-libpcap=DIR use libpcap in DIR"
ac_help="$ac_help
--with-libnet=DIR use libnet in DIR"
@@ -3051,7 +3053,40 @@
fi
+echo $ac_n "checking for libgdbm""... $ac_c" 1>&6
+echo "configure:3059: checking for libgdbm" >&5
+# Check whether --with-gdbm or --without-gdbm was given.
+if test "${with_gdbm+set}" = set; then
+ withval="$with_gdbm"
+ case "$withval" in
+ yes|no)
+ echo "$ac_t""no" 1>&6
+ ;;
+ *)
+ echo "$ac_t""$withval" 1>&6
+ if test -f $withval/include/gdbm.h -a -f $withval/lib/libgdbm.a; then
+ owd=`pwd`
+ if cd $withval; then withval=`pwd`; cd $owd; fi
+ DBINC="-I$withval/include"
+ DBLIB="-L$withval/lib -lgdbm"
+ else
+ { echo "configure: error: gdbm.h or libgdbm.a not found in $withval" 1>&2; exit 1; }
+ fi
+ ;;
+ esac
+else
+ if test -f ${prefix}/include/gdbm.h; then
+ LNETINC="-I${prefix}/include"
+ LNETLIB="-L${prefix}/lib -lgdbm"
+ elif test -f /usr/include/gdbm.h; then
+ LNETLIB="-lgdbm"
+ else
+ echo "$ac_t""no" 1>&6
+ { echo "configure: error: libgdbm not found" 1>&2; exit 1; }
+ fi
+ echo "$ac_t""yes" 1>&6
+fi
echo $ac_n "checking for libnet""... $ac_c" 1>&6
diff -Nur dsniff-2.3/record.c dsniff-2.3.patched/record.c
--- dsniff-2.3/record.c 2000-11-14 16:51:02.000000000 +0100
+++ dsniff-2.3.patched/record.c 2005-06-11 18:14:56.000000000 +0200
@@ -13,12 +13,7 @@
#include <stdio.h>
#include <time.h>
#include <md5.h>
-#ifdef HAVE_DB_185_H
-#define DB_LIBRARY_COMPATIBILITY_API
-#include <db_185.h>
-#elif HAVE_DB_H
-#include <db.h>
-#endif
+#include <gdbm.h>
#include <libnet.h>
#include "options.h"
#include "record.h"
@@ -34,7 +29,7 @@
struct netobj data;
};
-static DB *db;
+GDBM_FILE dbf;
static int
xdr_rec(XDR *xdrs, struct rec *rec)
@@ -61,7 +56,6 @@
tm = localtime(&rec->time);
strftime(tstr, sizeof(tstr), "%x %X", tm);
-
srcp = libnet_host_lookup(rec->src, Opt_dns);
dstp = libnet_host_lookup(rec->dst, Opt_dns);
@@ -86,10 +80,10 @@
fflush(stdout);
}
-static DBT *
+static datum
record_hash(struct rec *rec)
{
- static DBT key;
+ static datum key;
static u_char hash[16];
MD5_CTX ctx;
@@ -102,16 +96,16 @@
MD5Update(&ctx, rec->data.n_bytes, rec->data.n_len);
MD5Final(hash, &ctx);
- key.data = hash;
- key.size = sizeof(hash);
+ key.dptr = hash;
+ key.dsize = sizeof(hash);
- return (&key);
+ return (key);
}
static int
record_save(struct rec *rec)
{
- DBT *key, data;
+ datum key, data;
XDR xdrs;
u_char buf[2048];
@@ -120,15 +114,15 @@
if (!xdr_rec(&xdrs, rec))
return (0);
- data.data = buf;
- data.size = xdr_getpos(&xdrs);
+ data.dptr = buf;
+ data.dsize = xdr_getpos(&xdrs);
xdr_destroy(&xdrs);
key = record_hash(rec);
- if (db->put(db, key, &data, R_NOOVERWRITE) == 0)
- db->sync(db, 0);
+ if (gdbm_store(dbf, key, data, GDBM_INSERT) == 0)
+ gdbm_sync(dbf);
return (1);
}
@@ -136,18 +130,22 @@
void
record_dump(void)
{
- DBT key, data;
+ datum nextkey, key, content;
XDR xdrs;
struct rec rec;
- while (db->seq(db, &key, &data, R_NEXT) == 0) {
+ key = gdbm_firstkey(dbf);
+ while (key.dptr) {
+ nextkey = gdbm_nextkey(dbf, key);
+ content = gdbm_fetch(dbf, key);
memset(&rec, 0, sizeof(rec));
- xdrmem_create(&xdrs, data.data, data.size, XDR_DECODE);
-
+ xdrmem_create(&xdrs, content.dptr, content.dsize, XDR_DECODE);
if (xdr_rec(&xdrs, &rec)) {
record_print(&rec);
}
xdr_destroy(&xdrs);
+ free(key.dptr);
+ key = nextkey;
}
}
@@ -155,16 +153,23 @@
record_init(char *file)
{
int flags, mode;
-
+ // needed for gdbm_open, which does not have the option to create
+ // a database in memory
+ if(file == NULL) {
+ char *record_file = "/tmp/.dsniff.db";
+ file = record_file;
+ }
+
if (Opt_read) {
- flags = O_RDONLY;
+ flags = GDBM_READER;
mode = 0;
}
else {
- flags = O_RDWR|O_CREAT;
+ flags = GDBM_WRCREAT;
mode = S_IRUSR|S_IWUSR;
}
- if ((db = dbopen(file, flags, mode, DB_BTREE, NULL)) == NULL)
+
+ if ((dbf = gdbm_open(file, 1024, flags, mode, NULL)) == NULL)
return (0);
return (1);
@@ -203,6 +208,6 @@
void
record_close(void)
{
- db->close(db);
+ gdbm_close(dbf);
}