--- dns_resolv.c.orig 2008-07-01 07:49:26.000000000 +0200 +++ dns_resolv.c 2008-07-05 08:45:35.000000000 +0200 @@ -68,13 +68,21 @@ #include "parser.h" /* log parser functions */ #include "dns_resolv.h" /* our header */ +#ifndef DB_NOTFOUND +#define DB_NOTFOUND 1 +#endif + /* local data */ DB *dns_db = NULL; /* DNS cache database */ int dns_fd = 0; DB *geo_db = NULL; /* GeoDB database */ +#ifdef USE_DB185 +int geo_dbc = 0; /* GeoDB database cursor */ +#else DBC *geo_dbc = NULL; /* GeoDB database cursor */ +#endif struct dns_child child[MAXCHILD]; /* DNS child pipe data */ @@ -122,7 +130,11 @@ if (debug_mode) fprintf(stderr,"Checking %s...", log_rec->hostname); +#ifdef USE_DB185 + if ( (i=dns_db->get(dns_db, &query, &response, 0)) == 0) +#else if ( (i=dns_db->get(dns_db, NULL, &query, &response, 0)) == 0) +#endif { memcpy(&alignedRecord, response.data, sizeof(struct dnsRecord)); strncpy (log_rec->hostname, @@ -131,7 +143,7 @@ log_rec->hostname[MAXHOST-1]=0; if (debug_mode) fprintf(stderr," found: %s (%ld)\n", - log_rec->hostname, alignedRecord.timeStamp); + log_rec->hostname, (long)alignedRecord.timeStamp); } else /* not found or error occured during get */ { @@ -193,10 +205,14 @@ } /* open cache file */ +#ifdef USE_DB185 + if (!(dns_db = dbopen(dns_cache, O_RDWR|O_CREAT, 0664, DB_HASH, NULL))) +#else if ( (db_create(&dns_db, NULL, 0) != 0) || (dns_db->open(dns_db, NULL, dns_cache, NULL, DB_HASH, DB_CREATE, 0644) != 0) ) +#endif { /* Error: Unable to open DNS cache file */ if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nodb,dns_cache); @@ -206,14 +222,22 @@ } /* get file descriptor */ +#ifdef USE_DB185 + dns_fd = dns_db->fd(dns_db); +#else dns_db->fd(dns_db, &dns_fd); +#endif tmp_flock.l_type=F_WRLCK; /* set read/write lock type */ if (fcntl(dns_fd,F_SETLK,&tmp_flock) < 0) /* and barf if we cant lock */ { /* Error: Unable to lock DNS cache file */ if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nolk,dns_cache); +#ifdef USE_DB185 + dns_db->close(dns_db); +#else dns_db->close(dns_db, 0); +#endif dns_cache=NULL; dns_db=NULL; return 0; /* disable cache */ @@ -261,7 +285,11 @@ q.size = strlen(log_rec.hostname); /* Check if we have it in DB */ +#ifdef USE_DB185 + if ( (i=(dns_db->get)(dns_db, &q, &r, 0)) == 0 ) +#else if ( (i=dns_db->get(dns_db, NULL, &q, &r, 0)) == 0 ) +#endif { /* have a record for this address */ memcpy(&alignedRecord, r.data, sizeof(struct dnsRecord)); @@ -301,7 +329,11 @@ if (verbose>1) printf("%s\n",msg_dns_none); tmp_flock.l_type=F_UNLCK; fcntl(dns_fd, F_SETLK, &tmp_flock); +#ifdef USE_DB185 + dns_db->close(dns_db); +#else dns_db->close(dns_db, 0); +#endif return 0; } @@ -334,7 +366,11 @@ /* processing done, exit */ tmp_flock.l_type=F_UNLCK; fcntl(dns_fd, F_SETLK, &tmp_flock); +#ifdef USE_DB185 + dns_db->close(dns_db); +#else dns_db->close(dns_db, 0); +#endif return 0; } @@ -719,7 +755,11 @@ v.size = recSize; v.data = recPtr; +#ifdef USE_DB185 + if ( (dns_db->put)(dns_db, &k, &v, 0) < 0) +#else if ( dns_db->put(dns_db, NULL, &k, &v, 0) != 0 ) +#endif if (verbose>1) fprintf(stderr,"db_put fail!\n"); free(recPtr); } @@ -767,10 +807,14 @@ } /* open cache file */ +#ifdef USE_DB185 + if (!(dns_db = dbopen(dns_cache, O_RDONLY, 0664, DB_HASH, NULL))) +#else if ( (db_create(&dns_db, NULL, 0) != 0) || (dns_db->open(dns_db, NULL, dns_cache, NULL, DB_HASH, DB_RDONLY, 0644) != 0) ) +#endif { /* Error: Unable to open DNS cache file */ if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nodb,dns_cache); @@ -778,13 +822,21 @@ } /* get file descriptor */ +#ifdef USE_DB185 + dns_fd = dns_db->fd(dns_db); +#else dns_db->fd(dns_db, &dns_fd); +#endif /* Get shared lock on cache file */ if (fcntl(dns_fd, F_SETLK, &tmp_flock) < 0) { if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nolk,dns_cache); +#ifdef USE_DB185 + dns_db->close(dns_db); +#else dns_db->close(dns_db, 0); +#endif return 0; } return 1; @@ -806,7 +858,11 @@ /* clear lock and close cache file */ fcntl(dns_fd, F_SETLK, &tmp_flock); +#ifdef USE_DB185 + dns_db->close(dns_db); +#else dns_db->close(dns_db, 0); +#endif return 1; } @@ -824,6 +880,11 @@ strncpy(buf,dbname,sizeof(buf)-1); buf[sizeof(buf)-1]='\0'; +#ifdef USE_DB185 + geo_db = dbopen(buf, O_RDONLY, 0664, DB_HASH, NULL); + if (geo_db == NULL) + return NULL; +#else /* create database thingie */ if ( db_create(&geo_db, NULL, 0) ) return NULL; @@ -836,6 +897,7 @@ geo_db->close(geo_db,0); return NULL; } +#endif /* all is well in the world */ return geo_db; } @@ -856,7 +918,11 @@ k.data=&x; k.size=sizeof(x); +#ifdef USE_DB185 + i=geo_db->get(geo_db, &k, &v, 0); +#else i=geo_db->get(geo_db, NULL, &k, &v, 0); +#endif if (i) strncpy(str, "Unknown", 8); else strncpy(str, v.data+3, v.size-3); @@ -894,7 +960,11 @@ k.data=&addr; k.size=sizeof(addr); +#ifdef USE_DB185 + i=geo_db->get(geo_db, &k, &v, 0); +#else i=geo_dbc->c_get(geo_dbc, &k, &v, DB_SET_RANGE); +#endif if (!i) memcpy(buf, v.data, 2); return buf; } @@ -905,7 +975,11 @@ void geodb_close(DB *db) { +#ifdef USE_DB185 + db->close(db); +#else db->close(db,0); +#endif } /*********************************************/