diff options
Diffstat (limited to 'src/gpg.c')
-rw-r--r-- | src/gpg.c | 43 |
1 files changed, 27 insertions, 16 deletions
@@ -147,22 +147,8 @@ create_gpg_homedir () | |||
147 | } | 147 | } |
148 | 148 | ||
149 | static int | 149 | static int |
150 | gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | 150 | checksig (gpgme_signature_t sig, const char *uid, struct file_triplet *trp) |
151 | struct file_triplet *trp) | ||
152 | { | 151 | { |
153 | if (!sig) | ||
154 | return 0; | ||
155 | |||
156 | for (; sig; sig = sig->next) | ||
157 | { | ||
158 | const char *uid; | ||
159 | gpgme_key_t key; | ||
160 | |||
161 | if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR) | ||
162 | uid = key->uids->uid; | ||
163 | else | ||
164 | uid = sig->fpr; | ||
165 | |||
166 | switch (gpg_err_code (sig->status)) | 152 | switch (gpg_err_code (sig->status)) |
167 | { | 153 | { |
168 | case GPG_ERR_NO_ERROR: | 154 | case GPG_ERR_NO_ERROR: |
@@ -208,6 +194,30 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | |||
208 | logmsg (LOG_ERR, _("Unknown signature error")); | 194 | logmsg (LOG_ERR, _("Unknown signature error")); |
209 | return 0; | 195 | return 0; |
210 | } | 196 | } |
197 | return -1; | ||
198 | } | ||
199 | |||
200 | static int | ||
201 | gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | ||
202 | struct file_triplet *trp) | ||
203 | { | ||
204 | if (!sig) | ||
205 | return 0; | ||
206 | |||
207 | for (; sig; sig = sig->next) | ||
208 | { | ||
209 | const char *uid; | ||
210 | gpgme_key_t key; | ||
211 | int rc; | ||
212 | |||
213 | if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR) | ||
214 | uid = key->uids->uid; | ||
215 | else | ||
216 | uid = sig->fpr; | ||
217 | rc = checksig (sig, uid, trp); | ||
218 | gpgme_key_unref (key); | ||
219 | if (rc != -1) | ||
220 | return rc; | ||
211 | } | 221 | } |
212 | return 1; | 222 | return 1; |
213 | } | 223 | } |
@@ -217,7 +227,7 @@ int | |||
217 | verify_directive_signature (struct file_triplet *trp) | 227 | verify_directive_signature (struct file_triplet *trp) |
218 | { | 228 | { |
219 | gpgme_ctx_t ctx; | 229 | gpgme_ctx_t ctx; |
220 | gpgme_data_t key_data, directive_data, plain; | 230 | gpgme_data_t key_data, directive_data, plain = NULL; |
221 | gpgme_error_t ec; | 231 | gpgme_error_t ec; |
222 | int rc; | 232 | int rc; |
223 | struct uploader_info *uptr; | 233 | struct uploader_info *uptr; |
@@ -269,6 +279,7 @@ verify_directive_signature (struct file_triplet *trp) | |||
269 | trp->name, gpgme_strerror (ec)); | 279 | trp->name, gpgme_strerror (ec)); |
270 | } | 280 | } |
271 | 281 | ||
282 | gpgme_data_release (plain); | ||
272 | gpgme_data_release (directive_data); | 283 | gpgme_data_release (directive_data); |
273 | gpgme_data_release (key_data); | 284 | gpgme_data_release (key_data); |
274 | gpgme_release (ctx); | 285 | gpgme_release (ctx); |