aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2012-12-23 00:54:27 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2012-12-23 00:54:27 +0200
commit0077bc419d34a0341f978fc0e2d5cba8d35d4b28 (patch)
treef5cb831a306e99dce9a8c5af1b4be55cf7dbb658
parent67a64a6a7809c183516740696e15ab88f82d7ef0 (diff)
downloadwydawca-0077bc419d34a0341f978fc0e2d5cba8d35d4b28.tar.gz
wydawca-0077bc419d34a0341f978fc0e2d5cba8d35d4b28.tar.bz2
Fix memory leaks, provide config statements for disabling inotify.
* src/config.c: New statement "inotify" (global and spool-specific). * src/gpg.c (gpg_verify_signature): Free key when no longer needed. (verify_directive_signature): Fix memory leak. * src/job.c (job_queue_runner): Free the unlinked job. * src/triplet.c (triplet_lookup): Free key.name. * src/verify.c (fill_project_name): Return immediately if trp->blurb is not null. * src/watcher.c (create_watcher): Ignore spool if its inotify_enable is false. (watcher_init): Return immediately if inotify_enable is false. * src/wydawca.c (inotify_enable): New global. * src/wydawca.h: Likewise.
-rw-r--r--src/config.c8
-rw-r--r--src/gpg.c43
-rw-r--r--src/job.c5
-rw-r--r--src/triplet.c3
-rw-r--r--src/verify.c3
-rw-r--r--src/watcher.c16
-rw-r--r--src/wydawca.c2
-rw-r--r--src/wydawca.h3
8 files changed, 65 insertions, 18 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++)
@@ -1421,2 +1426,5 @@ static struct grecs_keyword wydawca_kw[] = {
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"),
diff --git a/src/gpg.c b/src/gpg.c
index 8979e9c..814be6f 100644
--- a/src/gpg.c
+++ b/src/gpg.c
@@ -149,18 +149,4 @@ create_gpg_homedir ()
149static int 149static int
150gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig, 150checksig (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))
@@ -210,2 +196,26 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig,
210 } 196 }
197 return -1;
198}
199
200static int
201gpg_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 }
@@ -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);
diff --git a/src/job.c b/src/job.c
index 3fae432..315303f 100644
--- a/src/job.c
+++ b/src/job.c
@@ -340,3 +340,8 @@ job_queue_runner ()
340 else 340 else
341 {
341 job_remove (job); 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
@@ -99,2 +99,5 @@ fill_project_name (struct file_triplet *trp)
99 99
100 if (trp->blurb)
101 return 0;
102
100 size = trp->file[file_directive].sb.st_size; 103 size = trp->file[file_directive].sb.st_size;
diff --git a/src/watcher.c b/src/watcher.c
index f8761ee..c52e3e6 100644
--- a/src/watcher.c
+++ b/src/watcher.c
@@ -86,4 +86,11 @@ create_watcher (struct spool *sp, void *data)
86 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 }
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));
@@ -116,2 +123,9 @@ watcher_init ()
116 123
124 if (!inotify_enable)
125 {
126 if (debug_level > 1)
127 logmsg (LOG_DEBUG, "disabling inotify support");
128 return -1;
129 }
130
117 if (debug_level > 1) 131 if (debug_level > 1)
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
56int inotify_enable = 1;
57
56void 58void
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
381extern int inotify_enable;
382
380#define UPDATE_STATS(what) \ 383#define UPDATE_STATS(what) \

Return to:

Send suggestions and report system problems to the System administrator.