--- src/link.h.orig 2013-06-11 16:00:00.000000000 +0700 +++ src/link.h 2015-01-28 06:45:05.000000000 +0700 @@ -197,6 +197,7 @@ const char *arg, ...); extern const char *LinkMatchAction(Link l, int stage, char *login); + extern int LinkMatchBundle(Link l, char *name); #endif --- src/link.c.orig 2015-01-28 06:57:14.000000000 +0700 +++ src/link.c 2015-01-28 06:56:16.000000000 +0700 @@ -1233,6 +1233,20 @@ LinkMatchAction(Link l, int stage, char return (NULL); } +int +LinkMatchBundle(Link l, char *name) { + struct linkaction *a; + + a = SLIST_FIRST(&l->actions); + if (!a) + return 1; + SLIST_FOREACH(a, &l->actions, next) { + if (!strcmp(a->arg, name)) + return 1; + } + return 0; +} + /* * LinkStat() */ --- src/bund.c.orig 2013-06-11 16:00:00.000000000 +0700 +++ src/bund.c 2015-01-28 06:55:39.000000000 +0700 @@ -216,7 +216,8 @@ BundJoin(Link l) for (k = 0; k < gNumBundles; k++) { if (gBundles[k] && !gBundles[k]->tmpl && gBundles[k]->peer_mrru && MpDiscrimEqual(&lcp->peer_discrim, &gBundles[k]->peer_discrim) && - !strcmp(lcp->auth.params.authname, gBundles[k]->params.authname)) { + !strcmp(lcp->auth.params.authname, gBundles[k]->params.authname) && + LinkMatchBundle(l, gBundles[k]->name)) { break; } }