X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/981bf1273304e1bc6604ea22b6ab4bd9ae07974b..6ec3a4cf4aaa7cd375e1aa18f85861986259b8e5:/key-attr.c diff --git a/key-attr.c b/key-attr.c index 75b2f1e..b6a3616 100644 --- a/key-attr.c +++ b/key-attr.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: key-attr.c,v 1.4 2004/04/08 01:02:49 mdw Exp $ + * $Id$ * * Key attribute manipulation * * (c) 1999 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,35 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: key-attr.c,v $ - * Revision 1.4 2004/04/08 01:02:49 mdw - * key-binary.c - * - * Revision 1.3 2001/06/22 19:39:43 mdw - * Allow tagging if the tag is owned by a deleted key. - * - * Revision 1.2 2000/02/12 18:21:02 mdw - * Overhaul of key management (again). - * - * Revision 1.1 1999/12/22 15:47:48 mdw - * Major key-management revision. - * - */ - /*----- Header files ------------------------------------------------------*/ #include @@ -134,8 +117,8 @@ int key_nextattr(key_attriter *i, const char **n, const char **v) key_attr *a = sym_next(&i->i); if (!a) return (0); - *n = SYM_NAME(a); - *v = a->p; + if (n) *n = SYM_NAME(a); + if (v) *v = a->p; return (1); } @@ -185,10 +168,10 @@ int key_putattr(key_file *f, key *k, const char *n, const char *v) if (v) { a = sym_find(&k->a, n, -1, sizeof(*a), &found); if (found) - free(a->p); + xfree(a->p); a->p = xstrdup(v); } else if ((a = sym_find(&k->a, n, -1, 0, 0)) != 0) { - free(a->p); + xfree(a->p); sym_remove(&k->a, a); } @@ -196,6 +179,28 @@ int key_putattr(key_file *f, key *k, const char *n, const char *v) return (0); } +/* --- @key_setkeydata@ --- * + * + * Arguments: @key_file *kf@ = pointer to key file + * @key *k@ = pointer to key + * @key_data *kd@ = new key data + * + * Returns: Zero on success, or a @KERR_@ error code on failure. + * + * Use: Sets the key data for a key. + */ + +int key_setkeydata(key_file *kf, key *k, key_data *kd) +{ + if (!(kf->f & KF_WRITE)) + return (KERR_READONLY); + key_incref(kd); + key_drop(k->k); + k->k = kd; + kf->f |= KF_MODIFIED; + return (0); +} + /* --- @key_setcomment@ --- * * * Arguments: @key_file *f@ = pointer to key file block @@ -214,7 +219,7 @@ int key_setcomment(key_file *f, key *k, const char *c) if (key_chkcomment(c)) return (KERR_BADCOMMENT); if (k->c) - free(k->c); + xfree(k->c); if (c) k->c = xstrdup(c); else @@ -268,7 +273,7 @@ int key_settag(key_file *f, key *k, const char *tag) kr = sym_find(&f->bytag, k->tag, -1, 0, 0); assert(((void)"No bytag link", kr)); sym_remove(&f->bytag, kr); - free(k->tag); + xfree(k->tag); } /* --- Done --- */