minissdpd: NO_BACKGROUND_NO_PIDFILE option

fixes #468
This commit is contained in:
Thomas Bernard 2020-06-06 21:55:44 +02:00
parent 39ff47ad79
commit 4a1b41c1cb
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
3 changed files with 36 additions and 8 deletions

View File

@ -1,4 +1,7 @@
$Id: Changelog.txt,v 1.50 2019/02/10 13:45:24 nanard Exp $
$Id: Changelog.txt,v 1.51 2020/06/06 19:53:10 nanard Exp $
2020/06/06:
define NO_BACKGROUND_NO_PIDFILE for a systemd friendly mode
2018/12/18:
updateDevice() remove element from the list when realloc fails

View File

@ -1,7 +1,7 @@
/* $Id: config.h,v 1.10 2018/02/23 13:58:14 nanard Exp $ */
/* $Id: config.h,v 1.11 2020/06/06 19:53:10 nanard Exp $ */
/* MiniUPnP project
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
* (c) 2006-2018 Thomas Bernard
* http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
* (c) 2006-2020 Thomas Bernard
* This software is subject to the conditions detailed
* in the LICENCE file provided within the distribution */
#ifndef CONFIG_H_INCLUDED
@ -30,4 +30,8 @@
* and unicasted, we cannot bind to 239.255.255.250 neither */
/*#define SSDP_LISTEN_ON_SPECIFIC_ADDR*/
/* When NO_BACKGROUND_NO_PIDFILE is defined, minissdpd does not go to
* background and does not create any pidfile */
/*#define NO_BACKGROUND_NO_PIDFILE*/
#endif

View File

@ -1,7 +1,7 @@
/* $Id: minissdpd.c,v 1.53 2016/03/01 18:06:46 nanard Exp $ */
/* $Id: minissdpd.c,v 1.57 2020/06/06 19:53:10 nanard Exp $ */
/* vim: tabstop=4 shiftwidth=4 noexpandtab
* MiniUPnP project
* (c) 2007-2018 Thomas Bernard
* (c) 2007-2020 Thomas Bernard
* website : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
* This software is subject to the conditions detailed
* in the LICENCE file provided within the distribution */
@ -1224,7 +1224,9 @@ static void ssdpDiscover(int s, int ipv6, const char * search)
int main(int argc, char * * argv)
{
int ret = 0;
#ifndef NO_BACKGROUND_NO_PIDFILE
int pid;
#endif
struct sigaction sa;
char buf[1500];
ssize_t n;
@ -1245,7 +1247,9 @@ int main(int argc, char * * argv)
struct lan_addr_s * lan_addr;
int i;
const char * sockpath = "/var/run/minissdpd.sock";
#ifndef NO_BACKGROUND_NO_PIDFILE
const char * pidfilename = "/var/run/minissdpd.pid";
#endif
int debug_flag = 0;
#ifdef ENABLE_IPV6
int ipv6 = 0;
@ -1291,8 +1295,10 @@ int main(int argc, char * * argv)
}
} else if(0==strcmp(argv[i], "-s"))
sockpath = argv[++i];
#ifndef NO_BACKGROUND_NO_PIDFILE
else if(0==strcmp(argv[i], "-p"))
pidfilename = argv[++i];
#endif
else if(0==strcmp(argv[i], "-t"))
ttl = (unsigned char)atoi(argv[++i]);
else if(0==strcmp(argv[i], "-f"))
@ -1308,7 +1314,11 @@ int main(int argc, char * * argv)
#ifdef ENABLE_IPV6
"[-6] "
#endif /* ENABLE_IPV6 */
"[-s socket] [-p pidfile] [-t TTL] "
"[-s socket] "
#ifndef NO_BACKGROUND_NO_PIDFILE
"[-p pidfile] "
#endif
"[-t TTL] "
"[-f device] "
"-i <interface> [-i <interface2>] ...\n",
argv[0]);
@ -1317,8 +1327,13 @@ int main(int argc, char * * argv)
" 192.168.1.42/255.255.255.0, or an interface name such as eth0.\n");
fprintf(stderr,
"\n By default, socket will be open as %s\n"
#ifndef NO_BACKGROUND_NO_PIDFILE
" and pid written to file %s\n",
sockpath, pidfilename);
sockpath, pidfilename
#else
,sockpath
#endif
);
return 1;
}
@ -1329,11 +1344,13 @@ int main(int argc, char * * argv)
if(!debug_flag) /* speed things up and ignore LOG_INFO and LOG_DEBUG */
setlogmask(LOG_UPTO(LOG_NOTICE));
#ifndef NO_BACKGROUND_NO_PIDFILE
if(checkforrunning(pidfilename) < 0)
{
syslog(LOG_ERR, "MiniSSDPd is already running. EXITING");
return 1;
}
#endif
upnp_bootid = (unsigned int)time(NULL);
@ -1414,6 +1431,7 @@ int main(int argc, char * * argv)
}
#endif
#ifndef NO_BACKGROUND_NO_PIDFILE
/* daemonize or in any case get pid ! */
if(debug_flag)
pid = getpid();
@ -1428,6 +1446,7 @@ int main(int argc, char * * argv)
}
writepidfile(pidfilename, pid);
#endif
/* send M-SEARCH ssdp:all Requests */
if(s_ssdp >= 0)
@ -1639,8 +1658,10 @@ quit:
free(serv->location);
free(serv);
}
#ifndef NO_BACKGROUND_NO_PIDFILE
if(unlink(pidfilename) < 0)
syslog(LOG_ERR, "unlink(%s): %m", pidfilename);
#endif
closelog();
return ret;
}