X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/6a7dce9165a4a707382e49877334353618fcad9a..9eef0c14b1b57daf12c8724df26f665087c1b01a:/keyutil.c diff --git a/keyutil.c b/keyutil.c index bae57cf..79cf2c2 100644 --- a/keyutil.c +++ b/keyutil.c @@ -235,8 +235,12 @@ static int copyparam(keyopts *k, const char **pp) { key_filter kf; key_attriter i; + key_data *kd; const char *n, *v; + kf.f = KCAT_SHARE; + kf.m = KF_CATMASK; + /* --- Quick check if no parameters supplied --- */ if (!k->p) @@ -248,16 +252,17 @@ static int copyparam(keyopts *k, const char **pp) key_data *kd = key_structfind(k->p->k, *pp); if (!kd) die(EXIT_FAILURE, "bad parameter key: parameter `%s' not found", *pp); - if ((kd->e & KF_CATMASK) != KCAT_SHARE) + if (!KEY_MATCH(kd, &kf)) die(EXIT_FAILURE, "bad parameter key: subkey `%s' is not shared", *pp); pp++; } /* --- Copy over the parameters --- */ - kf.f = KCAT_SHARE; - kf.m = KF_CATMASK; - key_setkeydata(k->kf, k->k, k->p->k); + kd = key_copydata(k->p->k, &kf); + assert(kd); + key_setkeydata(k->kf, k->k, kd); + key_drop(kd); /* --- Copy over attributes --- */