patch-gnats_queue-pr_c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. $OpenBSD: patch-gnats_queue-pr_c,v 1.1 2011/07/08 11:32:17 jasper Exp $
  2. --- gnats/queue-pr.c.orig Wed Nov 25 15:15:20 1998
  3. +++ gnats/queue-pr.c Fri Jul 8 13:28:43 2011
  4. @@ -78,9 +78,11 @@ fork_gnats (filename)
  5. int pid; /* pid_t */
  6. int status;
  7. + size_t len;
  8. - safe_env[0] = (char *) xmalloc (5 + strlen (gnats_user) + 1);
  9. - sprintf (safe_env[0], "USER=%s", gnats_user);
  10. + len = 5 + strlen (gnats_user) + 1;
  11. + safe_env[0] = (char *) xmalloc (len);
  12. + snprintf (safe_env[0], len, "USER=%s", gnats_user);
  13. errno = 0;
  14. pid = fork();
  15. @@ -91,10 +93,11 @@ fork_gnats (filename)
  16. {
  17. char *gnats_bin;
  18. int fd;
  19. + size_t len = strlen (bindir) + 9;
  20. - gnats_bin = (char *) xmalloc (strlen (bindir) + 9);
  21. - strcpy (gnats_bin, bindir);
  22. - strcat (gnats_bin, "/file-pr");
  23. + gnats_bin = (char *) xmalloc (len);
  24. + strlcpy (gnats_bin, bindir, len);
  25. + strlcat (gnats_bin, "/file-pr", len);
  26. if (! flag_debug)
  27. {
  28. @@ -114,14 +117,14 @@ fork_gnats (filename)
  29. if (flag_debug)
  30. {
  31. if (execle (gnats_bin, "file-pr", "-f", filename,
  32. - "-D", "-d", gnats_root, NULL, safe_env) < 0)
  33. + "-D", "-d", gnats_root, (char *)NULL, safe_env) < 0)
  34. punt (1, "%s: execle of gnats failed: %s\n", program_name,
  35. strerror (errno));
  36. }
  37. else
  38. {
  39. if (execle (gnats_bin, "file-pr", "-f", filename,
  40. - "-d", gnats_root, NULL, safe_env) < 0)
  41. + "-d", gnats_root, (char *)NULL, safe_env) < 0)
  42. punt (1, "%s: execle of gnats failed: %s\n", program_name,
  43. strerror (errno));
  44. }
  45. @@ -204,9 +207,10 @@ run_gnats ()
  46. }
  47. else if (child_status == 2)
  48. {
  49. - char *name2 = xmalloc (strlen (files[i].name) + 2);
  50. - strcpy (name2, ".");
  51. - strcat (name2, files[i].name);
  52. + size_t len = strlen (files[i].name) + 2;
  53. + char *name2 = xmalloc (len);
  54. + strlcpy (name2, ".", len);
  55. + strlcat (name2, files[i].name, len);
  56. rename (files[i].name, name2);
  57. punt (0, "renamed `%s' to `%s' pending human intervention.\n",
  58. files[i].name, name2);
  59. @@ -226,13 +230,11 @@ drop_msg ()
  60. {
  61. int fd[2];
  62. char *tmpdir;
  63. - char *bug_file = (char *) xmalloc (PATH_MAX);
  64. + char bug_file[MAXPATHLEN];
  65. int r; /* XXX ssize_t */
  66. char *buf = (char *) xmalloc (MAXBSIZE);
  67. char *base, *new_name;
  68. -#ifndef HAVE_MKTEMP
  69. - char name[L_tmpnam];
  70. -#endif
  71. + size_t len;
  72. if (queue_file)
  73. {
  74. @@ -247,18 +249,13 @@ drop_msg ()
  75. tmpdir = getenv ("TMPDIR");
  76. if (tmpdir == NULL)
  77. tmpdir = "/tmp"; /* FIXME */
  78. -#ifdef HAVE_MKTEMP
  79. - sprintf (bug_file, "%s/gnatsXXXXXX", tmpdir);
  80. - mktemp (bug_file);
  81. -#else
  82. - tmpnam (name);
  83. - strcpy (bug_file, name);
  84. -#endif
  85. +
  86. + snprintf (bug_file, sizeof(bug_file), "%s/gnatsXXXXXX", tmpdir);
  87. - fd[1] = open (bug_file, O_WRONLY|O_CREAT, 0664);
  88. - if (fd[1] < 0)
  89. + if ((fd[1] = mkstemp (bug_file)) < 0)
  90. punt (1, "%s: can't open queue file %s for writing: %s\n",
  91. program_name, bug_file, strerror (errno));
  92. + fchmod (fd[1], 0644);
  93. while ((r = read (fd[0], buf, MAXBSIZE)) > 0)
  94. if (write (fd[1], buf, r) < 0)
  95. @@ -283,8 +280,9 @@ drop_msg ()
  96. errno = 0;
  97. base = basename (bug_file);
  98. - new_name = (char *) xmalloc (strlen (queue_dir) + 1 + strlen (bug_file) + 1);
  99. - sprintf (new_name, "%s/%s", queue_dir, base);
  100. + len = strlen (queue_dir) + 1 + strlen (bug_file) + 1;
  101. + new_name = (char *) xmalloc (len);
  102. + snprintf (new_name, len, "%s/%s", queue_dir, base);
  103. if (rename (bug_file, new_name) < 0)
  104. {
  105. if (errno != EXDEV)
  106. @@ -308,6 +306,7 @@ main (argc, argv)
  107. char **argv;
  108. {
  109. int optc;
  110. + size_t len;
  111. program_name = basename (argv[0]);
  112. @@ -372,10 +371,9 @@ main (argc, argv)
  113. program_name);
  114. exit (1);
  115. }
  116. - queue_dir = (char *) xmalloc (strlen (gnats_root)
  117. - + strlen ("/gnats-queue")
  118. - + 1 /* null char */);
  119. - sprintf (queue_dir, "%s/gnats-queue", gnats_root);
  120. + len = strlen (gnats_root) + strlen ("/gnats-queue") + 1 /* null char */;
  121. + queue_dir = (char *) xmalloc (len);
  122. + snprintf (queue_dir, len, "%s/gnats-queue", gnats_root);
  123. if (queue_msg)
  124. drop_msg ();