diff --git a/include/haproxy/action.h b/include/haproxy/action.h index 73d672e47..dba1408b9 100644 --- a/include/haproxy/action.h +++ b/include/haproxy/action.h @@ -39,6 +39,8 @@ void free_act_rule(struct act_rule *rule); static inline struct action_kw *action_lookup(struct list *keywords, const char *kw) { struct action_kw_list *kw_list; + struct action_kw *best = NULL; + int len, bestlen = 0; int i; if (LIST_ISEMPTY(keywords)) @@ -47,13 +49,18 @@ static inline struct action_kw *action_lookup(struct list *keywords, const char list_for_each_entry(kw_list, keywords, list) { for (i = 0; kw_list->kw[i].kw != NULL; i++) { if ((kw_list->kw[i].flags & KWF_MATCH_PREFIX) && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; + (len = strlen(kw_list->kw[i].kw)) > bestlen && + strncmp(kw, kw_list->kw[i].kw, len) == 0) { + if (len > bestlen) { + bestlen = len; + best = &kw_list->kw[i]; + } + } if (strcmp(kw, kw_list->kw[i].kw) == 0) return &kw_list->kw[i]; } } - return NULL; + return best; } static inline void action_build_list(struct list *keywords,