diff options
| -rw-r--r-- | src/ipcpd/local/main.c | 9 | ||||
| -rw-r--r-- | src/ipcpd/shim-data.c | 17 | ||||
| -rw-r--r-- | src/ipcpd/shim-data.h | 2 | ||||
| -rw-r--r-- | src/ipcpd/shim-eth-llc/main.c | 11 | ||||
| -rw-r--r-- | src/ipcpd/shim-udp/main.c | 12 | 
5 files changed, 20 insertions, 31 deletions
| diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index aab82d25..fb4e312b 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -150,16 +150,9 @@ static int ipcp_local_bootstrap(const struct ipcp_config * conf)  static int ipcp_local_reg(const uint8_t * hash)  { -        uint8_t * hash_dup = ipcp_hash_dup(hash); -        if (hash_dup == NULL) { -                log_err("Failed to duplicate hash."); -                return -ENOMEM; -        } - -        if (shim_data_reg_add_entry(local_data.shim_data, hash_dup)) { +        if (shim_data_reg_add_entry(local_data.shim_data, hash)) {                  log_dbg("Failed to add " HASH_FMT " to local registry.",                          HASH_VAL(hash)); -                free(hash_dup);                  return -1;          } diff --git a/src/ipcpd/shim-data.c b/src/ipcpd/shim-data.c index 355cec68..2d6585b5 100644 --- a/src/ipcpd/shim-data.c +++ b/src/ipcpd/shim-data.c @@ -24,6 +24,10 @@  #include "config.h" +#define OUROBOROS_PREFIX "shim-data" + +#include <ouroboros/endian.h> +#include <ouroboros/logs.h>  #include <ouroboros/list.h>  #include <ouroboros/time_utils.h>  #include <ouroboros/errno.h> @@ -260,9 +264,10 @@ static struct dir_entry * find_dir_entry_any(struct shim_data * data,  }  int shim_data_reg_add_entry(struct shim_data * data, -                            uint8_t *          hash) +                            const uint8_t *    hash)  {          struct reg_entry * entry; +        uint8_t *          hash_dup;          assert(data);          assert(hash); @@ -271,10 +276,18 @@ int shim_data_reg_add_entry(struct shim_data * data,          if (find_reg_entry_by_hash(data, hash)) {                  pthread_rwlock_unlock(&data->reg_lock); +                log_dbg(HASH_FMT " was already in the directory.", +                        HASH_VAL(hash)); +                return 0; +        } + +        hash_dup = ipcp_hash_dup(hash); +        if (hash_dup == NULL) { +                pthread_rwlock_unlock(&data->reg_lock);                  return -1;          } -        entry = reg_entry_create(hash); +        entry = reg_entry_create(hash_dup);          if (entry == NULL) {                  pthread_rwlock_unlock(&data->reg_lock);                  return -1; diff --git a/src/ipcpd/shim-data.h b/src/ipcpd/shim-data.h index 6380eea7..cd3ff16e 100644 --- a/src/ipcpd/shim-data.h +++ b/src/ipcpd/shim-data.h @@ -63,7 +63,7 @@ struct shim_data * shim_data_create(void);  void               shim_data_destroy(struct shim_data * data);  int                shim_data_reg_add_entry(struct shim_data * data, -                                           uint8_t *          hash); +                                           const uint8_t *    hash);  int                shim_data_reg_del_entry(struct shim_data * data,                                             const uint8_t *    hash); diff --git a/src/ipcpd/shim-eth-llc/main.c b/src/ipcpd/shim-eth-llc/main.c index 292ecbe7..be29c585 100644 --- a/src/ipcpd/shim-eth-llc/main.c +++ b/src/ipcpd/shim-eth-llc/main.c @@ -993,18 +993,9 @@ static int eth_llc_ipcp_bootstrap(const struct ipcp_config * conf)  static int eth_llc_ipcp_reg(const uint8_t * hash)  { -        uint8_t * hash_dup; - -        hash_dup = ipcp_hash_dup(hash); -        if (hash_dup == NULL) { -                log_err("Failed to duplicate hash."); -                return -ENOMEM; -        } - -        if (shim_data_reg_add_entry(eth_llc_data.shim_data, hash_dup)) { +        if (shim_data_reg_add_entry(eth_llc_data.shim_data, hash)) {                  log_err("Failed to add " HASH_FMT " to local registry.",                          HASH_VAL(hash)); -                free(hash_dup);                  return -1;          } diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index a94472b2..a64c39c4 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -765,22 +765,14 @@ static int ipcp_udp_reg(const uint8_t * hash)          uint32_t ip_addr;  #endif          char hashstr[ipcp_dir_hash_strlen() + 1]; -        uint8_t * hash_dup;          assert(hash);          ipcp_hash_str(hashstr, hash); -        hash_dup = ipcp_hash_dup(hash); -        if (hash_dup == NULL) { -                log_err("Failed to duplicate hash."); -                return -ENOMEM; -        } - -        if (shim_data_reg_add_entry(udp_data.shim_data, hash_dup)) { +        if (shim_data_reg_add_entry(udp_data.shim_data, hash)) {                  log_err("Failed to add " HASH_FMT " to local registry.",                          HASH_VAL(hash)); -                free(hash_dup);                  return -1;          } @@ -806,7 +798,7 @@ static int ipcp_udp_reg(const uint8_t * hash)                          dnsstr, hashstr, DNS_TTL, ipstr);                  if (ddns_send(cmd)) { -                        shim_data_reg_del_entry(udp_data.shim_data, hash_dup); +                        shim_data_reg_del_entry(udp_data.shim_data, hash);                          return -1;                  }          } | 
