diff options
-rw-r--r-- | src/config.c | 10 | ||||
-rw-r--r-- | src/gpg.c | 107 | ||||
-rw-r--r-- | src/job.c | 7 | ||||
-rw-r--r-- | src/triplet.c | 3 | ||||
-rw-r--r-- | src/verify.c | 3 | ||||
-rw-r--r-- | src/watcher.c | 16 | ||||
-rw-r--r-- | src/wydawca.c | 2 | ||||
-rw-r--r-- | src/wydawca.h | 3 |
8 files changed, 99 insertions, 52 deletions
diff --git a/src/config.c b/src/config.c index 66d5fb7..509b0d5 100644 --- a/src/config.c +++ b/src/config.c | |||
@@ -1160,2 +1160,6 @@ static struct grecs_keyword spool_kw[] = { | |||
1160 | cb_interval }, | 1160 | cb_interval }, |
1161 | { "inotify", NULL, N_("Enable or disable inotify for this spool"), | ||
1162 | grecs_type_bool, GRECS_DFLT, | ||
1163 | NULL, offsetof(struct spool, inotify_enable), }, | ||
1164 | |||
1161 | { "dictionary", N_("ident"), N_("Define data dictionary"), | 1165 | { "dictionary", N_("ident"), N_("Define data dictionary"), |
@@ -1202,2 +1206,3 @@ cb_spool (enum grecs_callback_command cmd, | |||
1202 | spool->file_sweep_time = file_sweep_time; | 1206 | spool->file_sweep_time = file_sweep_time; |
1207 | spool->inotify_enable = 1; | ||
1203 | for (i = 0; i < NITEMS (spool->dictionary); i++) | 1208 | for (i = 0; i < NITEMS (spool->dictionary); i++) |
@@ -1420,3 +1425,6 @@ static struct grecs_keyword wydawca_kw[] = { | |||
1420 | grecs_type_string, GRECS_DFLT, &pidfile }, | 1425 | grecs_type_string, GRECS_DFLT, &pidfile }, |
1421 | 1426 | ||
1427 | { "inotify", NULL, N_("Enable or disable inotify support"), | ||
1428 | grecs_type_bool, GRECS_DFLT, &inotify_enable }, | ||
1429 | |||
1422 | { "user", N_("name"), N_("Run with UID and GID of this user"), | 1430 | { "user", N_("name"), N_("Run with UID and GID of this user"), |
@@ -149,2 +149,53 @@ create_gpg_homedir () | |||
149 | static int | 149 | static int |
150 | checksig (gpgme_signature_t sig, const char *uid, struct file_triplet *trp) | ||
151 | { | ||
152 | switch (gpg_err_code (sig->status)) | ||
153 | { | ||
154 | case GPG_ERR_NO_ERROR: | ||
155 | if (debug_level) | ||
156 | logmsg (LOG_NOTICE, _("Good signature from %s"), uid); | ||
157 | trp->uploader = uploader_find_frp (trp->uploader_list, sig->fpr); | ||
158 | if (!trp->uploader) | ||
159 | { | ||
160 | logmsg (LOG_ERR, | ||
161 | _("good signature from %s, " | ||
162 | "but the uploader info for %s not found"), | ||
163 | uid, sig->fpr); | ||
164 | return 1; | ||
165 | } | ||
166 | break; | ||
167 | |||
168 | case GPG_ERR_BAD_SIGNATURE: | ||
169 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
170 | logmsg (LOG_ERR, _("BAD signature from %s"), uid); | ||
171 | return 0; | ||
172 | |||
173 | case GPG_ERR_NO_PUBKEY: | ||
174 | UPDATE_STATS (STAT_ACCESS_VIOLATIONS); | ||
175 | logmsg (LOG_ERR, _("No public key")); | ||
176 | return 0; | ||
177 | |||
178 | case GPG_ERR_NO_DATA: | ||
179 | UPDATE_STATS (STAT_BAD_TRIPLETS); | ||
180 | logmsg (LOG_ERR, _("No signature")); | ||
181 | return 0; | ||
182 | |||
183 | case GPG_ERR_SIG_EXPIRED: | ||
184 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
185 | logmsg (LOG_ERR, _("Expired signature from %s"), uid); | ||
186 | return 0; | ||
187 | |||
188 | case GPG_ERR_KEY_EXPIRED: | ||
189 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
190 | logmsg (LOG_ERR, _("Key expired (%s)"), uid); | ||
191 | return 0; | ||
192 | |||
193 | default: | ||
194 | logmsg (LOG_ERR, _("Unknown signature error")); | ||
195 | return 0; | ||
196 | } | ||
197 | return -1; | ||
198 | } | ||
199 | |||
200 | static int | ||
150 | gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | 201 | gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, |
@@ -159,3 +210,4 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | |||
159 | gpgme_key_t key; | 210 | gpgme_key_t key; |
160 | 211 | int rc; | |
212 | |||
161 | if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR) | 213 | if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR) |
@@ -164,48 +216,6 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, | |||
164 | uid = sig->fpr; | 216 | uid = sig->fpr; |
165 | 217 | rc = checksig (sig, uid, trp); | |
166 | switch (gpg_err_code (sig->status)) | 218 | gpgme_key_unref (key); |
167 | { | 219 | if (rc != -1) |
168 | case GPG_ERR_NO_ERROR: | 220 | return rc; |
169 | if (debug_level) | ||
170 | logmsg (LOG_NOTICE, _("Good signature from %s"), uid); | ||
171 | trp->uploader = uploader_find_frp (trp->uploader_list, sig->fpr); | ||
172 | if (!trp->uploader) | ||
173 | { | ||
174 | logmsg (LOG_ERR, | ||
175 | _("good signature from %s, " | ||
176 | "but the uploader info for %s not found"), | ||
177 | uid, sig->fpr); | ||
178 | return 1; | ||
179 | } | ||
180 | break; | ||
181 | |||
182 | case GPG_ERR_BAD_SIGNATURE: | ||
183 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
184 | logmsg (LOG_ERR, _("BAD signature from %s"), uid); | ||
185 | return 0; | ||
186 | |||
187 | case GPG_ERR_NO_PUBKEY: | ||
188 | UPDATE_STATS (STAT_ACCESS_VIOLATIONS); | ||
189 | logmsg (LOG_ERR, _("No public key")); | ||
190 | return 0; | ||
191 | |||
192 | case GPG_ERR_NO_DATA: | ||
193 | UPDATE_STATS (STAT_BAD_TRIPLETS); | ||
194 | logmsg (LOG_ERR, _("No signature")); | ||
195 | return 0; | ||
196 | |||
197 | case GPG_ERR_SIG_EXPIRED: | ||
198 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
199 | logmsg (LOG_ERR, _("Expired signature from %s"), uid); | ||
200 | return 0; | ||
201 | |||
202 | case GPG_ERR_KEY_EXPIRED: | ||
203 | UPDATE_STATS (STAT_BAD_SIGNATURE); | ||
204 | logmsg (LOG_ERR, _("Key expired (%s)"), uid); | ||
205 | return 0; | ||
206 | |||
207 | default: | ||
208 | logmsg (LOG_ERR, _("Unknown signature error")); | ||
209 | return 0; | ||
210 | } | ||
211 | } | 221 | } |
@@ -219,3 +229,3 @@ verify_directive_signature (struct file_triplet *trp) | |||
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; |
@@ -271,2 +281,3 @@ verify_directive_signature (struct file_triplet *trp) | |||
271 | 281 | ||
282 | gpgme_data_release (plain); | ||
272 | gpgme_data_release (directive_data); | 283 | gpgme_data_release (directive_data); |
@@ -340,3 +340,8 @@ job_queue_runner () | |||
340 | else | 340 | else |
341 | job_remove (job); | 341 | { |
342 | job_remove (job); | ||
343 | free (job); | ||
344 | job = next; | ||
345 | continue; | ||
346 | } | ||
342 | } | 347 | } |
diff --git a/src/triplet.c b/src/triplet.c index 05b7536..aa74de0 100644 --- a/src/triplet.c +++ b/src/triplet.c | |||
@@ -129,5 +129,6 @@ triplet_lookup (struct spool *spool, const char *name) | |||
129 | key.spool = spool; | 129 | key.spool = spool; |
130 | file_info_cleanup (&finfo); | ||
130 | 131 | ||
131 | ret = grecs_symtab_lookup_or_install (triplet_table, &key, NULL); | 132 | ret = grecs_symtab_lookup_or_install (triplet_table, &key, NULL); |
132 | file_info_cleanup (&finfo); | 133 | free (key.name); |
133 | 134 | ||
diff --git a/src/verify.c b/src/verify.c index 4a108bc..dee160f 100644 --- a/src/verify.c +++ b/src/verify.c | |||
@@ -98,2 +98,5 @@ fill_project_name (struct file_triplet *trp) | |||
98 | int rc; | 98 | int rc; |
99 | |||
100 | if (trp->blurb) | ||
101 | return 0; | ||
99 | 102 | ||
diff --git a/src/watcher.c b/src/watcher.c index f8761ee..c52e3e6 100644 --- a/src/watcher.c +++ b/src/watcher.c | |||
@@ -85,5 +85,12 @@ create_watcher (struct spool *sp, void *data) | |||
85 | return 0; | 85 | return 0; |
86 | |||
87 | if (!sp->inotify_enable) | ||
88 | { | ||
89 | if (debug_level > 1) | ||
90 | logmsg (LOG_DEBUG, "disabling inotify support for spool %s", sp->tag); | ||
91 | return 0; | ||
92 | } | ||
86 | 93 | ||
87 | if (debug_level > 1) | 94 | if (debug_level > 1) |
88 | logmsg (LOG_DEBUG, "creating watcher %s", path); | 95 | logmsg (LOG_DEBUG, "spool %s: creating watcher %s", sp->tag, path); |
89 | dwp = malloc (sizeof(*dwp)); | 96 | dwp = malloc (sizeof(*dwp)); |
@@ -115,2 +122,9 @@ watcher_init () | |||
115 | int ifd, rc; | 122 | int ifd, rc; |
123 | |||
124 | if (!inotify_enable) | ||
125 | { | ||
126 | if (debug_level > 1) | ||
127 | logmsg (LOG_DEBUG, "disabling inotify support"); | ||
128 | return -1; | ||
129 | } | ||
116 | 130 | ||
diff --git a/src/wydawca.c b/src/wydawca.c index 521d796..45a5cff 100644 --- a/src/wydawca.c +++ b/src/wydawca.c | |||
@@ -55,2 +55,4 @@ unsigned max_directive_version = MAX_DIRECTIVE_VERSION; | |||
55 | 55 | ||
56 | int inotify_enable = 1; | ||
57 | |||
56 | void | 58 | void |
diff --git a/src/wydawca.h b/src/wydawca.h index 722fc9b..323d403 100644 --- a/src/wydawca.h +++ b/src/wydawca.h | |||
@@ -228,2 +228,3 @@ struct spool | |||
228 | struct virt_tab vtab; /* Virtual method table */ | 228 | struct virt_tab vtab; /* Virtual method table */ |
229 | int inotify_enable; | ||
229 | 230 | ||
@@ -379,2 +380,4 @@ extern struct spool inotify_spool; | |||
379 | 380 | ||
381 | extern int inotify_enable; | ||
382 | |||
380 | #define UPDATE_STATS(what) \ | 383 | #define UPDATE_STATS(what) \ |