62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
/* $FreeBSD$ */
|
|
|
|
/*
|
|
* Copyright (C) 2012 by Darren Reed.
|
|
*
|
|
* See the IPFILTER.LICENCE file for details on licencing.
|
|
*/
|
|
|
|
#include "ipf.h"
|
|
|
|
|
|
ip_pool_t *
|
|
printpool(ip_pool_t *pp, copyfunc_t copyfunc, char *name, int opts,
|
|
wordtab_t *fields)
|
|
{
|
|
ip_pool_node_t *ipnp, *ipnpn, ipn, **pnext;
|
|
ip_pool_t ipp;
|
|
|
|
if ((*copyfunc)(pp, &ipp, sizeof(ipp)))
|
|
return (NULL);
|
|
|
|
if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN))
|
|
return (ipp.ipo_next);
|
|
|
|
printpooldata(&ipp, opts);
|
|
|
|
if ((ipp.ipo_flags & IPOOL_DELETE) != 0)
|
|
PRINTF("# ");
|
|
if ((opts & OPT_DEBUG) == 0)
|
|
PRINTF("\t{");
|
|
|
|
ipnpn = ipp.ipo_list;
|
|
ipp.ipo_list = NULL;
|
|
pnext = &ipp.ipo_list;
|
|
while (ipnpn != NULL) {
|
|
ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp));
|
|
(*copyfunc)(ipnpn, ipnp, sizeof(ipn));
|
|
ipnpn = ipnp->ipn_next;
|
|
*pnext = ipnp;
|
|
pnext = &ipnp->ipn_next;
|
|
ipnp->ipn_next = NULL;
|
|
}
|
|
|
|
if (ipp.ipo_list == NULL) {
|
|
putchar(';');
|
|
} else {
|
|
for (ipnp = ipp.ipo_list; ipnp != NULL; ipnp = ipnpn) {
|
|
ipnpn = printpoolnode(ipnp, opts, fields);
|
|
free(ipnp);
|
|
|
|
if ((opts & OPT_DEBUG) == 0) {
|
|
putchar(';');
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((opts & OPT_DEBUG) == 0)
|
|
PRINTF(" };\n");
|
|
|
|
return (ipp.ipo_next);
|
|
}
|