#ifdef SWILL #include "totd.h" static char stats_start[] = "\n\n"; static char stats_end[] = "\n"; void print_stats(FILE *f) { char astr[MAX_DNAME]; G_List *gl; int i; fprintf(f,"%s\n",stats_start); fprintf(f,"

Totd DNS-proxy Status

\n

\n"); fprintf(f,"

\n

Forwarders:

\n"); fprintf (f, "\n"); fprintf(f,"

\n

Configured Prefixes:

\n"); fprintf (f, "\n"); fprintf(f,"%s\n",stats_end); return; } void add_prefix(FILE *f) { const int cmpsiz = sizeof(struct in6_addr) - sizeof(struct in_addr); char prefix[TOTPREFIXLEN + 1]; char *pref; int i; fprintf(f,"\n\n"); if (!swill_getargs("s(prefix)",&pref)) { fprintf(f, "

No prefix

\n"); fprintf(f,"\n"); return; } if (inet_pton (AF_INET6, pref, (void *)&prefix) != 1) { syslog (LOG_DEBUG, "Not a valid prefix: %s", pref); fprintf(f, "

No valid prefix

\n"); fprintf(f,"\n"); return; } for (i = 0; i < T.prefixnum; i++) { if (!memcmp(prefix, &T.prefix[i], cmpsiz)) { syslog (LOG_DEBUG, "Duplicate prefix: %s", pref); fprintf(f, "

Duplicate prefix, not added

\n"); fprintf(f,"\n"); return; } } if (conv_trick_conf(pref)) { fprintf(f, "

Can not add prefix: %s

\n", pref); syslog (LOG_INFO, "can not add prefix %d: %s", T.prefixnum, pref); } else { fprintf(f, "

Added prefix %d: %s

\n", T.prefixnum, pref); syslog (LOG_INFO, "prefix %d added: %s", T.prefixnum, pref); } fprintf(f,"\n"); return; } void del_prefix(FILE *f) { const int cmpsiz = sizeof(struct in6_addr) - sizeof(struct in_addr); char prefix[TOTPREFIXLEN + 1]; char *pref; int i; fprintf(f,"\n\n"); if (!swill_getargs("s(prefix)",&pref)) { fprintf(f, "

No prefix

\n"); fprintf(f,"\n"); return; } if (inet_pton (AF_INET6, pref, (void *)&prefix) != 1) { syslog (LOG_DEBUG, "Not a valid prefix: %s", pref); fprintf(f, "

No valid prefix

\n"); fprintf(f,"\n"); return; } for (i = 0; i < T.prefixnum; i++) { if (!memcmp(prefix, &T.prefix[i], cmpsiz)) { int j; for (j=i+1; j < MAXPREFIXES; j++) { memcpy(&T.prefix[j-1], &T.prefix[j], TOTPREFIXLEN); } fprintf(f, "

Deleted prefix %d: %s

\n", T.prefixnum, pref); syslog (LOG_INFO, "prefix %d deleted: %s", T.prefixnum, pref); } } if (i == T.prefixnum) { fprintf(f, "

No such prefix: %s

\n", pref); syslog (LOG_INFO, "No such prefix to delete: %s", pref); } else T.prefixnum--; fprintf(f,"\n"); return; } #endif