2002-12-23 Marcus Brinkmann <marcus@g10code.de>
* key.c (gpgme_key_get_string_attr): Don't accept GPGME_ATTR_IS_SECRET. (otrust_to_string): New function. (gpgme_key_get_as_xml): Use it. (validity_to_string): New function. (gpgme_key_get_string_attr): Beautify using above functions. (gpgme_key_get_ulong_attr): Likewise.
This commit is contained in:
parent
a0fc64745f
commit
15de808fea
@ -1,3 +1,12 @@
|
|||||||
|
2002-12-23 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* key.c (gpgme_key_get_string_attr): Don't accept GPGME_ATTR_IS_SECRET.
|
||||||
|
(otrust_to_string): New function.
|
||||||
|
(gpgme_key_get_as_xml): Use it.
|
||||||
|
(validity_to_string): New function.
|
||||||
|
(gpgme_key_get_string_attr): Beautify using above functions.
|
||||||
|
(gpgme_key_get_ulong_attr): Likewise.
|
||||||
|
|
||||||
2002-12-23 Marcus Brinkmann <marcus@g10code.de>
|
2002-12-23 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
* data-mem.c (mem_release): Fix gcc warning.
|
* data-mem.c (mem_release): Fix gcc warning.
|
||||||
|
361
gpgme/key.c
361
gpgme/key.c
@ -261,17 +261,70 @@ pkalgo_to_string (int algo)
|
|||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
return "RSA";
|
return "RSA";
|
||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
case 20:
|
case 20:
|
||||||
return "ElG";
|
return "ElG";
|
||||||
|
|
||||||
case 17:
|
case 17:
|
||||||
return "DSA";
|
return "DSA";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
otrust_to_string (int otrust)
|
||||||
|
{
|
||||||
|
switch (otrust)
|
||||||
|
{
|
||||||
|
case GPGME_VALIDITY_NEVER:
|
||||||
|
return "n";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_MARGINAL:
|
||||||
|
return "m";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_FULL:
|
||||||
|
return "f";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_ULTIMATE:
|
||||||
|
return "u";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
validity_to_string (int otrust)
|
||||||
|
{
|
||||||
|
switch (validity)
|
||||||
|
{
|
||||||
|
case GPGME_VALIDITY_UNDEFINED:
|
||||||
|
return "q";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_NEVER:
|
||||||
|
return "n";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_MARGINAL:
|
||||||
|
return "m";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_FULL:
|
||||||
|
return "f";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_ULTIMATE:
|
||||||
|
return "u";
|
||||||
|
|
||||||
|
case GPGME_VALIDITY_UNKNOWN:
|
||||||
|
default:
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static GpgmeError
|
static GpgmeError
|
||||||
key_new (GpgmeKey *r_key, int secret)
|
key_new (GpgmeKey *r_key, int secret)
|
||||||
{
|
{
|
||||||
@ -768,9 +821,7 @@ gpgme_key_get_as_xml (GpgmeKey key)
|
|||||||
add_tag_and_uint (d, "len", key->keys.key_len);
|
add_tag_and_uint (d, "len", key->keys.key_len);
|
||||||
add_tag_and_time (d, "created", key->keys.timestamp);
|
add_tag_and_time (d, "created", key->keys.timestamp);
|
||||||
add_tag_and_time (d, "expire", key->keys.expires_at);
|
add_tag_and_time (d, "expire", key->keys.expires_at);
|
||||||
add_tag_and_string (d, "otrust",
|
add_tag_and_string (d, "otrust", otrust_to_string (key->otrust));
|
||||||
gpgme_key_get_string_attr (key, GPGME_ATTR_OTRUST,
|
|
||||||
NULL, 0));
|
|
||||||
if (key->issuer_serial)
|
if (key->issuer_serial)
|
||||||
add_tag_and_string (d, "serial", key->issuer_serial);
|
add_tag_and_string (d, "serial", key->issuer_serial);
|
||||||
if (key->issuer_name)
|
if (key->issuer_name)
|
||||||
@ -851,142 +902,78 @@ const char *
|
|||||||
gpgme_key_get_string_attr (GpgmeKey key, GpgmeAttr what,
|
gpgme_key_get_string_attr (GpgmeKey key, GpgmeAttr what,
|
||||||
const void *reserved, int idx)
|
const void *reserved, int idx)
|
||||||
{
|
{
|
||||||
const char *val = NULL;
|
struct subkey_s *subkey;
|
||||||
struct subkey_s *k;
|
struct user_id_s *uid;
|
||||||
struct user_id_s *u;
|
int i;
|
||||||
|
|
||||||
if (!key)
|
if (!key || reserved || idx < 0)
|
||||||
return NULL;
|
|
||||||
if (reserved)
|
|
||||||
return NULL;
|
|
||||||
if (idx < 0)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
/* Select IDXth subkey. */
|
||||||
|
subkey = &key->keys;
|
||||||
|
for (i = 0; i < idx; i++)
|
||||||
|
{
|
||||||
|
subkey = subkey->next;
|
||||||
|
if (!subkey)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select the IDXth user ID. */
|
||||||
|
uid = key->uids;
|
||||||
|
for (i = 0; i < idx; i++)
|
||||||
|
{
|
||||||
|
uid = uid->next;
|
||||||
|
if (!uid)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case GPGME_ATTR_KEYID:
|
case GPGME_ATTR_KEYID:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->keyid : NULL;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->keyid;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_FPR:
|
case GPGME_ATTR_FPR:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->fingerprint : NULL;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->fingerprint;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_ALGO:
|
case GPGME_ATTR_ALGO:
|
||||||
for (k = &key->keys; k && idx; k=k->next, idx--)
|
return subkey ? pkalgo_to_string (subkey->key_algo) : NULL;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = pkalgo_to_string (k->key_algo);
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_TYPE:
|
case GPGME_ATTR_TYPE:
|
||||||
val = key->x509? "X.509":"PGP";
|
return key->x509 ? "X.509" : "PGP";
|
||||||
break;
|
|
||||||
case GPGME_ATTR_LEN:
|
|
||||||
case GPGME_ATTR_CREATED:
|
|
||||||
case GPGME_ATTR_EXPIRE:
|
|
||||||
/* Use another get function. */
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_OTRUST:
|
case GPGME_ATTR_OTRUST:
|
||||||
switch (key->otrust)
|
return otrust_to_string (key->otrust);
|
||||||
{
|
|
||||||
case GPGME_VALIDITY_NEVER: val = "n"; break;
|
|
||||||
case GPGME_VALIDITY_MARGINAL: val = "m"; break;
|
|
||||||
case GPGME_VALIDITY_FULL: val = "f"; break;
|
|
||||||
case GPGME_VALIDITY_ULTIMATE: val = "u"; break;
|
|
||||||
default: val = "?"; break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_USERID:
|
case GPGME_ATTR_USERID:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->name : NULL;
|
||||||
;
|
|
||||||
val = u ? u->name : NULL;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_NAME:
|
case GPGME_ATTR_NAME:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->name_part : NULL;
|
||||||
;
|
|
||||||
val = u ? u->name_part : NULL;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_EMAIL:
|
case GPGME_ATTR_EMAIL:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->email_part : NULL;
|
||||||
;
|
|
||||||
val = u ? u->email_part : NULL;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_COMMENT:
|
case GPGME_ATTR_COMMENT:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->comment : NULL;
|
||||||
;
|
|
||||||
val = u ? u->comment_part : NULL;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_VALIDITY:
|
case GPGME_ATTR_VALIDITY:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? validity_to_string (uid->otrust) : NULL;
|
||||||
;
|
|
||||||
if (u)
|
|
||||||
{
|
|
||||||
switch (u->validity)
|
|
||||||
{
|
|
||||||
case GPGME_VALIDITY_UNKNOWN:
|
|
||||||
val = "?";
|
|
||||||
break;
|
|
||||||
case GPGME_VALIDITY_UNDEFINED:
|
|
||||||
val = "q";
|
|
||||||
break;
|
|
||||||
case GPGME_VALIDITY_NEVER:
|
|
||||||
val = "n";
|
|
||||||
break;
|
|
||||||
case GPGME_VALIDITY_MARGINAL:
|
|
||||||
val = "m";
|
|
||||||
break;
|
|
||||||
case GPGME_VALIDITY_FULL:
|
|
||||||
val = "f";
|
|
||||||
break;
|
|
||||||
case GPGME_VALIDITY_ULTIMATE:
|
|
||||||
val = "u";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_LEVEL:
|
|
||||||
case GPGME_ATTR_KEY_REVOKED:
|
|
||||||
case GPGME_ATTR_KEY_INVALID:
|
|
||||||
case GPGME_ATTR_KEY_EXPIRED:
|
|
||||||
case GPGME_ATTR_KEY_DISABLED:
|
|
||||||
case GPGME_ATTR_UID_REVOKED:
|
|
||||||
case GPGME_ATTR_UID_INVALID:
|
|
||||||
case GPGME_ATTR_CAN_ENCRYPT:
|
|
||||||
case GPGME_ATTR_CAN_SIGN:
|
|
||||||
case GPGME_ATTR_CAN_CERTIFY:
|
|
||||||
/* Not used here. */
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_IS_SECRET:
|
|
||||||
if (key->secret)
|
|
||||||
val = "1";
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_KEY_CAPS:
|
case GPGME_ATTR_KEY_CAPS:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? capabilities_to_string (k) : NULL;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = capabilities_to_string (k);
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_SERIAL:
|
case GPGME_ATTR_SERIAL:
|
||||||
val = key->issuer_serial;
|
return key->issuer_serial;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_ISSUER:
|
case GPGME_ATTR_ISSUER:
|
||||||
val = idx? NULL : key->issuer_name;
|
return idx ? NULL : key->issuer_name;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_CHAINID:
|
case GPGME_ATTR_CHAINID:
|
||||||
val = key->chain_id;
|
return key->chain_id;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_SIG_STATUS:
|
default:
|
||||||
case GPGME_ATTR_SIG_SUMMARY:
|
return NULL;
|
||||||
case GPGME_ATTR_ERRTOK:
|
|
||||||
case GPGME_ATTR_SIG_CLASS:
|
|
||||||
/* Not of any use here. */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1010,107 +997,89 @@ unsigned long
|
|||||||
gpgme_key_get_ulong_attr (GpgmeKey key, GpgmeAttr what,
|
gpgme_key_get_ulong_attr (GpgmeKey key, GpgmeAttr what,
|
||||||
const void *reserved, int idx)
|
const void *reserved, int idx)
|
||||||
{
|
{
|
||||||
unsigned long val = 0;
|
struct subkey_s *subkey;
|
||||||
struct subkey_s *k;
|
struct user_id_s *uid;
|
||||||
struct user_id_s *u;
|
int i;
|
||||||
|
|
||||||
if (!key)
|
if (!key || reserved || idx < 0)
|
||||||
return 0;
|
|
||||||
if (reserved)
|
|
||||||
return 0;
|
|
||||||
if (idx < 0)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* Select IDXth subkey. */
|
||||||
|
subkey = &key->keys;
|
||||||
|
for (i = 0; i < idx; i++)
|
||||||
|
{
|
||||||
|
subkey = subkey->next;
|
||||||
|
if (!subkey)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select the IDXth user ID. */
|
||||||
|
uid = key->uids;
|
||||||
|
for (i = 0; i < idx; i++)
|
||||||
|
{
|
||||||
|
uid = uid->next;
|
||||||
|
if (!uid)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case GPGME_ATTR_ALGO:
|
case GPGME_ATTR_ALGO:
|
||||||
for (k = &key->keys; k && idx; k=k->next, idx--)
|
return subkey ? (unsigned long) subkey->key_algo : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = (unsigned long) k->key_algo;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_LEN:
|
case GPGME_ATTR_LEN:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? (unsigned long) subkey->key_len : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = (unsigned long) k->key_len;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_TYPE:
|
case GPGME_ATTR_TYPE:
|
||||||
val = key->x509? 1:0;
|
return key->x509 ? 1 : 0;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_CREATED:
|
case GPGME_ATTR_CREATED:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return (subkey && subkey->timestamp >= 0)
|
||||||
;
|
? (unsigned long) subkey->timestamp : 0;
|
||||||
if (k)
|
|
||||||
val = k->timestamp < 0 ? 0L : (unsigned long) k->timestamp;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_EXPIRE:
|
case GPGME_ATTR_EXPIRE:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return (subkey && subkey->expires_at >= 0)
|
||||||
;
|
? (unsigned long) subkey->expires_at : 0;
|
||||||
if (k)
|
|
||||||
val = k->expires_at < 0 ? 0L : (unsigned long) k->expires_at;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_VALIDITY:
|
case GPGME_ATTR_VALIDITY:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->validity : 0;
|
||||||
;
|
|
||||||
if (u)
|
|
||||||
val = u->validity;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_OTRUST:
|
case GPGME_ATTR_OTRUST:
|
||||||
val = key->otrust;
|
return key->otrust;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_IS_SECRET:
|
case GPGME_ATTR_IS_SECRET:
|
||||||
val = !!key->secret;
|
return !!key->secret;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_KEY_REVOKED:
|
case GPGME_ATTR_KEY_REVOKED:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->flags.revoked : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->flags.revoked;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_KEY_INVALID:
|
case GPGME_ATTR_KEY_INVALID:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->flags.invalid : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->flags.invalid;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_KEY_EXPIRED:
|
case GPGME_ATTR_KEY_EXPIRED:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->flags.expired : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->flags.expired;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_KEY_DISABLED:
|
case GPGME_ATTR_KEY_DISABLED:
|
||||||
for (k = &key->keys; k && idx; k = k->next, idx--)
|
return subkey ? subkey->flags.disabled : 0;
|
||||||
;
|
|
||||||
if (k)
|
|
||||||
val = k->flags.disabled;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_UID_REVOKED:
|
case GPGME_ATTR_UID_REVOKED:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->revoked : 0;
|
||||||
;
|
|
||||||
if (u)
|
|
||||||
val = u->revoked;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_UID_INVALID:
|
case GPGME_ATTR_UID_INVALID:
|
||||||
for (u = key->uids; u && idx; u = u->next, idx--)
|
return uid ? uid->invalid : 0;
|
||||||
;
|
|
||||||
if (u)
|
|
||||||
val = u->invalid;
|
|
||||||
break;
|
|
||||||
case GPGME_ATTR_CAN_ENCRYPT:
|
case GPGME_ATTR_CAN_ENCRYPT:
|
||||||
val = key->gloflags.can_encrypt;
|
return key->gloflags.can_encrypt;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_CAN_SIGN:
|
case GPGME_ATTR_CAN_SIGN:
|
||||||
val = key->gloflags.can_sign;
|
return key->gloflags.can_sign;
|
||||||
break;
|
|
||||||
case GPGME_ATTR_CAN_CERTIFY:
|
case GPGME_ATTR_CAN_CERTIFY:
|
||||||
val = key->gloflags.can_certify;
|
return key->gloflags.can_certify;
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
return 0;
|
||||||
}
|
}
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user