aboutsummaryrefslogblamecommitdiffstats
path: root/community/qpage/qpage.patch
blob: d998942d50e1d0f5d54e1145d72bff987a10135c (plain) (tree)






































































































































































































































                                                                                                                                          
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;