IPTables-IPv4-DBTarpit
view release on metacpan or search on metacpan
*/
int
mydb_dump(int secondary)
{
DB * dbp;
dbtU key, data;
int status;
u_int32_t cursor = 1;
struct in_addr inadr;
if (secondary) {
dbp = dbtp.dbaddr[DBarchive];
}
else
dbp = dbtp.dbaddr[DBtarpit];
memset(&key.dbt, 0, sizeof(key.dbt));
memset(&data.dbt, 0, sizeof(data.dbt));
key.dbt.data = &cursor;
key.dbt.size = sizeof(cursor);
while((status = dbp->get(dbp, NULL, &key.dbt, &data.dbt, DB_SET_RECNO)) == 0) {
inadr.s_addr = (in_addr_t)(*key.naddr);
printf("%16s => %10ld\n", inet_ntoa(inadr), (long int)*data.val);
key.dbt.data = &cursor;
key.dbt.size = sizeof(cursor);
cursor++;
}
if (status == DB_NOTFOUND)
status = 0;
return status;
}
void
my_helpinit(DBTPD * dbtp, int ai, char * addr)
{
dbtp->dbfile[ai] = addr;
}
MODULE = IPTables::IPv4::DBTarpit::CTest PACKAGE = IPTables::IPv4::DBTarpit::CTest
PROTOTYPES: DISABLE
int
t_pidrun()
CODE:
RETVAL = (int)pidrun;
OUTPUT:
RETVAL
void
t_savpid(path)
char * path
CODE:
savpid(path);
void
t_chk4pid(path)
char * path
PREINIT:
SV * out;
PPCODE:
path = chk4pid(path);
if (path == NULL) {
ST(0) = &PL_sv_undef;
}
else {
out = sv_newmortal();
out = newSVpv(path,0);
ST(0) = out;
XSRETURN(1);
}
void
t_pidpath()
PREINIT:
SV * out;
PPCODE:
out = sv_newmortal();
out = newSVpv(pidpath(),0);
ST(0) = out;
XSRETURN(1);
int
t_main(...)
PREINIT:
STRLEN len;
unsigned char * ptr[20];
int i;
extern int opterr;
CODE:
if (items > 20) {
i = 0;
} else {
for (i=0; i < items; i++)
{
ptr[i] = (unsigned char *)(SvPV(ST(i), len));
}
opterr = 0;
realMain(items, (char **)ptr);
}
RETVAL = i;
OUTPUT:
RETVAL
void
t_setsig()
CODE:
logopen = 0; /* skip branch in Code */
oflag = 1; /* print to stdout */
set_signals();
void
t_inirand(test)
int test
PPCODE:
XPUSHs(sv_2mortal(newSVnv(sizeof(rarry) / 4)));
XPUSHs(sv_2mortal(newSVnv(initRandGen(test))));
void
t_fillrand()
PREINIT:
unsigned long * rptr;
int i;
PPCODE:
rptr = fillrandom();
for (i=0; i< sizeof(rarry) / 4;i++)
{
XPUSHs(sv_2mortal(newSVnv(rptr[i])));
}
int
t_ret_IPPTCP()
CODE:
RETVAL = IPPROTO_TCP;
OUTPUT:
RETVAL
int
t_chk_trace()
CODE:
RETVAL = trace_tarpit;
OUTPUT:
RETVAL
void
t_Lflag(ell)
int ell
CODE:
Lflag = ell;
#ifdef DBTARPIT_SUPPORTED_OS_LINUX
int
t_NF_ACCEPT()
CODE:
RETVAL = NF_ACCEPT;
OUTPUT:
RETVAL
int
t_NF_DROP()
CODE:
RETVAL = NF_DROP;
OUTPUT:
RETVAL
int
t_check(addr, ts, xf, prot, tarpitresp)
unsigned char * addr
U32 ts
int xf
int prot
int tarpitresp
PREINIT:
ipq_packet_msg_t * m = ct_check_pkt((void *)addr, ts, xf, prot, tarpitresp);
CODE:
RETVAL = check_4_tarpit(m);
OUTPUT:
RETVAL
#endif
int
t_init(home,...)
unsigned char * home
PREINIT:
STRLEN len;
CODE:
my_helpinit(&dbtp,DBtarpit,NULL);
my_helpinit(&dbtp,DBarchive,NULL);
if (items > 1)
my_helpinit(&dbtp,DBtarpit,(char *)(SvPV(ST(1), len)));
if (items > 2)
my_helpinit(&dbtp,DBarchive,(char *)(SvPV(ST(2), len)));
RETVAL = dbtp_init(&dbtp,home, -1);
OUTPUT:
RETVAL
int
t_dump(which)
int which
CODE:
RETVAL = mydb_dump(which);
OUTPUT:
RETVAL
void
t_close()
CODE:
dbtp_close(&dbtp);
int
t_findaddr(addr,timestamp)
unsigned char * addr
U32 timestamp
CODE:
RETVAL = dbtp_find_addr(&dbtp,DBtarpit,(void *)addr,timestamp);
OUTPUT:
RETVAL
void
t_saveaddr(addr, timestamp)
unsigned char * addr
U32 timestamp
CODE:
if (dbtp.dbaddr[DBarchive] != NULL)
dbtp_put(&dbtp,DBarchive,(void *)addr,sizeof(void *),×tamp,sizeof(timestamp));
void
t_dberror(err)
int err
PPCODE:
XPUSHs(sv_2mortal(newSVpv(dbtp_strerror(err),0)));
XSRETURN(1);
int
t_statn(name)
char * name
CODE:
RETVAL = dbtp_statn(&dbtp,name);
OUTPUT:
RETVAL
void
t_LogPrint(home, name, message, ofg, Ofg,...)
char * home
char * name
char * message
int ofg
int Ofg
PPCODE:
if (items >5) { /* is there a file descriptor */
fifofd = SvIV(ST(6));
}
else
fifofd = 0;
oflag = ofg;
Oflag = Ofg;
dbhome = home;
fifoname = name;
LogPrint(message);
XPUSHs(sv_2mortal(newSViv(errno)));
if (GIMME_V == G_ARRAY) {
XPUSHs(sv_2mortal(newSViv(fifofd)));
XSRETURN(2);
}
XSRETURN(1);
void
t_fifo_close()
CODE:
if (fifofd > 0)
close(fifofd);
fifofd = 0;
void
t_errors()
PPCODE:
EXTEND(SP,7);
PUSHs(sv_2mortal(newSViv(EPIPE)));
PUSHs(sv_2mortal(newSViv(ENOSPC)));
PUSHs(sv_2mortal(newSViv(EEXIST)));
PUSHs(sv_2mortal(newSViv(ENOENT)));
PUSHs(sv_2mortal(newSViv(ENOTDIR)));
PUSHs(sv_2mortal(newSViv(ENXIO)));
PUSHs(sv_2mortal(newSViv(ENODEV)));
XSRETURN(7);
# if ai < notstring, get U32, else get string
SV *
t_get(ai,addr,notstring)
int ai
SV * addr
int notstring
PREINIT:
STRLEN len;
void * adp;
int rv;
SV * val;
PPCODE:
adp = (void *)SvPV(addr,len);
/* rv = dbtp_get(&dbtp,ai,adp,len); */
rv = dbtp_readOne(&dbtp,0,ai,adp,0);
if (rv == DB_NOTFOUND)
XSRETURN_UNDEF;
else if (rv)
XSRETURN_IV(0);
if (ai < notstring && dbtp.mgdbt.size == DBTP_U32size) {
val = newSViv(*(U32 *)dbtp.mgdbt.data);
sv_setuv(val,*(U32 *)dbtp.mgdbt.data);
XPUSHs(sv_2mortal(val));
}
else
XPUSHs(sv_2mortal(newSVpv(dbtp.mgdbt.data,dbtp.mgdbt.size)));
XSRETURN(1);
# not reached - silence compiler warning
RETVAL = val;
# if ai < notstring, get U32, else get string
void
t_getrecno(ai,cursor,notstring)
int ai
U32 cursor
int notstring
PREINIT:
int rv;
SV * val;
PPCODE:
# rv = dbtp_getrecno(&dbtp,ai,cursor);
rv = dbtp_readOne(&dbtp,1,ai,&cursor,0);
if (rv) {
if (GIMME == G_ARRAY)
XSRETURN_EMPTY;
else
XSRETURN_UNDEF;
}
XPUSHs(sv_2mortal(newSVpv(dbtp.keydbt.data,dbtp.keydbt.size)));
if (GIMME == G_ARRAY) {
if (ai < notstring && dbtp.mgdbt.size == DBTP_U32size) {
val = newSViv(*(U32 *)dbtp.mgdbt.data);
sv_setuv(val,*(U32 *)dbtp.mgdbt.data);
XPUSHs(sv_2mortal(val));
}
else
XPUSHs(sv_2mortal(newSVpv(dbtp.mgdbt.data,dbtp.mgdbt.size)));
XSRETURN(2);
}
XSRETURN(1);
void
t_libversion(ai)
int ai
PREINIT:
int major, minor, patch;
int zero[] = {0,0};
SV * stats;
PPCODE:
(void) dbtp_readOne(&dbtp,1,ai,(void *)&zero,0);
major = (int)*(u_char *)(dbtp.keydbt.data + 1);
minor = (int)*(u_char *)(dbtp.keydbt.data + 2);
patch = (int)*(u_char *)(dbtp.keydbt.data + 3);
stats = newSViv(*(U32 *)dbtp.mgdbt.data);
sv_setuv(stats,*(U32 *)dbtp.mgdbt.data);
XPUSHs(sv_2mortal(stats));
if (GIMME == G_ARRAY) {
XPUSHs(sv_2mortal(newSViv((I32)major)));
XPUSHs(sv_2mortal(newSViv((I32)minor)));
XPUSHs(sv_2mortal(newSViv((I32)patch)));
XSRETURN(4);
}
XSRETURN(1);
( run in 0.652 second using v1.01-cache-2.11-cpan-71847e10f99 )