Portable build framework for OpenNTPD
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
3.6 KiB

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
  1. From f284fcbe288ed0a227a44cdd715b1c5668d4b112 Mon Sep 17 00:00:00 2001
  2. From: Brent Cook <busterb@gmail.com>
  3. Date: Wed, 31 Dec 2014 08:26:41 -0600
  4. Subject: [PATCH 08/11] add -p option to create a pid file
  5. This is used in both the Gentoo and Debian ports.
  6. Origin: https://bugs.gentoo.org/show_bug.cgi?id=493082
  7. ---
  8. src/usr.sbin/ntpd/ntpd.8 | 4 ++++
  9. src/usr.sbin/ntpd/ntpd.c | 33 ++++++++++++++++++++++++++++-----
  10. src/usr.sbin/ntpd/ntpd.h | 1 +
  11. 3 files changed, 33 insertions(+), 5 deletions(-)
  12. diff --git a/src/usr.sbin/ntpd/ntpd.8 b/src/usr.sbin/ntpd/ntpd.8
  13. index 18b12e8..9eb1fee 100644
  14. --- a/src/usr.sbin/ntpd/ntpd.8
  15. +++ b/src/usr.sbin/ntpd/ntpd.8
  16. @@ -25,6 +25,7 @@
  17. .Bk -words
  18. .Op Fl dnSsv
  19. .Op Fl f Ar file
  20. +.Op Fl p Ar file
  21. .Ek
  22. .Sh DESCRIPTION
  23. The
  24. @@ -56,6 +57,9 @@ instead of the default
  25. .It Fl n
  26. Configtest mode.
  27. Only check the configuration file for validity.
  28. +.It Fl p Ar file
  29. +Write pid to
  30. +.Ar file
  31. .It Fl S
  32. Do not set the time immediately at startup.
  33. This is the default.
  34. diff --git a/src/usr.sbin/ntpd/ntpd.c b/src/usr.sbin/ntpd/ntpd.c
  35. index e2c189c..f5f0dbb 100644
  36. --- a/src/usr.sbin/ntpd/ntpd.c
  37. +++ b/src/usr.sbin/ntpd/ntpd.c
  38. @@ -83,6 +83,18 @@ sighdlr(int sig)
  39. }
  40. }
  41. +void
  42. +writepid(struct ntpd_conf *lconf)
  43. +{
  44. + if (lconf->pid_file != NULL) {
  45. + FILE *f = fopen(lconf->pid_file, "w");
  46. + if (f == NULL)
  47. + fatal("couldn't open pid file");
  48. + fprintf(f, "%ld\n", (long) getpid());
  49. + fclose(f);
  50. + }
  51. +}
  52. +
  53. __dead void
  54. usage(void)
  55. {
  56. @@ -91,7 +103,7 @@ usage(void)
  57. if (strcmp(__progname, "ntpctl") == 0)
  58. fprintf(stderr, "usage: ntpctl [-s all | peers | Sensors | status]\n");
  59. else
  60. - fprintf(stderr, "usage: %s [-dnSsv] [-f file]\n",
  61. + fprintf(stderr, "usage: %s [-dnSsv] [-f file] [-p file]\n",
  62. __progname);
  63. exit(1);
  64. }
  65. @@ -122,7 +134,7 @@ main(int argc, char *argv[])
  66. log_init(1); /* log to stderr until daemonized */
  67. - while ((ch = getopt(argc, argv, "df:nsSv")) != -1) {
  68. + while ((ch = getopt(argc, argv, "df:np:sSv")) != -1) {
  69. switch (ch) {
  70. case 'd':
  71. lconf.debug = 1;
  72. @@ -134,6 +146,9 @@ main(int argc, char *argv[])
  73. case 'n':
  74. lconf.noaction = 1;
  75. break;
  76. + case 'p':
  77. + lconf.pid_file = optarg;
  78. + break;
  79. case 's':
  80. lconf.settime = 1;
  81. break;
  82. @@ -174,9 +189,11 @@ main(int argc, char *argv[])
  83. reset_adjtime();
  84. if (!lconf.settime) {
  85. log_init(lconf.debug);
  86. - if (!lconf.debug)
  87. + if (!lconf.debug) {
  88. if (daemon(1, 0))
  89. fatal("daemon");
  90. + writepid(&lconf);
  91. + }
  92. } else
  93. timeout = SETTIME_TIMEOUT * 1000;
  94. @@ -223,9 +240,11 @@ main(int argc, char *argv[])
  95. log_init(lconf.debug);
  96. log_warnx("no reply received in time, skipping initial "
  97. "time setting");
  98. - if (!lconf.debug)
  99. + if (!lconf.debug) {
  100. if (daemon(1, 0))
  101. fatal("daemon");
  102. + writepid(&lconf);
  103. + }
  104. }
  105. if (nfds > 0 && (pfd[PFD_PIPE].revents & POLLOUT))
  106. @@ -264,6 +283,8 @@ main(int argc, char *argv[])
  107. msgbuf_clear(&ibuf->w);
  108. free(ibuf);
  109. log_info("Terminating");
  110. + if (lconf.pid_file != NULL)
  111. + unlink(lconf.pid_file);
  112. return (0);
  113. }
  114. @@ -339,9 +360,11 @@ dispatch_imsg(struct ntpd_conf *lconf)
  115. memcpy(&d, imsg.data, sizeof(d));
  116. ntpd_settime(d);
  117. /* daemonize now */
  118. - if (!lconf->debug)
  119. + if (!lconf->debug) {
  120. if (daemon(1, 0))
  121. fatal("daemon");
  122. + writepid(lconf);
  123. + }
  124. lconf->settime = 0;
  125. timeout = INFTIM;
  126. break;
  127. diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h
  128. index 962e1cc..73d7fe1 100644
  129. --- a/src/usr.sbin/ntpd/ntpd.h
  130. +++ b/src/usr.sbin/ntpd/ntpd.h
  131. @@ -206,6 +206,7 @@ struct ntpd_conf {
  132. u_int8_t debug;
  133. u_int8_t noaction;
  134. u_int8_t filters;
  135. + char *pid_file;
  136. };
  137. struct ctl_show_status {
  138. --
  139. 1.9.1