diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-12-30 14:52:15 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-12-30 14:52:15 +0200 |
commit | 1fa130754f837e514e7eb231f4e0c6e1b1419271 (patch) | |
tree | 4abf3f4178481ba6b95d44fad22bb563a1aeba3c /src | |
parent | a7278cd9133596c3adbad2fc03571ce8bea18272 (diff) | |
download | wydawca-1fa130754f837e514e7eb231f4e0c6e1b1419271.tar.gz wydawca-1fa130754f837e514e7eb231f4e0c6e1b1419271.tar.bz2 |
Check returns from pipe, dup2 and chmod. Don't use obsolete MU functions.
Diffstat (limited to 'src')
-rw-r--r-- | src/directive.c | 7 | ||||
-rw-r--r-- | src/exec.c | 23 | ||||
-rw-r--r-- | src/mail.c | 68 | ||||
-rw-r--r-- | src/triplet.c | 2 | ||||
-rw-r--r-- | src/wydawca.h | 2 |
5 files changed, 49 insertions, 53 deletions
diff --git a/src/directive.c b/src/directive.c index 8893675..cb656e7 100644 --- a/src/directive.c +++ b/src/directive.c | |||
@@ -485,13 +485,18 @@ run_check_script (const char *script, struct file_triplet *trp, | |||
485 | setenv ("WYDAWCA_SOURCE", spool->source_dir, 1); | 485 | setenv ("WYDAWCA_SOURCE", spool->source_dir, 1); |
486 | setenv ("WYDAWCA_DEST", spool->dest_dir, 1); | 486 | setenv ("WYDAWCA_DEST", spool->dest_dir, 1); |
487 | setenv ("WYDAWCA_URL", spool->url, 1); | 487 | setenv ("WYDAWCA_URL", spool->url, 1); |
488 | setenv ("WYDAWCA_TRIPLET_BASE", trp->name, 1); | 488 | setenv ("WYDAWCA_TRIPLET_BASE", trp->name, 1); |
489 | setenv ("WYDAWCA_DIST_FILE", trp->file[file_dist].name, 1); | 489 | setenv ("WYDAWCA_DIST_FILE", trp->file[file_dist].name, 1); |
490 | 490 | ||
491 | chdir (temp_homedir); | 491 | if (chdir (temp_homedir)) |
492 | { | ||
493 | logmsg (LOG_CRIT, "cannot change to %s: %s", | ||
494 | temp_homedir, strerror (errno)); | ||
495 | _exit (127); | ||
496 | } | ||
492 | 497 | ||
493 | argv[0] = "sh"; | 498 | argv[0] = "sh"; |
494 | argv[1] = script_file; | 499 | argv[1] = script_file; |
495 | argv[2] = NULL; | 500 | argv[2] = NULL; |
496 | 501 | ||
497 | execv ("/bin/sh", argv); | 502 | execv ("/bin/sh", argv); |
@@ -27,22 +27,35 @@ start_prog (int argc, const char **argv, pid_t *ppid) | |||
27 | { | 27 | { |
28 | int p[2]; | 28 | int p[2]; |
29 | FILE *fp; | 29 | FILE *fp; |
30 | pid_t pid; | 30 | pid_t pid; |
31 | int i; | 31 | int i; |
32 | 32 | ||
33 | pipe (p); | 33 | if (pipe (p)) |
34 | { | ||
35 | logmsg (LOG_CRIT, "pipe: %s", strerror (errno)); | ||
36 | return NULL; | ||
37 | } | ||
38 | |||
34 | switch (pid = fork ()) | 39 | switch (pid = fork ()) |
35 | { | 40 | { |
36 | case 0: | 41 | case 0: |
37 | /* Child process */ | 42 | /* Child process */ |
38 | 43 | ||
39 | if (p[1] != 1) | 44 | if (p[1] != 1 && dup2 (p[1], 1) == -1) |
40 | dup2 (p[1], 1); | 45 | { |
41 | if (p[1] != 1) | 46 | logmsg (LOG_CRIT, "dup2: %s", strerror (errno)); |
42 | dup2 (p[1], 2); | 47 | _exit (EX_UNAVAILABLE); |
48 | } | ||
49 | |||
50 | if (p[1] != 1 && dup2 (p[1], 2) == -1) | ||
51 | { | ||
52 | logmsg (LOG_CRIT, "dup2: %s", strerror (errno)); | ||
53 | _exit (EX_UNAVAILABLE); | ||
54 | } | ||
55 | |||
43 | close (p[0]); | 56 | close (p[0]); |
44 | 57 | ||
45 | /* Close unneded descripitors */ | 58 | /* Close unneded descripitors */ |
46 | for (i = getdtablesize (); i > 2; i--) | 59 | for (i = getdtablesize (); i > 2; i--) |
47 | close (i); | 60 | close (i); |
48 | 61 | ||
@@ -270,14 +270,12 @@ mail_send_message (mu_address_t rcpt, const char *text, | |||
270 | { | 270 | { |
271 | int rc; | 271 | int rc; |
272 | mu_message_t msg; | 272 | mu_message_t msg; |
273 | mu_stream_t stream = NULL; | 273 | mu_stream_t stream = NULL; |
274 | mu_header_t hdr; | 274 | mu_header_t hdr; |
275 | static char *x_mailer = "wydawca (" PACKAGE_STRING ")"; | 275 | static char *x_mailer = "wydawca (" PACKAGE_STRING ")"; |
276 | size_t size; | ||
277 | char *buf; | ||
278 | const char *sval; | 276 | const char *sval; |
279 | 277 | ||
280 | mu_static_memory_stream_create (&stream, text, strlen (text)); | 278 | mu_static_memory_stream_create (&stream, text, strlen (text)); |
281 | rc = mu_stream_to_message (stream, &msg); | 279 | rc = mu_stream_to_message (stream, &msg); |
282 | mu_stream_unref (stream); | 280 | mu_stream_unref (stream); |
283 | if (rc) | 281 | if (rc) |
@@ -287,26 +285,21 @@ mail_send_message (mu_address_t rcpt, const char *text, | |||
287 | } | 285 | } |
288 | mu_message_get_header (msg, &hdr); | 286 | mu_message_get_header (msg, &hdr); |
289 | mu_header_append (hdr, "X-Mailer", x_mailer); | 287 | mu_header_append (hdr, "X-Mailer", x_mailer); |
290 | 288 | ||
291 | if (rcpt) | 289 | if (rcpt) |
292 | { | 290 | { |
293 | mu_address_to_string (rcpt, NULL, 0, &size); | 291 | const char *s; |
294 | buf = grecs_malloc (size + 1); | 292 | |
295 | mu_address_to_string (rcpt, buf, size + 1, NULL); | 293 | if (mu_address_sget_printable (rcpt, &s) == 0) |
296 | 294 | mu_header_set_value (hdr, "To", s, 1); | |
297 | mu_header_set_value (hdr, "To", buf, 1); | 295 | |
298 | free (buf); | ||
299 | |||
300 | if (from_address && mu_header_sget_value (hdr, "From", &sval)) | 296 | if (from_address && mu_header_sget_value (hdr, "From", &sval)) |
301 | { | 297 | { |
302 | mu_address_to_string (from_address, NULL, 0, &size); | 298 | if (mu_address_sget_printable (from_address, &s) == 0) |
303 | buf = grecs_malloc (size + 1); | 299 | mu_header_set_value (hdr, "From", s, 1); |
304 | mu_address_to_string (from_address, buf, size + 1, NULL); | ||
305 | mu_header_set_value (hdr, "From", buf, 1); | ||
306 | free (buf); | ||
307 | } | 300 | } |
308 | } | 301 | } |
309 | 302 | ||
310 | if (debug_level > 1) | 303 | if (debug_level > 1) |
311 | { | 304 | { |
312 | mu_debug_level_t level; | 305 | mu_debug_level_t level; |
@@ -428,19 +421,16 @@ mail_stats () | |||
428 | logmsg (LOG_ERR, _("cannot mail statistics: admin-address not defined")); | 421 | logmsg (LOG_ERR, _("cannot mail statistics: admin-address not defined")); |
429 | return; | 422 | return; |
430 | } | 423 | } |
431 | 424 | ||
432 | if (debug_level) | 425 | if (debug_level) |
433 | { | 426 | { |
434 | size_t size; | 427 | const char *s; |
435 | char *buf; | 428 | |
436 | mu_address_to_string (admin_address, NULL, 0, &size); | 429 | if (mu_address_sget_printable (admin_address, &s) == 0) |
437 | buf = grecs_malloc (size + 1); | 430 | logmsg (LOG_DEBUG, _("sending stats to %s"), s); |
438 | mu_address_to_string (admin_address, buf, size + 1, NULL); | ||
439 | logmsg (LOG_DEBUG, _("sending stats to %s"), buf); | ||
440 | free (buf); | ||
441 | } | 431 | } |
442 | 432 | ||
443 | tc = timer_get_count () * 3; | 433 | tc = timer_get_count () * 3; |
444 | exp = make_stat_expansion (tc + 1); | 434 | exp = make_stat_expansion (tc + 1); |
445 | time (&t); | 435 | time (&t); |
446 | exp[0].kw = "date"; | 436 | exp[0].kw = "date"; |
@@ -592,20 +582,17 @@ do_notify (struct file_triplet *trp, enum notification_event ev, | |||
592 | } | 582 | } |
593 | 583 | ||
594 | if (debug_level) | 584 | if (debug_level) |
595 | { | 585 | { |
596 | if (rcpt) | 586 | if (rcpt) |
597 | { | 587 | { |
598 | size_t size; | 588 | const char *s; |
599 | char *buf; | 589 | |
600 | mu_address_to_string (rcpt, NULL, 0, &size); | 590 | if (mu_address_sget_printable (rcpt, &s) == 0) |
601 | buf = grecs_malloc (size + 1); | 591 | logmsg (LOG_DEBUG, _("notifying %s (project %s) about %s"), |
602 | mu_address_to_string (rcpt, buf, size + 1, NULL); | 592 | s, trp->project, notification_event_str (ev)); |
603 | logmsg (LOG_DEBUG, _("notifying %s (project %s) about %s"), | ||
604 | buf, trp->project, notification_event_str (ev)); | ||
605 | free (buf); | ||
606 | } | 593 | } |
607 | else | 594 | else |
608 | logmsg (LOG_DEBUG, | 595 | logmsg (LOG_DEBUG, |
609 | _("notifying message recipients (project %s) about %s"), | 596 | _("notifying message recipients (project %s) about %s"), |
610 | trp->project, notification_event_str (ev)); | 597 | trp->project, notification_event_str (ev)); |
611 | } | 598 | } |
@@ -635,48 +622,39 @@ notify (struct notification *notification_list, | |||
635 | /* FIXME */ | 622 | /* FIXME */ |
636 | } | 623 | } |
637 | 624 | ||
638 | const char * | 625 | const char * |
639 | expand_email_admin (struct metadef *def, void *data) | 626 | expand_email_admin (struct metadef *def, void *data) |
640 | { | 627 | { |
641 | size_t size; | 628 | if (mu_address_aget_printable (admin_address, &def->storage) == 0) |
642 | if (mu_address_to_string (admin_address, NULL, 0, &size) == 0) | 629 | def->value = def->storage; |
643 | { | ||
644 | size++; | ||
645 | def->storage = grecs_malloc (size); | ||
646 | mu_address_to_string (admin_address, def->storage, size, NULL); | ||
647 | def->value = def->storage; | ||
648 | } | ||
649 | else | 630 | else |
650 | def->value = ""; | 631 | def->value = ""; |
651 | return def->value; | 632 | return def->value; |
652 | } | 633 | } |
653 | 634 | ||
654 | const char * | 635 | const char * |
655 | expand_email_owner (struct metadef *def, void *data) | 636 | expand_email_owner (struct metadef *def, void *data) |
656 | { | 637 | { |
657 | struct file_triplet *trp = data; | 638 | struct file_triplet *trp = data; |
658 | mu_address_t addr; | 639 | mu_address_t addr; |
659 | const char *errp; | 640 | const char *errp; |
660 | size_t size; | ||
661 | 641 | ||
662 | addr = get_recipient (trp->spool->dictionary[project_owner_dict], | 642 | addr = get_recipient (trp->spool->dictionary[project_owner_dict], |
663 | trp, &errp); | 643 | trp, &errp); |
664 | if (!addr) | 644 | if (!addr) |
665 | { | 645 | { |
666 | logmsg (LOG_ERR, _("cannot get email of the %s's owner: %s"), | 646 | logmsg (LOG_ERR, _("cannot get email of the %s's owner: %s"), |
667 | trp->project, gettext (errp)); | 647 | trp-> |