static void ebt_load_watcher(const char *name) { struct xtables_target *watcher; size_t size; watcher = xtables_find_target(name, XTF_LOAD_MUST_SUCCEED); if (!watcher) xtables_error(OTHER_PROBLEM, "Unable to load %s watcher", name); size = XT_ALIGN(sizeof(struct xt_entry_target)) + watcher->size; watcher->t = xtables_calloc(1, size); watcher->t->u.target_size = size; strncpy(watcher->t->u.user.name, name, sizeof(watcher->t->u.user.name)); watcher->t->u.user.name[sizeof(watcher->t->u.user.name)-1] = '\0'; watcher->t->u.user.revision = watcher->revision; xs_init_target(watcher); opts = merge_options(opts, watcher->extra_opts, &watcher->option_offset); if (opts == NULL) xtables_error(OTHER_PROBLEM, "Can't alloc memory"); }
/* * More glue code. */ static struct xtables_target *command_jump(struct ebtables_command_state *cs, const char *jumpto) { struct xtables_target *target; size_t size; /* XTF_TRY_LOAD (may be chain name) */ target = xtables_find_target(jumpto, XTF_TRY_LOAD); if (!target) return NULL; size = XT_ALIGN(sizeof(struct xt_entry_target)) + target->size; target->t = xtables_calloc(1, size); target->t->u.target_size = size; strncpy(target->t->u.user.name, jumpto, sizeof(target->t->u.user.name)); target->t->u.user.name[sizeof(target->t->u.user.name)-1] = '\0'; target->t->u.user.revision = target->revision; xs_init_target(target); opts = merge_options(opts, target->extra_opts, &target->option_offset); if (opts == NULL) xtables_error(OTHER_PROBLEM, "Can't alloc memory"); return target; }
static struct xtables_target *command_jump(struct arpt_entry *fw, const char *jumpto) { struct xtables_target *target; size_t size; /* XTF_TRY_LOAD (may be chain name) */ target = xtables_find_target(jumpto, XTF_TRY_LOAD); if (!target) return NULL; size = XT_ALIGN(sizeof(struct xt_entry_target)) + target->size; target->t = xtables_calloc(1, size); target->t->u.target_size = size; strncpy(target->t->u.user.name, jumpto, sizeof(target->t->u.user.name)); target->t->u.user.name[sizeof(target->t->u.user.name)-1] = '\0'; target->t->u.user.revision = target->revision; xs_init_target(target); if (target->x6_options != NULL) opts = xtables_options_xfrm(arptables_globals.orig_opts, opts, target->x6_options, &target->option_offset); else opts = xtables_merge_options(arptables_globals.orig_opts, opts, target->extra_opts, &target->option_offset); return target; }
static void command_jump(struct iptables_command_state *cs) { size_t size; set_option(&cs->options, OPT_JUMP, &cs->fw.ip.invflags, cs->invert); cs->jumpto = parse_target(optarg); /* TRY_LOAD (may be chain name) */ cs->target = xtables_find_target(cs->jumpto, XTF_TRY_LOAD); if (cs->target == NULL) return; size = XT_ALIGN(sizeof(struct xt_entry_target)) + cs->target->size; cs->target->t = xtables_calloc(1, size); cs->target->t->u.target_size = size; if (cs->target->real_name == NULL) { strcpy(cs->target->t->u.user.name, cs->jumpto); } else { /* Alias support for userspace side */ strcpy(cs->target->t->u.user.name, cs->target->real_name); if (!(cs->target->ext_flags & XTABLES_EXT_ALIAS)) fprintf(stderr, "Notice: The %s target is converted into %s target " "in rule listing and saving.\n", cs->jumpto, cs->target->real_name); } cs->target->t->u.user.revision = cs->target->revision; xs_init_target(cs->target); if (cs->target->x6_options != NULL) opts = xtables_options_xfrm(xtables_globals.orig_opts, opts, cs->target->x6_options, &cs->target->option_offset); else opts = xtables_merge_options(xtables_globals.orig_opts, opts, cs->target->extra_opts, &cs->target->option_offset); if (opts == NULL) xtables_error(OTHER_PROBLEM, "can't alloc memory!"); }