1514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher/* Shared library add-on to iptables to add comment match support. 2514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * 3514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * ChangeLog 4514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * 2003-05-13: Brad Fisher <brad@info-link.net> 5514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * Initial comment match 6514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * 2004-05-12: Brad Fisher <brad@info-link.net> 7514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher * Port to patch-o-matic-ng 8514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher */ 9514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher#include <stdio.h> 109ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI#include <xtables.h> 119ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI#include <linux/netfilter/xt_comment.h> 12514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 13cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardtenum { 14cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt O_COMMENT = 0, 15cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt}; 16cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt 17181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardtstatic void comment_help(void) 18514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher{ 19514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher printf( 208b7c64d6ba156a99008fcd810cba874c73294333Jan Engelhardt "comment match options:\n" 218b7c64d6ba156a99008fcd810cba874c73294333Jan Engelhardt "--comment COMMENT Attach a comment to a rule\n"); 22514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher} 23514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 24cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardtstatic const struct xt_option_entry comment_opts[] = { 25cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt {.name = "comment", .id = O_COMMENT, .type = XTTYPE_STRING, 26cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt .flags = XTOPT_MAND | XTOPT_PUT, 27cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt XTOPT_POINTER(struct xt_comment_info, comment)}, 28cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt XTOPT_TABLEEND, 29514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher}; 30514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 31514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisherstatic void 32181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardtcomment_print(const void *ip, const struct xt_entry_match *match, int numeric) 33514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher{ 3469f564e3890976461de0016cd81171ff8bfa8353Jan Engelhardt struct xt_comment_info *commentinfo = (void *)match->data; 35514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 369ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0'; 3773866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" /* %s */", commentinfo->comment); 38514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher} 39514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 40514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher/* Saves the union ipt_matchinfo in parsable form to stdout. */ 41514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisherstatic void 42181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardtcomment_save(const void *ip, const struct xt_entry_match *match) 43514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher{ 4469f564e3890976461de0016cd81171ff8bfa8353Jan Engelhardt struct xt_comment_info *commentinfo = (void *)match->data; 45514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 469ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0'; 4773866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" --comment"); 484a1d810bb52aa5d5c450f7adcde5145d40261b54Jan Engelhardt xtables_save_string(commentinfo->comment); 49514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher} 50514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 51181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardtstatic struct xtables_match comment_match = { 52c5e85736c207f211d82d2878a5781f512327dfceJan Engelhardt .family = NFPROTO_UNSPEC, 539ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI .name = "comment", 548b7c64d6ba156a99008fcd810cba874c73294333Jan Engelhardt .version = XTABLES_VERSION, 559ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI .size = XT_ALIGN(sizeof(struct xt_comment_info)), 569ea637d5a7ebfb04e97db4cb114117474bbda9cfYasuyuki KOZAKAI .userspacesize = XT_ALIGN(sizeof(struct xt_comment_info)), 57181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardt .help = comment_help, 58181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardt .print = comment_print, 59181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardt .save = comment_save, 60cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt .x6_parse = xtables_option_parse, 61cc2511ee64df98e45d0b42a93a9b789b9726d4b9Jan Engelhardt .x6_options = comment_opts, 62514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher}; 63514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher 64514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fishervoid _init(void) 65514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher{ 66181dead3f13befe02769ef479bcbb51801b7fc4eJan Engelhardt xtables_register_match(&comment_match); 67514b1b488eaf07d66e209681f4f34246d7db2f60Brad Fisher} 68