From b1eba5880803f8981d80ff452a2121407360e3d4 Mon Sep 17 00:00:00 2001
From: dimitri staessens <dimitri.staessens@intec.ugent.be>
Date: Tue, 23 Aug 2016 15:57:01 +0200
Subject: irmd: Fix wrong lookup

ap_table had no function to look for entries by apn.
---
 src/irmd/apn_table.c | 17 +++++++++++++++++
 src/irmd/apn_table.h |  3 +++
 src/irmd/main.c      |  3 ++-
 3 files changed, 22 insertions(+), 1 deletion(-)

(limited to 'src/irmd')

diff --git a/src/irmd/apn_table.c b/src/irmd/apn_table.c
index 31c45a78..a7cf0fd3 100644
--- a/src/irmd/apn_table.c
+++ b/src/irmd/apn_table.c
@@ -162,3 +162,20 @@ struct apn_entry * apn_table_get(struct list_head * apn_table, char * ap)
 
         return NULL;
 }
+
+struct apn_entry * apn_table_get_by_apn(struct list_head * apn_table,
+                                        char *             apn)
+{
+        struct list_head * p;
+
+        if (apn_table == NULL || apn == NULL)
+                return NULL;
+
+        list_for_each(p, apn_table) {
+                struct apn_entry * e = list_entry(p, struct apn_entry, next);
+                if (!strcmp(e->apn, apn))
+                        return e;
+        }
+
+        return NULL;
+}
diff --git a/src/irmd/apn_table.h b/src/irmd/apn_table.h
index 88a2548a..fd0fb1de 100644
--- a/src/irmd/apn_table.h
+++ b/src/irmd/apn_table.h
@@ -59,4 +59,7 @@ void               apn_table_del(struct list_head * apn_table,
 struct apn_entry * apn_table_get(struct list_head * apn_table,
                                  char *             ap);
 
+struct apn_entry * apn_table_get_by_apn(struct list_head * apn_table,
+                                        char *             apn);
+
 #endif /* OUROBOROS_IRMD_APN_TABLE_H */
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 5366b535..8ac645df 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -1364,7 +1364,8 @@ static struct irm_flow * flow_req_arr(pid_t  api,
                 pthread_mutex_lock(&re->state_lock);
 
                 re->state = REG_NAME_AUTO_EXEC;
-                a = apn_table_get(&irmd->apn_table, reg_entry_get_apn(re));
+                a = apn_table_get_by_apn(&irmd->apn_table,
+                                         reg_entry_get_apn(re));
                 pthread_mutex_unlock(&re->state_lock);
                 if (a == NULL || (c_api->pid = auto_execute(a->argv)) < 0) {
                         pthread_mutex_lock(&re->state_lock);
-- 
cgit v1.2.3