/* --- Expiry dates get passed to @get_date@ for parsing --- */
case 'e':
- if (strncmp(optarg, "forever", strlen(optarg)) == 0)
+ if (strcmp(optarg, "forever") == 0)
exp = KEXP_FOREVER;
else {
exp = get_date(optarg, 0);
return (0);
}
+/* --- @cmd_getattr@ --- */
+
+static int cmd_getattr(int argc, char *argv[])
+{
+ key_file f;
+ key *k;
+ dstr d = DSTR_INIT;
+ const char *p;
+
+ if (argc != 3)
+ die(EXIT_FAILURE, "Usage: getattr TAG ATTR");
+ doopen(&f, KOPEN_READ);
+ if ((k = key_bytag(&f, argv[1])) == 0)
+ die(EXIT_FAILURE, "key `%s' not found", argv[1]);
+ key_fulltag(k, &d);
+ if ((p = key_getattr(&f, k, argv[2])) == 0)
+ die(EXIT_FAILURE, "no attribute `%s' for key `%s'", argv[2], d.buf);
+ puts(p);
+ dstr_destroy(&d);
+ doclose(&f);
+ return (0);
+}
+
/* --- @cmd_finger@ --- */
static void fingerprint(key *k, const gchash *ch, const key_filter *kf)
fpr = GH_DONE(h, 0);
if (memcmp(fpr, buf, ch->hashsz) != 0)
die(EXIT_FAILURE, "key fingerprint mismatch");
+ doclose(&f);
return (0);
}
{ "expire", cmd_expire, "expire TAG..." },
{ "delete", cmd_delete, "delete TAG..." },
{ "setattr", cmd_setattr, "setattr TAG ATTR..." },
+ { "getattr", cmd_getattr, "getattr TAG ATTR" },
{ "comment", cmd_comment, "comment TAG [COMMENT]" },
{ "lock", cmd_lock, "lock QTAG" },
{ "unlock", cmd_unlock, "unlock QTAG" },