From b3e534f945ae56605bc5309e7c5af020c797a69b Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Mon, 31 May 2004 23:48:25 +0000 Subject: [PATCH] cscvs to tla changeset 133 Author: noodles Date: 2004/05/27 21:58:18 Change getphoto over to returning the JPEG data rather than the OpenPGP packet. --- lookup.c | 17 ++++++++++------- onak.c | 20 +++++++++----------- photoid.c | 50 +++++++++++++++++++++++++++++++++++++++++--------- photoid.h | 14 +++++++++----- 4 files changed, 69 insertions(+), 32 deletions(-) diff --git a/lookup.c b/lookup.c index 5d638ea..123ec5f 100644 --- a/lookup.c +++ b/lookup.c @@ -5,7 +5,7 @@ * * Copyright 2002 Project Purple * - * $Id: lookup.c,v 1.15 2004/05/27 01:25:37 noodles Exp $ + * $Id: lookup.c,v 1.16 2004/05/27 21:58:18 noodles Exp $ */ #include @@ -160,7 +160,7 @@ int main(int argc, char *argv[]) initdb(true); switch (op) { case OP_GET: - logthing(LOGTHING_NOTICE, "Getting keyid %llX", + logthing(LOGTHING_NOTICE, "Getting keyid 0x%llX", keyid); if (fetch_key(keyid, &publickey, false)) { puts("
");
@@ -172,6 +172,8 @@ int main(int argc, char *argv[])
 						packets);
 				puts("
"); } else { + logthing(LOGTHING_NOTICE, + "Failed to fetch key."); puts("Key not found"); } break; @@ -185,12 +187,13 @@ int main(int argc, char *argv[]) break; case OP_PHOTO: if (fetch_key(keyid, &publickey, false)) { - struct openpgp_packet *photo = NULL; - photo = getphoto(publickey, 0); - if (photo != NULL) { - fwrite(photo->data+19, + unsigned char *photo = NULL; + size_t length = 0; + + if (getphoto(publickey, 0, &photo, &length)) { + fwrite(photo, 1, - (photo->length - 19), + length, stdout); } free_publickey(publickey); diff --git a/onak.c b/onak.c index 3a4c4e8..2a0376e 100644 --- a/onak.c +++ b/onak.c @@ -7,7 +7,7 @@ * * Copyright 2002 Project Purple * - * $Id: onak.c,v 1.20 2004/05/27 01:25:37 noodles Exp $ + * $Id: onak.c,v 1.21 2004/05/27 21:58:18 noodles Exp $ */ #include @@ -179,16 +179,14 @@ int main(int argc, char *argv[]) puts("Can't get a key on uid text." " You must supply a keyid."); } else if (fetch_key(keyid, &keys, false)) { - struct openpgp_packet *photo = NULL; - FILE *photof = NULL; - photo = getphoto(keys, 0); - if (photo != NULL) { - photof = fopen("keyphoto.jpg", "w"); - fwrite(photo->data+19, - 1, - (photo->length - 19), - photof); - fclose(photof); + unsigned char *photo = NULL; + size_t length = 0; + + if (getphoto(keys, 0, &photo, &length)) { + fwrite(photo, + 1, + length, + stdout); } free_publickey(keys); keys = NULL; diff --git a/photoid.c b/photoid.c index 4416e3e..8da62ce 100644 --- a/photoid.c +++ b/photoid.c @@ -5,7 +5,7 @@ * * Copyright 2004 Project Purple * - * $Id: photoid.c,v 1.1 2004/05/27 01:25:37 noodles Exp $ + * $Id: photoid.c,v 1.2 2004/05/27 21:58:18 noodles Exp $ */ #include @@ -17,30 +17,62 @@ #include "keyid.h" #include "keyindex.h" #include "keystructs.h" +#include "log.h" +#include "photoid.h" /** * getphoto - returns an OpenPGP packet containing a photo id. * @key: The key to return the photo id from. * @index: The index of the photo to return. + * @photo: The photo data. + * @length: The length of the photo data. * - * This function returns the OpenPGP packet containing a photo id from a - * supplied key. index specifies which photo id should be returned. If - * there's no such photo id NULL is returned. + * This function returns the photo data contained in a supplied key. + * index specifies which photo id should be returned. If there's no such + * photo id NULL is returned. The returned data pointer refers to the key + * data supplied rather than a copy of it. */ -struct openpgp_packet *getphoto(struct openpgp_publickey *key, int index) +int getphoto(struct openpgp_publickey *key, int index, unsigned char **photo, + size_t *length) { struct openpgp_signedpacket_list *curuid = NULL; - struct openpgp_packet *photo = NULL; int i = 0; + int j = 0; assert(key != NULL); + assert(photo != NULL); + assert(length != NULL); + *photo = NULL; + curuid = key->uids; i = 0; - while (photo == NULL && curuid != NULL && i <= index) { + while (*photo == NULL && curuid != NULL && i <= index) { if (curuid->packet->tag == 17) { if (i == index) { - photo = curuid->packet; + j = 0; + *length = curuid->packet->data[j++]; + if (*length < 192) { + /* length is correct */ + } else if (*length < 255) { + *length -= 192; + *length <<= 8; + *length += curuid->packet->data[j++]; + *length += 192; + } else { + *length = curuid->packet->data[j++]; + *length <<= 8; + *length += curuid->packet->data[j++]; + *length <<= 8; + *length += curuid->packet->data[j++]; + *length <<= 8; + *length += curuid->packet->data[j++]; + } + logthing(LOGTHING_DEBUG, "Got photo, size %d", + *length); + j++; + *length -= 17; + *photo = &(curuid->packet->data[j+16]); } else { i++; } @@ -48,5 +80,5 @@ struct openpgp_packet *getphoto(struct openpgp_publickey *key, int index) curuid = curuid->next; } - return photo; + return (*photo != NULL); } diff --git a/photoid.h b/photoid.h index 03bbf32..49b685e 100644 --- a/photoid.h +++ b/photoid.h @@ -5,7 +5,7 @@ * * Copyright 2004 Project Purple * - * $Id: photoid.h,v 1.1 2004/05/27 01:25:37 noodles Exp $ + * $Id: photoid.h,v 1.2 2004/05/27 21:58:18 noodles Exp $ */ #ifndef __PHOTOID_H__ @@ -17,11 +17,15 @@ * getphoto - returns an OpenPGP packet containing a photo id. * @key: The key to return the photo id from. * @index: The index of the photo to return. + * @photo: The photo data. + * @length: The length of the photo data. * - * This function returns the OpenPGP packet containing a photo id from a - * supplied key. index specifies which photo id should be returned. If - * there's no such photo id NULL is returned. + * This function returns the photo data contained in a supplied key. + * index specifies which photo id should be returned. If there's no such + * photo id NULL is returned. The returned data pointer refers to the key + * data supplied rather than a copy of it. */ -struct openpgp_packet *getphoto(struct openpgp_publickey *key, int index); +int getphoto(struct openpgp_publickey *key, int index, unsigned char **photo, + size_t *length); #endif /* __PHOTOID_H__ */ -- 2.30.2