DCPluginSyncFilterResult dcplugin_sync_pre_filter(DCPlugin *dcplugin, DCPluginDNSPacket *dcp_packet) { uint8_t *new_packet; ldns_rdf *edns_data; ldns_pkt *packet; size_t new_packet_size; ldns_wire2pkt(&packet, dcplugin_get_wire_data(dcp_packet), dcplugin_get_wire_data_len(dcp_packet)); edns_data = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_HEX, dcplugin_get_user_data(dcplugin)); ldns_pkt_set_edns_data(packet, edns_data); ldns_pkt2wire(&new_packet, packet, &new_packet_size); if (dcplugin_get_wire_data_max_len(dcp_packet) >= new_packet_size) { dcplugin_set_wire_data(dcp_packet, new_packet, new_packet_size); } free(new_packet); ldns_pkt_free(packet); return DCP_SYNC_FILTER_RESULT_OK; }
DCPluginSyncFilterResult dcplugin_sync_post_filter(DCPlugin *dcplugin, DCPluginDNSPacket *dcp_packet) { Blocking *blocking = dcplugin_get_user_data(dcplugin); ldns_pkt *packet = NULL; DCPluginSyncFilterResult result = DCP_SYNC_FILTER_RESULT_OK; if (blocking->domains == NULL && blocking->ips == NULL) { return DCP_SYNC_FILTER_RESULT_OK; } if (ldns_wire2pkt(&packet, dcplugin_get_wire_data(dcp_packet), dcplugin_get_wire_data_len(dcp_packet)) != LDNS_STATUS_OK) { return DCP_SYNC_FILTER_RESULT_ERROR; } if (blocking->domains != NULL && (result = apply_block_domains(dcp_packet, blocking, packet) != DCP_SYNC_FILTER_RESULT_OK)) { ldns_pkt_free(packet); return result; } if (blocking->ips != NULL && (result = apply_block_ips(dcp_packet, blocking, packet) != DCP_SYNC_FILTER_RESULT_OK)) { ldns_pkt_free(packet); return result; } ldns_pkt_free(packet); return DCP_SYNC_FILTER_RESULT_OK; }
int dcplugin_destroy(DCPlugin *dcplugin) { free(dcplugin_get_user_data(dcplugin)); return 0; }
int dcplugin_destroy(DCPlugin * const dcplugin) { FILE * const fp = dcplugin_get_user_data(dcplugin); if (fp != stdout) { fclose(fp); } return 0; }
DCPluginSyncFilterResult dcplugin_sync_pre_filter(DCPlugin *dcplugin, DCPluginDNSPacket *dcp_packet) { FILE *fp = dcplugin_get_user_data(dcplugin); const unsigned char *wire_data = dcplugin_get_wire_data(dcp_packet); size_t wire_data_len = dcplugin_get_wire_data_len(dcp_packet); size_t i = (size_t) 12U; size_t csize = (size_t) 0U; unsigned short type; unsigned char c; _Bool first = 1; if (wire_data_len < 15U || wire_data[4] != 0U || wire_data[5] != 1U) { return DCP_SYNC_FILTER_RESULT_ERROR; } if (wire_data[i] == 0U) { putc_unlocked('.', fp); } while (i < wire_data_len && (csize = wire_data[i]) != 0U && csize < wire_data_len - i) { i++; if (first != 0) { first = 0; } else { putc_unlocked('.', fp); } string_fprint(fp, &wire_data[i], csize); i += csize; } type = 0U; if (i < wire_data_len - 2U) { type = (wire_data[i + 1U] << 8) + wire_data[i + 2U]; } if (type == 0x01) { fputs("\t[A]\n", fp); } else if (type == 0x02) { fputs("\t[NS]\n", fp); } else if (type == 0x0f) { fputs("\t[MX]\n", fp); } else if (type == 0x1c) { fputs("\t[AAAA]\n", fp); } else { fprintf(fp, "\t[0x%02hX]\n", type); } fflush(fp); return DCP_SYNC_FILTER_RESULT_OK; }
int dcplugin_destroy(DCPlugin * const dcplugin) { Blocking *blocking = dcplugin_get_user_data(dcplugin); if (blocking == NULL) { return 0; } str_list_free(blocking->domains); blocking->domains = NULL; str_list_free(blocking->ips); blocking->ips = NULL; free(blocking); return 0; }
int dcplugin_destroy(DCPlugin * const dcplugin) { Context *context = dcplugin_get_user_data(dcplugin); if (context == NULL) { return 0; } str_list_free(context->blacklist); context->blacklist = NULL; GeoIP_delete(context->geoip); context->geoip = NULL; free(context); return 0; }
DCPluginSyncFilterResult dcplugin_sync_post_filter(DCPlugin *dcplugin, DCPluginDNSPacket *dcp_packet) { Context *context = dcplugin_get_user_data(dcplugin); ldns_pkt *packet; DCPluginSyncFilterResult result = DCP_SYNC_FILTER_RESULT_OK; if (context->blacklist == NULL) { return DCP_SYNC_FILTER_RESULT_OK; } if (ldns_wire2pkt(&packet, dcplugin_get_wire_data(dcp_packet), dcplugin_get_wire_data_len(dcp_packet)) != LDNS_STATUS_OK) { return DCP_SYNC_FILTER_RESULT_ERROR; } if ((result = apply_block_ips(dcp_packet, context, packet) != DCP_SYNC_FILTER_RESULT_OK)) { ldns_pkt_free(packet); return result; } ldns_pkt_free(packet); return DCP_SYNC_FILTER_RESULT_OK; }
int dcplugin_destroy(DCPlugin * const dcplugin) { Blocking *blocking = dcplugin_get_user_data(dcplugin); if (blocking == NULL) { return 0; } fpst_free(blocking->domains, free_list); blocking->domains = NULL; fpst_free(blocking->domains_rev, free_list); blocking->domains_rev = NULL; fpst_free(blocking->domains_substr, free_list); blocking->domains_substr = NULL; fpst_free(blocking->ips, free_list); blocking->ips = NULL; if (blocking->fp != NULL) { fclose(blocking->fp); blocking->fp = NULL; } free(blocking); return 0; }