freebsd-ports/www/webalizer/files/patch-wcmgr.c
2008-07-17 14:08:56 +00:00

590 lines
16 KiB
C

--- wcmgr.c.orig 2008-06-02 07:27:57.000000000 +0200
+++ wcmgr.c 2008-07-05 08:49:42.000000000 +0200
@@ -73,6 +73,10 @@
#include <db.h>
#include "webalizer.h"
+#ifndef DB_NOTFOUND
+#define DB_NOTFOUND 1
+#endif
+
/*********************************************/
/* Forward reference local functions */
/*********************************************/
@@ -104,7 +108,11 @@
int rec_ttl = 7; /* purge TTL in days */
DB *dns_db = NULL; /* DNS cache database */
DB *out_db = NULL; /* output cache db if needed */
+#ifdef USE_DB185
+int cursorp = 0; /* database cursor */
+#else
DBC *cursorp = NULL; /* database cursor */
+#endif
DBT q, r; /* query/reply structures */
char *in_file = NULL; /* input cache filename */
char out_file[MAXHOST+4]; /* output cache filename */
@@ -131,18 +139,24 @@
void print_ver()
{
+#ifndef USE_DB185
int v,r,l;
+#endif
struct utsname system_info;
uname(&system_info);
printf("%s V%s-%s\n%s\n",pname,version,editlvl,copyright);
if (verbose)
{
+#ifndef USE_DB185
db_version(&v,&r,&l);
+#endif
printf("System : %s %s (%s)\n",
system_info.sysname,
system_info.release,
system_info.machine);
+#ifndef USE_DB185
printf("DB Ver. : V%d.%d.%d\n",v,r,l);
+#endif
printf("Mod Date: %s\n",moddate);
}
printf("\n");
@@ -168,7 +182,9 @@
printf(" -l List cache file contents\n");
printf(" -n name hostname (used for add)\n");
printf(" -p num Purge after num days\n");
+#ifndef USE_DB185
printf(" -s Display cache file stats/info\n");
+#endif
printf(" -t num TTL value (for add and stats)\n");
printf(" -x name Export cache to tab file\n");
printf("\n");
@@ -233,7 +249,9 @@
case 'h': print_help(); break;
case 'n': strncpy(name,optarg,sizeof(name)-1); break;
case 'p': action='p'; if (optarg!=NULL) rec_ttl=atoi(optarg); break;
+#ifndef USE_DB185
case 's': action='s'; break;
+#endif
case 't': rec_ttl=atoi(optarg); break;
case 'v': verbose=1; break;
case 'V': print_ver(); break;
@@ -250,12 +268,14 @@
if (argc - optind == 0) print_help(); /* gots to have a filename!! */
in_file = argv[optind];
+#ifndef USE_DB185
/* Try to create our DB handle */
if ( db_create(&dns_db, NULL, 0) )
{
fprintf(stderr,"Error: unable to create db handle!\n");
exit(1);
}
+#endif
/* force sane TTL value */
if (rec_ttl > 99) rec_ttl=99;
@@ -269,7 +289,9 @@
case 'd': del_rec(); break;
case 'f': find_rec(); break;
case 'i': import_cache(); break;
+#ifndef USE_DB185
case 's': stat_cache(); break;
+#endif
case 'p': purge_cache(); break;
case 'x': export_cache(); break;
case 'l':
@@ -290,19 +312,31 @@
u_int64_t t_num=0;
/* open the database (read-only) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDONLY, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
+#ifndef USE_DB185
/* Create a cursor */
if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
{
fprintf(stderr,"Error: Unable to create cursor!\n");
exit(1);
}
+#endif
/* get our runtime for TTL calculations */
time(&runtime);
@@ -321,7 +355,12 @@
memset(&dns_rec, 0, sizeof(struct dnsRec));
/* Loop through database */
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_FIRST);
+ while (!cursorp)
+#else
while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+#endif
{
/* got a record */
t_rec++;
@@ -338,6 +377,9 @@
/* done, clear for next rec */
memset(&q, 0, sizeof(DBT));
memset(&r, 0, sizeof(DBT));
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_NEXT);
+#endif
}
if (verbose)
@@ -368,15 +410,29 @@
rec_ttl, in_file);
/* open the input database (read-write) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDONLY, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
/* get file descriptor */
+#ifdef USE_DB185
+ dns_fd = dns_db->fd(dns_db);
+#else
dns_db->fd(dns_db, &dns_fd);
+#endif
/* Try to lock the file */
our_flock.l_whence=SEEK_SET;
@@ -391,30 +447,44 @@
exit(1);
}
+#ifndef USE_DB185
/* Create a cursor */
if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
{
fprintf(stderr,"Error: Unable to create cursor!\n");
exit(1);
}
+#endif
+#ifndef USE_DB185
/* Try to create our output DB handle */
if ( db_create(&out_db, NULL, 0) )
{
fprintf(stderr,"Error: unable to create output db handle!\n");
exit(1);
}
+#endif
/* generate output filename */
memset(out_file, 0, sizeof(out_file));
sprintf(out_file, "%s.new", in_file);
/* open the output database (read-write) */
+#ifdef USE_DB185
+ out_db = dbopen(out_file, O_RDWR|O_CREAT, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!out_db)
+#else
if ((i=out_db->open(out_db, NULL, out_file, NULL,
DB_HASH, DB_CREATE|DB_EXCL, 0644)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",out_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",out_file,db_strerror(i));
+#endif
exit(1);
}
@@ -426,7 +496,12 @@
memset(&r, 0, sizeof(DBT));
/* Loop through database */
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_FIRST);
+ while (!cursorp)
+#else
while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+#endif
{
/* got a record */
t_in++;
@@ -439,9 +514,17 @@
if ( age <= (rec_ttl*86400) )
{
/* Good record.. insert into new cache file */
+#ifdef USE_DB185
+ if ( (out_db->put)(out_db, &q, &r, 0) < 0)
+#else
if ( (i=out_db->put(out_db, NULL, &q, &r, 0)) != 0 )
+#endif
{
+#ifdef USE_DB185
+ fprintf(stderr,"Error: db_put fail: %s!\n",strerror(i));
+#else
fprintf(stderr,"Error: db_put fail: %s!\n",db_strerror(i));
+#endif
exit(1);
}
else t_out++;
@@ -462,13 +545,21 @@
/* done, clear for next rec */
memset(&q, 0, sizeof(DBT));
memset(&r, 0, sizeof(DBT));
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_NEXT);
+#endif
}
/* Successful exit! */
our_flock.l_type=F_UNLCK;
fcntl(dns_fd, F_SETLK, &our_flock);
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+ out_db->close(out_db);
+#else
dns_db->close(dns_db, 0);
out_db->close(out_db, 0);
+#endif
/* rename files */
if (rename(out_file, in_file))
@@ -485,6 +576,7 @@
/* STAT_CACHE - Display cache stats/info */
/*********************************************/
+#ifndef USE_DB185
void stat_cache()
{
/* Define some variables */
@@ -576,6 +668,7 @@
printf("Record Size Errors : %llu\n",t_err);
printf("\n");
}
+#endif
/*********************************************/
/* FIND_REC - Find IP record in cache */
@@ -587,10 +680,20 @@
char ip_buf[48];
/* open the database (read-only) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDONLY, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
@@ -605,7 +708,11 @@
/* search the cache */
q.data = &addr;
q.size = strlen(addr);
+#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
{
/* We found it! display info */
memset(ip_buf, 0, sizeof(ip_buf));
@@ -644,7 +751,11 @@
if (i==DB_NOTFOUND)
printf("%s not found!\n",addr);
else
+#ifdef USE_DB185
+ printf("Error: %s\n",strerror(i));
+#else
printf("Error: %s\n",db_strerror(i));
+#endif
}
}
@@ -669,10 +780,20 @@
cp=addr; while (*cp!='\0') *cp++=tolower(*cp);
/* open the database (read-write) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDWR, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
@@ -686,7 +807,11 @@
q.size = strlen(addr);
/* Try to delete the record */
+#ifdef USE_DB185
+ if ( (i=dns_db->del(dns_db, &q, 0)) )
+#else
if ( (i=dns_db->del(dns_db, NULL, &q, 0)) )
+#endif
{
if (i==DB_NOTFOUND)
{
@@ -695,11 +820,19 @@
}
else
{
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s\n",strerror(i));
+#else
fprintf(stderr,"Error: %s\n",db_strerror(i));
+#endif
exit(1);
}
}
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+#else
dns_db->close(dns_db, 0);
+#endif
if (verbose)
printf("%s sucessfully deleted from cache file\n",addr);
}
@@ -736,10 +869,20 @@
}
/* open the database (read-write) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDWR, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
@@ -754,7 +897,11 @@
/* search the cache */
q.data = &addr;
q.size = strlen(addr);
+#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
{
fprintf(stderr,"Error: %s already exists in cache!\n",addr);
exit(1);
@@ -763,7 +910,11 @@
{
if (i!=DB_NOTFOUND)
{
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s\n",strerror(i));
+#else
fprintf(stderr,"Error: %s\n",db_strerror(i));
+#endif
exit(1);
}
else
@@ -777,7 +928,11 @@
/* put it in the database */
if (db_put(addr, name, (strcmp(name,addr))?0:1, runtime)==0)
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+#else
dns_db->close(dns_db,0);
+#endif
if (verbose)
printf("%s sucessfully added to cache file\n",addr);
}
@@ -793,14 +948,28 @@
int i;
/* create the database */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDWR|O_CREAT, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db,NULL,in_file,NULL,
DB_HASH,DB_CREATE|DB_EXCL,0644)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+#else
dns_db->close(dns_db,0);
+#endif
if (verbose) printf("Cache file %s created successfully\n",in_file);
}
@@ -817,11 +986,23 @@
char buffer[4096];
/* open the database (read-write) */
+#ifdef USE_DB185
+ flag=O_RDWR;
+ if (create) flag|=O_CREAT;
+ dns_db = dbopen(in_file, flag, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if (create) flag=DB_CREATE|DB_EXCL;
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, flag, 0644)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
@@ -859,7 +1040,11 @@
}
}
else fprintf(stderr,"Error: File not found: %s\n",out_file);
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+#else
dns_db->close(dns_db,0);
+#endif
if (verbose) printf("%llu records imported into '%s' from file '%s'\n",
t_rec, in_file, out_file);
@@ -885,19 +1070,31 @@
}
/* open the database (read-only) */
+#ifdef USE_DB185
+ dns_db = dbopen(in_file, O_RDONLY, 0664, DB_HASH, NULL);
+ i = errno;
+ if (!dns_db)
+#else
if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+#endif
{
/* Error opening the cache file.. tell user and exit */
+#ifdef USE_DB185
+ fprintf(stderr,"Error: %s: %s\n",in_file,strerror(i));
+#else
fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+#endif
exit(1);
}
+#ifndef USE_DB185
/* Create a cursor */
if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
{
fprintf(stderr,"Error: Unable to create cursor!\n");
exit(1);
}
+#endif
/* stat output file */
if ( !(lstat(out_file, &out_stat)) )
@@ -923,7 +1120,12 @@
memset(&dns_rec, 0, sizeof(struct dnsRec));
/* Loop through database */
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_FIRST);
+ while (!cursorp)
+#else
while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+#endif
{
/* got a record */
t_rec++;
@@ -941,8 +1143,15 @@
/* done, clear for next rec */
memset(&q, 0, sizeof(DBT));
memset(&r, 0, sizeof(DBT));
- }
+#ifdef USE_DB185
+ cursorp = dns_db->seq(dns_db, &q, &r, R_NEXT);
+#endif
+ }
+#ifdef USE_DB185
+ dns_db->close(dns_db);
+#else
dns_db->close(dns_db,0);
+#endif
fclose(out_fp);
if (verbose) printf("%llu records exported from '%s' to file '%s'\n",
@@ -989,8 +1198,13 @@
v.size = recSize;
v.data = recPtr;
+#ifdef USE_DB185
+ if ( (dns_db->put)(dns_db, &k, &v, 0) < 0)
+ fprintf(stderr,"Error: db_put fail: %s!\n",strerror(errno));
+#else
if ( (i=dns_db->put(dns_db, NULL, &k, &v, 0)) != 0 )
fprintf(stderr,"Error: db_put fail: %s!\n",db_strerror(i));
+#endif
free(recPtr);
}
else return 1;