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

9 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 5e7e9b21cbc8ed49aed22e67cf6315477a76db4d 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/12] 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 af56fb9..b11b5ca 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. @@ -59,6 +60,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 045bdd4..c7935bf 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. @@ -92,7 +104,7 @@ usage(void)
  57. fprintf(stderr,
  58. "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. @@ -123,7 +135,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. @@ -135,6 +147,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. @@ -175,9 +190,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. @@ -224,9 +241,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. @@ -265,6 +284,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. @@ -337,9 +358,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 5172c45..f31d9f8 100644
  129. --- a/src/usr.sbin/ntpd/ntpd.h
  130. +++ b/src/usr.sbin/ntpd/ntpd.h
  131. @@ -239,6 +239,7 @@ struct ntpd_conf {
  132. u_int constraint_errors;
  133. u_int8_t *ca;
  134. size_t ca_len;
  135. + char *pid_file;
  136. };
  137. struct ctl_show_status {
  138. --
  139. 2.4.5