diff --git a/libiptc.c b/libiptc.c index 76b3c29..6f7a9d1 100644 --- a/libiptc.c +++ b/libiptc.c @@ -1,6 +1,5 @@ #include "libiptc.h" - int x_get_rule(const char *chain, struct xtc_handle *handle, char *ipv4) { int r=1; @@ -83,7 +82,7 @@ struct ipt_entry_match *get_match(const char *sports, const char *dports, unsign size = IPT_ALIGN(sizeof(*match)) + IPT_ALIGN(sizeof(*udpinfo)); match = (struct ipt_entry_match *)calloc(1, size); match->u.match_size = size; - memmove(match->u.user.name, protocol, IPT_FUNCTION_MAXNAMELEN); + strncpy(match->u.user.name, protocol, IPT_FUNCTION_MAXNAMELEN-2); udpinfo = (struct ipt_udp *)match->data; udpinfo->spts[1] = udpinfo->dpts[1] = 0xFFFF; @@ -103,8 +102,8 @@ struct ipt_entry_match *get_match(const char *sports, const char *dports, unsign int iptc_add_rule(const char *table, const char *chain, int protocol, const char *iniface, const char *outiface, unsigned int src, unsigned int dest, const char *srcports, const char *destports, const char *target, const char *dnat_to, const int append) { - struct xtc_handle *handle = NULL; - struct ipt_entry *chain_entry = NULL; + struct xtc_handle *handle; + struct ipt_entry *chain_entry; struct ipt_entry_match *entry_match = NULL; struct ipt_entry_target *entry_target = NULL; ipt_chainlabel labelit; @@ -123,9 +122,9 @@ int iptc_add_rule(const char *table, const char *chain, int protocol, const char } if (iniface) - memmove(chain_entry->ip.iniface, iniface, IFNAMSIZ); + strncpy(chain_entry->ip.iniface, iniface, IFNAMSIZ); if (outiface) - memmove(chain_entry->ip.outiface, outiface, IFNAMSIZ); + strncpy(chain_entry->ip.outiface, outiface, IFNAMSIZ); chain_entry->ip.proto = protocol; if (IPPROTO_UDP == protocol) @@ -138,7 +137,7 @@ int iptc_add_rule(const char *table, const char *chain, int protocol, const char size = IPT_ALIGN(sizeof(struct ipt_entry_target)) + IPT_ALIGN(sizeof(int)); entry_target = (struct ipt_entry_target *)calloc(1, size); entry_target->u.user.target_size = size; - memmove(entry_target->u.user.name, target, IPT_FUNCTION_MAXNAMELEN); + strncpy(entry_target->u.user.name, target, IPT_FUNCTION_MAXNAMELEN); } if (entry_match) { match_size = entry_match->u.match_size; @@ -168,7 +167,7 @@ int iptc_add_rule(const char *table, const char *chain, int protocol, const char return 1; } - memmove(labelit, chain, sizeof(ipt_chainlabel)); + strncpy(labelit, chain, sizeof(ipt_chainlabel)); //printf("Chain name:%s\n", chain); result = iptc_is_chain(chain, handle); if (!result) { @@ -208,4 +207,4 @@ int iptc_add_rule(const char *table, const char *chain, int protocol, const char free(chain_entry); return 0; -} \ No newline at end of file +}