/* -*-c-*-
*
- * $Id: daemon.c,v 1.3 1997/08/07 09:49:39 mdw Exp $
+ * $Id: daemon.c,v 1.7 1997/09/17 10:23:23 mdw Exp $
*
* Running a `become' daemon
*
/*----- Revision history --------------------------------------------------*
*
* $Log: daemon.c,v $
- * Revision 1.3 1997/08/07 09:49:39 mdw
- * Extensive modifications to handle netgroups. Also sanitise user and group
- * names before adding them to the symbol table.
+ * Revision 1.7 1997/09/17 10:23:23 mdw
+ * Fix a typo. Port numbers are in network order now, so don't change them.
+ *
+ * Revision 1.6 1997/09/09 18:17:06 mdw
+ * Allow default port to be given as a service name or port number.
+ *
+ * Revision 1.5 1997/08/20 16:17:10 mdw
+ * More sensible restart routine: `_reinit' functions replaced by `_end' and
+ * `_init' functions.
+ *
+ * Revision 1.4 1997/08/07 10:00:37 mdw
+ * (Log entry for previous version is bogus.) Read netgroups database.
+ * Give up privileges permanently on startup.
*
* Revision 1.2 1997/08/04 10:24:21 mdw
* Sources placed under CVS control.
* look it up in /etc/services under whatever name I was started as.
*/
- if (daemon__port <= 0) {
+ if (daemon__port == 0) {
struct servent *se = getservbyname(quis(), "udp");
if (!se)
die("no idea which port to use");
- daemon__port = ntohs(se->s_port);
+ daemon__port = se->s_port;
}
/* --- Now set up a socket --- */
if ((s = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
die("couldn't create socket: %s", strerror(errno));
sin.sin_family = AF_INET;
- sin.sin_port = htons(daemon__port);
+ sin.sin_port = daemon__port;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
- if (bind(s, (struct sockaddr *)&sin, sizeof(sin)))
- die("couldn't bind socket to port: %s", strerror(errno));
+ if (bind(s, (struct sockaddr *)&sin, sizeof(sin))) {
+ die("couldn't bind socket to port %i: %s",
+ ntohs(daemon__port), strerror(errno));
+ }
}
/* --- Fork off into the sunset --- */
if (daemon__rescan || time(0) - when > 0) {
daemon__rescan = 0;
syslog(LOG_INFO, "rescanning configuration file");
- userdb_reinit();
+ name_end();
+ rule_end();
+ netg_end();
+ userdb_end();
+ userdb_init();
userdb_local();
userdb_yp();
- netg_reinit();
- rule_reinit();
- name_reinit();
+ netg_init();
+ rule_init();
+ name_init();
if (daemon__readConfig(cf))
syslog(LOG_ERR, "error reading configuration file");
when = time(0) + daemon__awakeEvery;