diff options
Diffstat (limited to 'testing/qpage/qpage.patch')
-rw-r--r-- | testing/qpage/qpage.patch | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/testing/qpage/qpage.patch b/testing/qpage/qpage.patch new file mode 100644 index 0000000000..d998942d50 --- /dev/null +++ b/testing/qpage/qpage.patch @@ -0,0 +1,231 @@ +diff -crB a/CHANGES b/CHANGES +*** a/CHANGES 1999-01-02 16:15:03.000000000 +1300 +--- b/CHANGES 2011-01-27 09:56:40.202300708 +1300 +*************** +*** 1,4 **** +--- 1,15 ---- ++ Changes to QuickPage from v3.3 to v3.3.1-unleash ++ ------------------------------------------------ ++ Patch by Michael Fincham <michael@unleash.co.nz> + ++ - The new "-b" option has been added to specify a bind address ++ for the qpage daemon. ++ ++ - The default user the daemon runs as is now "qpage" instead ++ of "nobody". ++ ++ - To be honest, the "-b" option doesn't sanitise input very well ++ so don't setuid root the qpage binary or anything dumb like that. + + Changes to QuickPage from v3.2 to v3.3 + --------------------------------------- +diff -crB a/qpage.c b/qpage.c +*** a/qpage.c 1999-05-09 09:47:23.000000000 +1200 +--- b/qpage.c 2011-01-21 14:50:55.995162759 +1300 +*************** +*** 17,22 **** +--- 17,23 ---- + static char sccsid[] = "@(#)qpage.c 3.36 07/26/98 tomiii@qpage.org"; + #endif + char *ConfigFile = NULL; ++ char *BindAddress = NULL; + int Debug = 0; + int Interactive = FALSE; + int Silent = FALSE; +*************** +*** 29,35 **** + do_version(void) + { + printf("\n"); +! printf("QuickPage v%s, Copyright 1995-98 by Thomas Dwyer III\n", + VERSION); + printf("\n"); + } +--- 30,36 ---- + do_version(void) + { + printf("\n"); +! printf("QuickPage v%s, Copyright 1995-98 by Thomas Dwyer III. Modified for Unleash by Michael Fincham <michael@unleash.co.nz>.\n", + VERSION); + printf("\n"); + } +*************** +*** 46,51 **** +--- 47,55 ---- + printf("\n"); + printf("Options:\n"); + printf(" -a [+]hhmm send the page at the specified time\n"); ++ #ifndef CLIENT_ONLY ++ printf(" -b address bind only to this address (default: 0.0.0.0)\n"); ++ #endif + printf(" -c coverage coverage area (service name) for pager\n"); + printf(" -C config use an alternate configuration file\n"); + printf(" -d debug mode\n"); +*************** +*** 339,345 **** + + (void)memset((char *)&p, 0, sizeof(p)); + +! while ((c = getopt(argc, argv, "a:c:C:df:hil:mp:P:q:Qs:t:v")) != -1) { + switch (c) { + case 'a': + case 't': +--- 343,349 ---- + + (void)memset((char *)&p, 0, sizeof(p)); + +! while ((c = getopt(argc, argv, "a:b:c:C:df:hil:mp:P:q:Qs:t:v")) != -1) { + switch (c) { + case 'a': + case 't': +*************** +*** 353,358 **** +--- 357,367 ---- + needpager = TRUE; + break; + ++ #ifndef CLIENT_ONLY ++ case 'b': ++ BindAddress = strdup(optarg); ++ break; ++ #endif + case 'c': + my_free(coverage); + coverage = strdup(optarg); +*************** +*** 503,509 **** + if (optind < argc) + port = atoi(argv[optind]); + +! (void)become_daemon(sleeptime, port); + + /* NOT REACHED */ + return(-1); +--- 512,518 ---- + if (optind < argc) + port = atoi(argv[optind]); + +! (void)become_daemon(sleeptime, port, BindAddress); + + /* NOT REACHED */ + return(-1); +diff -crB a/qpage.h b/qpage.h +*** a/qpage.h 1998-10-26 08:55:02.000000000 +1300 +--- b/qpage.h 2011-01-21 14:51:22.682302352 +1300 +*************** +*** 26,32 **** + #define fprintf (void)fprintf + #endif + +! #define VERSION "3.3" + #define COMMENTS_ANYWHERE + + #ifndef QPAGE_CONFIG +--- 26,32 ---- + #define fprintf (void)fprintf + #endif + +! #define VERSION "3.3.1-unleash" + #define COMMENTS_ANYWHERE + + #ifndef QPAGE_CONFIG +*************** +*** 51,57 **** + #endif + + #ifndef DAEMON_USER +! #define DAEMON_USER "nobody" + #endif + + #define SNPP_SVC_NAME "snpp" +--- 51,57 ---- + #endif + + #ifndef DAEMON_USER +! #define DAEMON_USER "qpage" + #endif + + #define SNPP_SVC_NAME "snpp" +*************** +*** 278,284 **** + extern void qpage_log(int pri, char *fmt, ...); + extern time_t snpptime(char *arg); + extern time_t parse_time(char *str); +! extern int become_daemon(int sleeptime, short port); + extern int submit_page(PAGE *p, char *server); + extern int lock_file(int fd, int mode, int block); + extern int lock_queue(void); +--- 278,284 ---- + extern void qpage_log(int pri, char *fmt, ...); + extern time_t snpptime(char *arg); + extern time_t parse_time(char *str); +! extern int become_daemon(int sleeptime, short port, char *BindAddress); + extern int submit_page(PAGE *p, char *server); + extern int lock_file(int fd, int mode, int block); + extern int lock_queue(void); +diff -crB a/qpage.man b/qpage.man +*** a/qpage.man 1999-05-09 10:07:31.000000000 +1200 +--- b/qpage.man 2011-01-27 09:51:44.894302942 +1300 +*************** +*** 34,39 **** +--- 34,42 ---- + ] [ + .BI \-C " config + ] ++ ] [ ++ .BI \-b " address ++ ] + .BI \-q " interval + .SH DESCRIPTION + .B QuickPage +*************** +*** 91,96 **** +--- 94,104 ---- + century. Otherwise assume the specified time is in the current + century. + .TP ++ .BI \-b ++ Specify an address for the qpage daemon to bind to. The default is ++ to bind to INETADDR_ANY and listen on all interfaces (the old ++ behaviour) ++ .TP + .BI \-c + Use a different coverage area or paging service. This option is + only useful if the recipient has more than one pager and/or more +diff -crB a/srvrsnpp.c b/srvrsnpp.c +*** a/srvrsnpp.c 1998-10-26 08:55:05.000000000 +1300 +--- b/srvrsnpp.c 2011-01-21 14:49:17.647300794 +1300 +*************** +*** 1156,1162 **** + ** -1 on error, otherwise never + */ + int +! become_daemon(int sleeptime, short port) + { + struct sockaddr_in addr; + struct servent *svc; +--- 1156,1162 ---- + ** -1 on error, otherwise never + */ + int +! become_daemon(int sleeptime, short port, char *BindAddress) + { + struct sockaddr_in addr; + struct servent *svc; +*************** +*** 1221,1227 **** + len = sizeof(on); + (void)setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&on, len); + +! addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_family = AF_INET; + addr.sin_port = port; + +--- 1221,1227 ---- + len = sizeof(on); + (void)setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&on, len); + +! addr.sin_addr.s_addr = BindAddress != NULL ? inet_addr(BindAddress) : INADDR_ANY; + addr.sin_family = AF_INET; + addr.sin_port = port; + |