summaryrefslogtreecommitdiff
path: root/package/dsniff/patches/patch-record_c
diff options
context:
space:
mode:
Diffstat (limited to 'package/dsniff/patches/patch-record_c')
-rw-r--r--package/dsniff/patches/patch-record_c151
1 files changed, 151 insertions, 0 deletions
diff --git a/package/dsniff/patches/patch-record_c b/package/dsniff/patches/patch-record_c
new file mode 100644
index 000000000..cd63e0969
--- /dev/null
+++ b/package/dsniff/patches/patch-record_c
@@ -0,0 +1,151 @@
+$Id$
+--- dsniff-2.4.orig/record.c 2001-03-15 09:33:04.000000000 +0100
++++ dsniff-2.4/record.c 2007-01-23 00:20:48.000000000 +0100
+@@ -15,12 +15,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"
+@@ -37,7 +32,7 @@ struct rec {
+ struct netobj data;
+ };
+
+-static DB *db;
++GDBM_FILE dbf;
+
+ static int
+ xdr_rec(XDR *xdrs, struct rec *rec)
+@@ -64,7 +59,6 @@ record_print(struct rec *rec)
+
+ 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);
+
+@@ -89,10 +83,10 @@ record_print(struct rec *rec)
+ 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;
+
+@@ -105,16 +99,16 @@ record_hash(struct rec *rec)
+ 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];
+
+@@ -123,15 +117,15 @@ record_save(struct rec *rec)
+ 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);
+ }
+@@ -139,18 +133,22 @@ record_save(struct rec *rec)
+ 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;
+ }
+ }
+
+@@ -158,16 +156,23 @@ int
+ 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);
+@@ -206,6 +211,6 @@ record(in_addr_t src, in_addr_t dst, int
+ void
+ record_close(void)
+ {
+- db->close(db);
++ gdbm_close(dbf);
+ }
+