diff options
| author | Donatas Abraitis <donatas.abraitis@gmail.com> | 2020-12-10 11:01:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-10 11:01:25 +0200 |
| commit | 82b773e63ba79a422ef8fc95b3096c3cbede7b41 (patch) | |
| tree | 46c4b9660b16f37de11906384d17a39187377863 /zebra/zebra_routemap.c | |
| parent | ae86e45fafd0f942e266bd5bbeedc0bf48b629af (diff) | |
| parent | fd303a4ba14c762550db972317e1e88528768005 (diff) | |
Merge pull request #7524 from donaldsharp/zebra_route_map_tighten
zebra: deny when route map is specified but does not exist yet
Diffstat (limited to 'zebra/zebra_routemap.c')
| -rw-r--r-- | zebra/zebra_routemap.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c index 7b0a1e3d9c..0ce724f608 100644 --- a/zebra/zebra_routemap.c +++ b/zebra/zebra_routemap.c @@ -1682,6 +1682,7 @@ zebra_route_map_check(int family, int rib_type, uint8_t instance, struct zebra_vrf *zvrf, route_tag_t tag) { struct route_map *rmap = NULL; + char *rm_name; route_map_result_t ret = RMAP_PERMITMATCH; struct nh_rmap_obj nh_obj; @@ -1692,10 +1693,20 @@ zebra_route_map_check(int family, int rib_type, uint8_t instance, nh_obj.metric = 0; nh_obj.tag = tag; - if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX) + if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX) { + rm_name = PROTO_RM_NAME(zvrf, family, rib_type); rmap = PROTO_RM_MAP(zvrf, family, rib_type); - if (!rmap && PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_MAX)) + + if (rm_name && !rmap) + return RMAP_DENYMATCH; + } + if (!rmap) { + rm_name = PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_MAX); rmap = PROTO_RM_MAP(zvrf, family, ZEBRA_ROUTE_MAX); + + if (rm_name && !rmap) + return RMAP_DENYMATCH; + } if (rmap) { ret = route_map_apply(rmap, p, &nh_obj); } |
