diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/directive.c | 8 | ||||
-rw-r--r-- | src/getopt.m4 | 2 | ||||
-rw-r--r-- | src/gpg.c | 14 | ||||
-rw-r--r-- | src/process.c | 2 | ||||
-rw-r--r-- | src/triplet.c | 16 | ||||
-rw-r--r-- | src/verify.c | 11 | ||||
-rw-r--r-- | src/wydawca.h | 28 |
7 files changed, 47 insertions, 34 deletions
diff --git a/src/directive.c b/src/directive.c index 401397d..93830b1 100644 --- a/src/directive.c +++ b/src/directive.c | |||
@@ -584,20 +584,22 @@ external_check (struct file_triplet *trp) | |||
584 | notify (spool->notification, trp, ev_check_fail); | 584 | notify (spool->notification, trp, ev_check_fail); |
585 | } | 585 | } |
586 | 586 | ||
587 | return rc; | 587 | return rc; |
588 | } | 588 | } |
589 | 589 | ||
590 | /* Process the directives from TRP, using given SPOOL */ | 590 | /* Process the directives from TRP */ |
591 | int | 591 | int |
592 | process_directives (struct file_triplet *trp, const struct spool *spool) | 592 | process_directives (struct file_triplet *trp) |
593 | { | 593 | { |
594 | int rc, n; | 594 | int rc, n; |
595 | const char *key, *val; | 595 | const char *key, *val; |
596 | char *relative_dir; | 596 | char *relative_dir; |
597 | const struct spool *spool; | ||
597 | 598 | ||
599 | ASGN_SPOOL (spool, trp, return 1); | ||
598 | UPDATE_STATS (STAT_COMPLETE_TRIPLETS); | 600 | UPDATE_STATS (STAT_COMPLETE_TRIPLETS); |
599 | timer_start ("triplet"); | 601 | timer_start ("triplet"); |
600 | report_init (); | 602 | report_init (); |
601 | for (n = directive_first (trp, &key, &val); n; | 603 | for (n = directive_first (trp, &key, &val); n; |
602 | n = directive_next (trp, n, &key, &val)) | 604 | n = directive_next (trp, n, &key, &val)) |
603 | { | 605 | { |
@@ -622,13 +624,13 @@ process_directives (struct file_triplet *trp, const struct spool *spool) | |||
622 | trp->file[file_directive].name, val); | 624 | trp->file[file_directive].name, val); |
623 | return 1; | 625 | return 1; |
624 | } | 626 | } |
625 | break; | 627 | break; |
626 | 628 | ||
627 | case filename_dir: | 629 | case filename_dir: |
628 | rc = verify_detached_signature (trp, spool); | 630 | rc = verify_detached_signature (trp); |
629 | if (rc == 0) | 631 | if (rc == 0) |
630 | { | 632 | { |
631 | if (external_check (trp)) | 633 | if (external_check (trp)) |
632 | return 1; | 634 | return 1; |
633 | if (move_file (trp, spool, file_dist, relative_dir) | 635 | if (move_file (trp, spool, file_dist, relative_dir) |
634 | || move_file (trp, spool, file_signature, relative_dir)) | 636 | || move_file (trp, spool, file_signature, relative_dir)) |
diff --git a/src/getopt.m4 b/src/getopt.m4 index b615ec3..fc50ff9 100644 --- a/src/getopt.m4 +++ b/src/getopt.m4 | |||
@@ -243,13 +243,13 @@ void | |||
243 | print_help(void) | 243 | print_help(void) |
244 | { | 244 | { |
245 | unsigned i; | 245 | unsigned i; |
246 | 246 | ||
247 | printf ("%s %s [%s]... %s\n", _("Usage:"), [<$2>], _("[<OPTION>]"), | 247 | printf ("%s %s [%s]... %s\n", _("Usage:"), [<$2>], _("[<OPTION>]"), |
248 | gettext (args_doc)); | 248 | gettext (args_doc)); |
249 | if (doc && doc[0]) | 249 | if (doc[0]) |
250 | print_option_descr(gettext (doc), 0, RMARGIN); | 250 | print_option_descr(gettext (doc), 0, RMARGIN); |
251 | putchar ('\n'); | 251 | putchar ('\n'); |
252 | 252 | ||
253 | for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) | 253 | for (i = 0; i < sizeof (opthelp) / sizeof (opthelp[0]); i++) |
254 | { | 254 | { |
255 | unsigned n; | 255 | unsigned n; |
@@ -212,23 +212,21 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | |||
212 | } | 212 | } |
213 | } | 213 | } |
214 | return 1; | 214 | return 1; |
215 | } | 215 | } |
216 | 216 | ||
217 | /* Verify the directive file from TRP using public key PUBKEY */ | 217 | /* Verify the directive file from TRP using public key PUBKEY */ |
218 | /* FIXME: spool currently unused */ | ||
219 | int | 218 | int |
220 | verify_directive_signature (struct file_triplet *trp, | 219 | verify_directive_signature (struct file_triplet *trp) |
221 | const struct spool *spool) | ||
222 | { | 220 | { |
223 | gpgme_ctx_t ctx; | 221 | gpgme_ctx_t ctx; |
224 | gpgme_data_t key_data, directive_data, plain; | 222 | gpgme_data_t key_data, directive_data, plain; |
225 | gpgme_error_t ec; | 223 | gpgme_error_t ec; |
226 | int rc; | 224 | int rc; |
227 | struct uploader_info *uptr; | 225 | struct uploader_info *uptr; |
228 | 226 | ||
229 | create_gpg_homedir (); | 227 | create_gpg_homedir (); |
230 | fail_if_err (gpgme_new (&ctx)); | 228 | fail_if_err (gpgme_new (&ctx)); |
231 | 229 | ||
232 | for (uptr = trp->uploader_list; uptr; uptr = uptr->next) | 230 | for (uptr = trp->uploader_list; uptr; uptr = uptr->next) |
233 | { | 231 | { |
234 | gpgme_import_result_t res; | 232 | gpgme_import_result_t res; |
@@ -256,13 +254,13 @@ verify_directive_signature (struct file_triplet *trp, | |||
256 | gpgme_verify_result_t result; | 254 | gpgme_verify_result_t result; |
257 | 255 | ||
258 | result = gpgme_op_verify_result (ctx); | 256 | result = gpgme_op_verify_result (ctx); |
259 | if (!gpg_verify_signature (ctx, result->signatures, trp)) | 257 | if (!gpg_verify_signature (ctx, result->signatures, trp)) |
260 | { | 258 | { |
261 | UPDATE_STATS (STAT_BAD_SIGNATURE); | 259 | UPDATE_STATS (STAT_BAD_SIGNATURE); |
262 | notify (spool->notification, trp, ev_bad_directive_signature); | 260 | notify (trp->spool->notification, trp, ev_bad_directive_signature); |
263 | rc = 1; | 261 | rc = 1; |
264 | } | 262 | } |
265 | else | 263 | else |
266 | rc = 0; | 264 | rc = 0; |
267 | } | 265 | } |
268 | else | 266 | else |
@@ -280,18 +278,20 @@ verify_directive_signature (struct file_triplet *trp, | |||
280 | } | 278 | } |
281 | 279 | ||
282 | /* Verify the detached signature of TRP. | 280 | /* Verify the detached signature of TRP. |
283 | NOTE: It is assumed that the public key is already registered (by | 281 | NOTE: It is assumed that the public key is already registered (by |
284 | a previous call to verify_directive_signature). */ | 282 | a previous call to verify_directive_signature). */ |
285 | int | 283 | int |
286 | verify_detached_signature (struct file_triplet *trp, | 284 | verify_detached_signature (struct file_triplet *trp) |
287 | const struct spool *spool) | ||
288 | { | 285 | { |
289 | gpgme_engine_info_t info; | 286 | gpgme_engine_info_t info; |
290 | const char *argv[5]; | 287 | const char *argv[5]; |
288 | const struct spool *spool; | ||
291 | 289 | ||
290 | ASGN_SPOOL (spool, trp, return 1); | ||
291 | |||
292 | fail_if_err (gpgme_get_engine_info (&info)); | 292 | fail_if_err (gpgme_get_engine_info (&info)); |
293 | while (info && info->protocol != GPGME_PROTOCOL_OpenPGP) | 293 | while (info && info->protocol != GPGME_PROTOCOL_OpenPGP) |
294 | info = info->next; | 294 | info = info->next; |
295 | if (!info) | 295 | if (!info) |
296 | { | 296 | { |
297 | logmsg (LOG_CRIT, | 297 | logmsg (LOG_CRIT, |
diff --git a/src/process.c b/src/process.c index 23641cd..676e565 100644 --- a/src/process.c +++ b/src/process.c | |||
@@ -199,13 +199,13 @@ scan_spool_unlocked (const struct spool *spool, int uc, uid_t *uv) | |||
199 | parse_file_name (ent->d_name, &finfo); | 199 | parse_file_name (ent->d_name, &finfo); |
200 | 200 | ||
201 | if (debug_level) | 201 | if (debug_level) |
202 | logmsg (LOG_DEBUG, _("found file %s: %s, stem: %.*s"), ent->d_name, | 202 | logmsg (LOG_DEBUG, _("found file %s: %s, stem: %.*s"), ent->d_name, |
203 | file_type_str (finfo.type), finfo.root_len, finfo.name); | 203 | file_type_str (finfo.type), finfo.root_len, finfo.name); |
204 | 204 | ||
205 | register_file (&finfo); | 205 | register_file (&finfo, spool); |
206 | } | 206 | } |
207 | 207 | ||
208 | closedir (dir); | 208 | closedir (dir); |
209 | 209 | ||
210 | if (count_collected_triplets () > 0) | 210 | if (count_collected_triplets () > 0) |
211 | { | 211 | { |
diff --git a/src/triplet.c b/src/triplet.c index 0744daa..efe4a0b 100644 --- a/src/triplet.c +++ b/src/triplet.c | |||
@@ -57,22 +57,23 @@ hash_triplet_free (void *data) | |||
57 | 57 | ||
58 | free (tp); | 58 | free (tp); |
59 | } | 59 | } |
60 | 60 | ||
61 | /* Register a file in the triplet table */ | 61 | /* Register a file in the triplet table */ |
62 | void | 62 | void |
63 | register_file (struct file_info *finfo) | 63 | register_file (struct file_info *finfo, const struct spool *spool) |
64 | { | 64 | { |
65 | struct file_triplet *tp, *ret; | 65 | struct file_triplet *tp, *ret; |
66 | 66 | ||
67 | tp = xmalloc (sizeof(*tp) + finfo->root_len + 1); | 67 | tp = xmalloc (sizeof(*tp) + finfo->root_len + 1); |
68 | memset (tp, 0, sizeof (*tp)); | 68 | memset (tp, 0, sizeof (*tp)); |
69 | tp->name = (char*)(tp + 1); | 69 | tp->name = (char*)(tp + 1); |
70 | memcpy (tp->name, finfo->name, finfo->root_len); | 70 | memcpy (tp->name, finfo->name, finfo->root_len); |
71 | tp->name[finfo->root_len] = 0; | 71 | tp->name[finfo->root_len] = 0; |
72 | 72 | tp->spool = spool; | |
73 | |||
73 | if (! ((triplet_table | 74 | if (! ((triplet_table |
74 | || (triplet_table = hash_initialize (0, 0, | 75 | || (triplet_table = hash_initialize (0, 0, |
75 | hash_triplet_hasher, | 76 | hash_triplet_hasher, |
76 | hash_triplet_compare, | 77 | hash_triplet_compare, |
77 | hash_triplet_free))) | 78 | hash_triplet_free))) |
78 | && (ret = hash_insert (triplet_table, tp)))) | 79 | && (ret = hash_insert (triplet_table, tp)))) |
@@ -120,13 +121,13 @@ enum triplet_state | |||
120 | 121 | ||
121 | static enum triplet_state | 122 | static enum triplet_state |
122 | check_triplet_state (struct file_triplet *trp) | 123 | check_triplet_state (struct file_triplet *trp) |
123 | { | 124 | { |
124 | if (trp->file[file_directive].name) | 125 | if (trp->file[file_directive].name) |
125 | { | 126 | { |
126 | if (verify_directive_file (trp, trp->spool)) | 127 | if (verify_directive_file (trp)) |
127 | return triplet_bad; | 128 | return triplet_bad; |
128 | 129 | ||
129 | if (trp->file[file_dist].name == 0 | 130 | if (trp->file[file_dist].name == 0 |
130 | && trp->file[file_signature].name == 0) | 131 | && trp->file[ |