patch-record_c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. $Id$
  2. --- dsniff-2.4.orig/record.c 2001-03-15 09:33:04.000000000 +0100
  3. +++ dsniff-2.4/record.c 2007-01-23 00:20:48.000000000 +0100
  4. @@ -15,12 +15,7 @@
  5. #include <stdio.h>
  6. #include <time.h>
  7. #include <md5.h>
  8. -#ifdef HAVE_DB_185_H
  9. -#define DB_LIBRARY_COMPATIBILITY_API
  10. -#include <db_185.h>
  11. -#elif HAVE_DB_H
  12. -#include <db.h>
  13. -#endif
  14. +#include <gdbm.h>
  15. #include <libnet.h>
  16. #include "options.h"
  17. @@ -37,7 +32,7 @@ struct rec {
  18. struct netobj data;
  19. };
  20. -static DB *db;
  21. +GDBM_FILE dbf;
  22. static int
  23. xdr_rec(XDR *xdrs, struct rec *rec)
  24. @@ -64,7 +59,6 @@ record_print(struct rec *rec)
  25. tm = localtime(&rec->time);
  26. strftime(tstr, sizeof(tstr), "%x %X", tm);
  27. -
  28. srcp = libnet_host_lookup(rec->src, Opt_dns);
  29. dstp = libnet_host_lookup(rec->dst, Opt_dns);
  30. @@ -89,10 +83,10 @@ record_print(struct rec *rec)
  31. fflush(stdout);
  32. }
  33. -static DBT *
  34. +static datum
  35. record_hash(struct rec *rec)
  36. {
  37. - static DBT key;
  38. + static datum key;
  39. static u_char hash[16];
  40. MD5_CTX ctx;
  41. @@ -105,16 +99,16 @@ record_hash(struct rec *rec)
  42. MD5Update(&ctx, rec->data.n_bytes, rec->data.n_len);
  43. MD5Final(hash, &ctx);
  44. - key.data = hash;
  45. - key.size = sizeof(hash);
  46. + key.dptr = hash;
  47. + key.dsize = sizeof(hash);
  48. - return (&key);
  49. + return (key);
  50. }
  51. static int
  52. record_save(struct rec *rec)
  53. {
  54. - DBT *key, data;
  55. + datum key, data;
  56. XDR xdrs;
  57. u_char buf[2048];
  58. @@ -123,15 +117,15 @@ record_save(struct rec *rec)
  59. if (!xdr_rec(&xdrs, rec))
  60. return (0);
  61. - data.data = buf;
  62. - data.size = xdr_getpos(&xdrs);
  63. + data.dptr = buf;
  64. + data.dsize = xdr_getpos(&xdrs);
  65. xdr_destroy(&xdrs);
  66. key = record_hash(rec);
  67. - if (db->put(db, key, &data, R_NOOVERWRITE) == 0)
  68. - db->sync(db, 0);
  69. + if (gdbm_store(dbf, key, data, GDBM_INSERT) == 0)
  70. + gdbm_sync(dbf);
  71. return (1);
  72. }
  73. @@ -139,18 +133,22 @@ record_save(struct rec *rec)
  74. void
  75. record_dump(void)
  76. {
  77. - DBT key, data;
  78. + datum nextkey, key, content;
  79. XDR xdrs;
  80. struct rec rec;
  81. - while (db->seq(db, &key, &data, R_NEXT) == 0) {
  82. + key = gdbm_firstkey(dbf);
  83. + while (key.dptr) {
  84. + nextkey = gdbm_nextkey(dbf, key);
  85. + content = gdbm_fetch(dbf, key);
  86. memset(&rec, 0, sizeof(rec));
  87. - xdrmem_create(&xdrs, data.data, data.size, XDR_DECODE);
  88. -
  89. + xdrmem_create(&xdrs, content.dptr, content.dsize, XDR_DECODE);
  90. if (xdr_rec(&xdrs, &rec)) {
  91. record_print(&rec);
  92. }
  93. xdr_destroy(&xdrs);
  94. + free(key.dptr);
  95. + key = nextkey;
  96. }
  97. }
  98. @@ -158,16 +156,23 @@ int
  99. record_init(char *file)
  100. {
  101. int flags, mode;
  102. -
  103. + // needed for gdbm_open, which does not have the option to create
  104. + // a database in memory
  105. + if(file == NULL) {
  106. + char *record_file = "/tmp/.dsniff.db";
  107. + file = record_file;
  108. + }
  109. +
  110. if (Opt_read) {
  111. - flags = O_RDONLY;
  112. + flags = GDBM_READER;
  113. mode = 0;
  114. }
  115. else {
  116. - flags = O_RDWR|O_CREAT;
  117. + flags = GDBM_WRCREAT;
  118. mode = S_IRUSR|S_IWUSR;
  119. }
  120. - if ((db = dbopen(file, flags, mode, DB_BTREE, NULL)) == NULL)
  121. +
  122. + if ((dbf = gdbm_open(file, 1024, flags, mode, NULL)) == NULL)
  123. return (0);
  124. return (1);
  125. @@ -206,6 +211,6 @@ record(in_addr_t src, in_addr_t dst, int
  126. void
  127. record_close(void)
  128. {
  129. - db->close(db);
  130. + gdbm_close(dbf);
  131. }