From: Bleep Date: Thu, 30 Mar 2000 08:07:48 +0000 (+0000) Subject: Author: Bleep X-Git-Url: http://git.pk910.de/?a=commitdiff_plain;h=56ac07961060874ee62cc83a4af85be97efd6c27;p=ircu2.10.12-pk.git Author: Bleep Log message: Clean process initialization code a bit. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@104 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index 4d42953..cbc3c45 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2000-03-29 Thomas Helvey + * ircd/ircd.c: refactor server initialization a bit, use + getopt for parsing command line, refactor init_sys, main, + and other bits. + + * ircd/s_bsd.c: add functions for initialization to clean + up logic a bit and remove duplicated code. + + * include/ircd.h: add struct for server process related + variables. + 2000-03-29 Kevin L. Mitchell * ircd/channel.c: initial definition of mode_parse(); flags to @@ -150,7 +161,7 @@ # # ChangeLog for ircu2.10.11 # -# $Id: ChangeLog,v 1.40 2000-03-30 04:15:15 kev Exp $ +# $Id: ChangeLog,v 1.41 2000-03-30 08:07:48 bleep Exp $ # # Insert new changes at beginning of the change list. # diff --git a/include/ircd.h b/include/ircd.h index 950c073..cf649b3 100644 --- a/include/ircd.h +++ b/include/ircd.h @@ -15,6 +15,19 @@ #include /* size_t, time_t */ #endif +struct Daemon +{ + int argc; + char** argv; + pid_t pid; + uid_t uid; + uid_t euid; + unsigned int bootopt; + int running; + const char* server_bin; + const char* server_root; + const char* server_log; +}; /* * Macros @@ -30,16 +43,9 @@ #define MAJOR_PROTOCOL "10" #define BASE_VERSION "u2.10" -/* Flags for bootup options (command line flags) */ - -#define BOOT_QUICK 1 -#define BOOT_DEBUG 2 -#define BOOT_TTY 4 - /* * Proto types */ - extern void server_die(const char* message); extern void server_restart(const char* message); @@ -47,7 +53,6 @@ extern struct Client me; extern time_t CurrentTime; extern struct Client* GlobalClientList; extern time_t TSoffset; -extern unsigned int bootopt; extern time_t nextdnscheck; extern time_t nextconnect; extern int GlobalRehashFlag; /* 1 if SIGHUP is received */ diff --git a/include/s_bsd.h b/include/s_bsd.h index 581df92..59dcc5f 100644 --- a/include/s_bsd.h +++ b/include/s_bsd.h @@ -79,10 +79,11 @@ extern int connect_server(struct ConfItem* aconf, struct Client* by, struct DNSReply* reply); extern void release_dns_reply(struct Client* cptr); extern int net_close_unregistered_connections(struct Client* source); -extern void init_sys(void); extern void close_connection(struct Client *cptr); extern void add_connection(struct Listener* listener, int fd); extern int read_message(time_t delay); -extern int init_server_identity(void); +extern int init_server_identity(void); +extern void close_connections(int close_stderr); +extern int init_connection_limits(void); #endif /* INCLUDED_s_bsd_h */ diff --git a/include/s_conf.h b/include/s_conf.h index 7469bce..118ce0e 100644 --- a/include/s_conf.h +++ b/include/s_conf.h @@ -132,7 +132,7 @@ extern enum AuthorizationCheckResult conf_check_client(struct Client *cptr); extern int conf_check_server(struct Client *cptr); extern struct ConfItem* find_conf_name(const char* name, int statmask); extern int rehash(struct Client *cptr, int sig); -extern int initconf(int opt); +extern int conf_init(void); extern void read_tlines(void); extern int find_kill(struct Client *cptr); extern int find_restrict(struct Client *cptr); diff --git a/include/s_debug.h b/include/s_debug.h index 5bcc69b..8eefe1f 100644 --- a/include/s_debug.h +++ b/include/s_debug.h @@ -56,7 +56,7 @@ extern void send_usage(struct Client *cptr, char *nick); #endif /* !DEBUGMODE */ -extern void open_debugfile(void); +extern void debug_init(int use_tty); extern void count_memory(struct Client *cptr, char *nick); extern char serveropts[]; diff --git a/ircd/ircd.c b/ircd/ircd.c index 3c1ae33..64418cf 100644 --- a/ircd/ircd.c +++ b/ircd/ircd.c @@ -64,6 +64,11 @@ extern void init_counters(void); +enum { + BOOT_DEBUG = 1, + BOOT_TTY = 2 +}; + struct Client me; /* That's me */ struct Client* GlobalClientList = &me; /* Pointer to beginning of Client list */ time_t TSoffset = 0; /* Offset of timestamps to system clock */ @@ -71,10 +76,10 @@ int GlobalRehashFlag = 0; /* do a rehash if set */ int GlobalRestartFlag = 0; /* do a restart if set */ time_t CurrentTime; /* Updated every time we leave select() */ -char **myargv; +static struct Daemon thisServer = { 0 }; /* server process info */ + char *configfile = CPATH; /* Server configuration file */ int debuglevel = -1; /* Server debug level */ -unsigned int bootopt = 0; /* Server boot option flags */ char *debugmode = ""; /* -"- -"- -"- */ static char *dpath = DPATH; @@ -89,29 +94,20 @@ extern etext(void); static void server_reboot(const char* message) { - int i; - sendto_ops("Restarting server: %s", message); Debug((DEBUG_NOTICE, "Restarting server...")); flush_connections(0); - /* - * fd 0 must be 'preserved' if either the -d or -i options have - * been passed to us before restarting. - */ - close_log(); - for (i = 3; i < MAXCONNECTIONS; i++) - close(i); - if (!(bootopt & (BOOT_TTY | BOOT_DEBUG))) - close(2); - close(1); - close(0); + close_log(); + close_connections(!(thisServer.bootopt & (BOOT_TTY | BOOT_DEBUG))); - execv(SPATH, myargv); + execv(SPATH, thisServer.argv); - /* Have to reopen since it has been closed above */ - open_log(myargv[0]); - ircd_log(L_CRIT, "execv(%s,%s) failed: %m\n", SPATH, myargv[0]); + /* + * Have to reopen since it has been closed above + */ + open_log(*thisServer.argv); + ircd_log(L_CRIT, "execv(%s,%s) failed: %m\n", SPATH, *thisServer.argv); Debug((DEBUG_FATAL, "Couldn't restart server \"%s\": %s", SPATH, (strerror(errno)) ? strerror(errno) : "")); @@ -123,7 +119,8 @@ void server_die(const char* message) ircd_log(L_CRIT, "Server terminating: %s", message); sendto_ops("Server terminating: %s", message); flush_connections(0); - exit(2); + close_connections(1); + thisServer.running = 0; } void server_restart(const char* message) @@ -359,30 +356,192 @@ ping_timeout: * This is called when the commandline is not acceptable. * Give error message and exit without starting anything. */ -static int bad_command(void) +static void print_usage(void) { - printf("Usage: ircd %s[-h servername] [-x loglevel] [-t]\n", -#ifdef CMDLINE_CONFIG - "[-f config] " -#else - "" + printf("Usage: ircd [-f config] [-h servername] [-x loglevel] [-ntv]\n"); + printf("Server not started\n"); +} + + +/* + * for getopt + * ZZZ this is going to need confirmation on other OS's + * + * #include + * Solaris has getopt.h, you should too... hopefully + * BSD declares them in stdlib.h + * extern char *optarg; + * + * for FreeBSD the following are defined: + * + * extern char *optarg; + * extern int optind; + * extern in optopt; + * extern int opterr; + * extern in optreset; + * + * + * All command line parameters have the syntax "-f string" or "-fstring" + * OPTIONS: + * -d filename - specify d:line file + * -f filename - specify config file + * -h hostname - specify server name + * -k filename - specify k:line file (hybrid) + * -l filename - specify log file + * -n - do not fork, run in foreground + * -t - do not fork send debugging info to tty + * -v - print version and exit + * -x - set debug level, if compiled for debug logging + */ +static void parse_command_line(int argc, char** argv) +{ + const char* options = "d:f:h:ntvx:"; + int opt; + + if (thisServer.euid != thisServer.uid) + setuid(thisServer.uid); + + while ((opt = getopt(argc, argv, options)) != EOF) { + switch (opt) { + case 'd': + if (optarg) + dpath = optarg; + break; + case 'f': + if (optarg) + configfile = optarg; + break; + case 'h': + if (optarg) + ircd_strncpy(me.name, optarg, HOSTLEN); + break; + case 'n': + case 't': + thisServer.bootopt |= BOOT_TTY; + break; + case 'v': + printf("ircd %s\n", version); + exit(0); + case 'x': + if (optarg) { + debuglevel = atoi(optarg); + if (debuglevel < 0) + debuglevel = 0; + debugmode = optarg; + thisServer.bootopt |= BOOT_DEBUG; + } + break; + default: + print_usage(); + exit(1); + } + } +} + +/* + * daemon_init + */ +static void daemon_init(int no_fork) +{ + if (!init_connection_limits()) + exit(2); + + close_connections(!(thisServer.bootopt & (BOOT_DEBUG | BOOT_TTY))); + if (no_fork) + return; + + if (fork()) + exit(0); +#ifdef TIOCNOTTY + { + int fd; + if ((fd = open("/dev/tty", O_RDWR)) > -1) { + ioctl(fd, TIOCNOTTY, 0); + close(fd); + } + } #endif - ); - printf("Server not started\n\n"); - return (-1); + setsid(); } -int main(int argc, char *argv[]) + +static void event_loop(void) { - uid_t uid; - uid_t euid; time_t delay = 0; + + while (thisServer.running) { + /* + * We only want to connect if a connection is due, + * not every time through. Note, if there are no + * active C lines, this call to Tryconnections is + * made once only; it will return 0. - avalon + */ + if (nextconnect && CurrentTime >= nextconnect) + nextconnect = try_connections(); + /* + * DNS checks. One to timeout queries, one for cache expiries. + */ + nextdnscheck = timeout_resolver(CurrentTime); + /* + * Take the smaller of the two 'timed' event times as + * the time of next event (stops us being late :) - avalon + * WARNING - nextconnect can return 0! + */ + if (nextconnect) + delay = IRCD_MIN(nextping, nextconnect); + else + delay = nextping; + delay = IRCD_MIN(nextdnscheck, delay); + delay -= CurrentTime; + /* + * Adjust delay to something reasonable [ad hoc values] + * (one might think something more clever here... --msa) + * We don't really need to check that often and as long + * as we don't delay too long, everything should be ok. + * waiting too long can cause things to timeout... + * i.e. PINGS -> a disconnection :( + * - avalon + */ + if (delay < 1) + delay = 1; + else + delay = IRCD_MIN(delay, TIMESEC); + read_message(delay); + + Debug((DEBUG_DEBUG, "Got message(s)")); + + /* + * ...perhaps should not do these loops every time, + * but only if there is some chance of something + * happening (but, note that conf->hold times may + * be changed elsewhere--so precomputed next event + * time might be too far away... (similarly with + * ping times) --msa + */ + if (CurrentTime >= nextping) + nextping = check_pings(); + + /* + * timeout pending queries that haven't been responded to + */ + timeout_auth_queries(CurrentTime); + + if (GlobalRehashFlag) { + rehash(&me, 1); + GlobalRehashFlag = 0; + } + if (GlobalRestartFlag) + server_restart("caught signal: SIGINT"); + } +} + +int main(int argc, char *argv[]) +{ #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_CORE) struct rlimit corelim; #endif CurrentTime = time(NULL); - /* * sanity check */ @@ -390,9 +549,10 @@ int main(int argc, char *argv[]) fprintf(stderr, "%s: MAXCONNECTIONS insane: %d\n", *argv, MAXCONNECTIONS); return 2; } - - uid = getuid(); - euid = geteuid(); + thisServer.argc = argc; + thisServer.argv = argv; + thisServer.uid = getuid(); + thisServer.euid = geteuid(); #ifdef PROFIL monstartup(0, etext); moncontrol(1); @@ -400,148 +560,43 @@ int main(int argc, char *argv[]) #endif #ifdef CHROOTDIR - if (chdir(DPATH)) - { - fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", DPATH, (strerror(errno)) ? strerror(errno) : ""); + if (chdir(DPATH)) { + fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", DPATH, strerror(errno)); exit(2); } - if (chroot(DPATH)) - { - fprintf(stderr, "Fail: Cannot chroot(%s): %s\n", DPATH, (strerror(errno)) ? strerror(errno) : ""); + if (chroot(DPATH)) { + fprintf(stderr, "Fail: Cannot chroot(%s): %s\n", DPATH, strerror(errno)); exit(5); } dpath = "/"; #endif /*CHROOTDIR */ - myargv = argv; umask(077); /* better safe than sorry --SRB */ memset(&me, 0, sizeof(me)); me.fd = -1; -#if 0 -#ifdef VIRTUAL_HOST - memset(&vserv, 0, sizeof(vserv)); -#endif -#endif - setup_signals(); initload(); #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_CORE) if (getrlimit(RLIMIT_CORE, &corelim)) { - fprintf(stderr, "Read of rlimit core size failed: %s\n", (strerror(errno) ? strerror(errno) : ""); + fprintf(stderr, "Read of rlimit core size failed: %s\n", strerror(errno)); corelim.rlim_max = RLIM_INFINITY; /* Try to recover */ } corelim.rlim_cur = corelim.rlim_max; if (setrlimit(RLIMIT_CORE, &corelim)) - fprintf(stderr, "Setting rlimit core size failed: %s\n", (strerror(errno) ? strerror(errno) : ""); -#endif - - /* - * All command line parameters have the syntax "-fstring" - * or "-f string" (e.g. the space is optional). String may - * be empty. Flag characters cannot be concatenated (like - * "-fxyz"), it would conflict with the form "-fstring". - */ - while (--argc > 0 && (*++argv)[0] == '-') - { - char *p = argv[0] + 1; - int flag = *p++; - - if (flag == '\0' || *p == '\0') - { - if (argc > 1 && argv[1][0] != '-') - { - p = *++argv; - argc -= 1; - } - else - p = ""; - } - - switch (flag) - { - case 'q': - bootopt |= BOOT_QUICK; - break; - case 'd': - if (euid != uid) - setuid((uid_t) uid); - dpath = p; - break; -#ifdef CMDLINE_CONFIG - case 'f': - if (euid != uid) - setuid((uid_t) uid); - configfile = p; - break; -#endif - case 'h': - ircd_strncpy(me.name, p, HOSTLEN); - break; - case 't': - if (euid != uid) - setuid((uid_t) uid); - bootopt |= BOOT_TTY; - break; - case 'v': - printf("ircd %s\n", version); - exit(0); -#if 0 -#ifdef VIRTUAL_HOST - case 'w': - { - struct hostent *hep; - if (!(hep = gethostbyname(p))) - { - fprintf(stderr, "%s: Error creating virtual host \"%s\": %d", - argv[0], p, h_errno); - return 2; - } - if (hep->h_addrtype == AF_INET && hep->h_addr_list[0] && - !hep->h_addr_list[1]) - { - memcpy(&vserv.sin_addr, hep->h_addr_list[0], sizeof(struct in_addr)); - vserv.sin_family = AF_INET; - } - else - { - fprintf(stderr, "%s: Error creating virtual host \"%s\": " - "Use -w \n", argv[0], p); - return 2; - } - break; - } + fprintf(stderr, "Setting rlimit core size failed: %s\n", strerror(errno)); #endif -#endif - case 'x': -#ifdef DEBUGMODE - if (euid != uid) - setuid((uid_t) uid); - debuglevel = atoi(p); - debugmode = *p ? p : "0"; - bootopt |= BOOT_DEBUG; - break; -#else - fprintf(stderr, "%s: DEBUGMODE must be defined for -x y\n", myargv[0]); - exit(0); -#endif - default: - bad_command(); - break; - } - } + parse_command_line(argc, argv); - if (chdir(dpath)) - { - fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", dpath, (strerror(errno)) ? strerror(errno) : ""); + if (chdir(dpath)) { + fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", dpath, strerror(errno)); exit(2); } #ifndef IRC_UID - if ((uid != euid) && !euid) - { + if ((thisServer.uid != thisServer.euid) && !thisServer.euid) { fprintf(stderr, "ERROR: do not run ircd setuid root. Make it setuid a normal user.\n"); exit(2); @@ -549,14 +604,12 @@ int main(int argc, char *argv[]) #endif #if !defined(CHROOTDIR) || (defined(IRC_UID) && defined(IRC_GID)) - if (euid != uid) - { - setuid(uid); - setuid(euid); + if (thisServer.euid != thisServer.uid) { + setuid(thisServer.uid); + setuid(thisServer.euid); } - if (0 == getuid()) - { + if (0 == getuid()) { #if defined(IRC_UID) && defined(IRC_GID) /* run as a specified user */ @@ -573,9 +626,6 @@ int main(int argc, char *argv[]) } #endif /*CHROOTDIR/UID/GID */ - if (argc > 0) - return bad_command(); /* This should exit out */ - /* Sanity checks */ { char c; @@ -605,15 +655,12 @@ int main(int argc, char *argv[]) } } } - if (c) - { - fprintf(stderr, "Check on %cPATH (%s) failed: %s\n", - c, path, (strerror(errno)) ? strerror(errno) : ""); + if (c) { + fprintf(stderr, "Check on %cPATH (%s) failed: %s\n", c, path, strerror(errno)); fprintf(stderr, "Please create file and/or rerun `make config' and recompile to correct this.\n"); #ifdef CHROOTDIR - fprintf(stderr, - "Keep in mind that all paths are relative to CHROOTDIR.\n"); + fprintf(stderr, "Keep in mind that all paths are relative to CHROOTDIR.\n"); #endif exit(2); } @@ -625,15 +672,16 @@ int main(int argc, char *argv[]) initwhowas(); initmsgtree(); initstats(); - open_debugfile(); - init_sys(); - set_nomem_handler(outofmemory); - me.fd = -1; + debug_init(thisServer.bootopt & BOOT_TTY); + daemon_init(thisServer.bootopt & BOOT_TTY); - open_log(myargv[0]); + set_nomem_handler(outofmemory); + init_resolver(); + + open_log(*argv); - if (initconf(bootopt) == -1) { + if (!conf_init()) { Debug((DEBUG_FATAL, "Failed in reading configuration file %s", configfile)); printf("Couldn't open configuration file %s\n", configfile); exit(2); @@ -671,70 +719,10 @@ int main(int argc, char *argv[]) Debug((DEBUG_NOTICE, "Server ready...")); ircd_log(L_NOTICE, "Server Ready"); + thisServer.running = 1; - for (;;) - { - /* - * We only want to connect if a connection is due, - * not every time through. Note, if there are no - * active C lines, this call to Tryconnections is - * made once only; it will return 0. - avalon - */ - if (nextconnect && CurrentTime >= nextconnect) - nextconnect = try_connections(); - /* - * DNS checks. One to timeout queries, one for cache expiries. - */ - nextdnscheck = timeout_resolver(CurrentTime); - /* - * Take the smaller of the two 'timed' event times as - * the time of next event (stops us being late :) - avalon - * WARNING - nextconnect can return 0! - */ - if (nextconnect) - delay = IRCD_MIN(nextping, nextconnect); - else - delay = nextping; - delay = IRCD_MIN(nextdnscheck, delay); - delay -= CurrentTime; - /* - * Adjust delay to something reasonable [ad hoc values] - * (one might think something more clever here... --msa) - * We don't really need to check that often and as long - * as we don't delay too long, everything should be ok. - * waiting too long can cause things to timeout... - * i.e. PINGS -> a disconnection :( - * - avalon - */ - if (delay < 1) - delay = 1; - else - delay = IRCD_MIN(delay, TIMESEC); - read_message(delay); - - Debug((DEBUG_DEBUG, "Got message(s)")); + event_loop(); + return 0; +} - /* - * ...perhaps should not do these loops every time, - * but only if there is some chance of something - * happening (but, note that conf->hold times may - * be changed elsewhere--so precomputed next event - * time might be too far away... (similarly with - * ping times) --msa - */ - if (CurrentTime >= nextping) - nextping = check_pings(); - - /* - * timeout pending queries that haven't been responded to - */ - timeout_auth_queries(CurrentTime); - if (GlobalRehashFlag) { - rehash(&me, 1); - GlobalRehashFlag = 0; - } - if (GlobalRestartFlag) - server_restart("caught signal: SIGINT"); - } -} diff --git a/ircd/s_bsd.c b/ircd/s_bsd.c index 824eca0..31fdbaa 100644 --- a/ircd/s_bsd.c +++ b/ircd/s_bsd.c @@ -78,7 +78,6 @@ struct Client* LocalClientArray[MAXCONNECTIONS]; int HighestFd = -1; struct sockaddr_in VirtualHost; static char readbuf[SERVER_TCP_WINDOW]; -static int running_in_background; /* * report_error text constants @@ -153,7 +152,7 @@ void report_error(const char* text, const char* who, int err) if (!errmsg) errmsg = "Unknown error"; - if (!who) + if (EmptyString(who)) who = "unknown"; if (last_notice + 20 < CurrentTime) { @@ -163,13 +162,7 @@ void report_error(const char* text, const char* who, int err) sendto_ops(text, who, errmsg); last_notice = CurrentTime; } - ircd_log(L_ERROR, text, who, errmsg); - - if (!running_in_background) { - fprintf(stderr, text, who, errmsg); - fprintf(stderr, "\n"); - } errno = errtmp; } @@ -192,6 +185,40 @@ static void connect_dns_callback(void* vptr, struct DNSReply* reply) sendto_ops("Connect to %s failed: host lookup", aconf->name); } +/* + * close_connections - closes all connections + * close stderr if specified + */ +void close_connections(int close_stderr) +{ + int i; + close(0); + close(1); + if (close_stderr) + close(2); + for (i = 3; i < MAXCONNECTIONS; ++i) + close(i); +} + +/* + * init_connection_limits - initialize process fd limit to + * MAXCONNECTIONS + */ +int init_connection_limits(void) +{ + int limit = os_set_fdlimit(MAXCONNECTIONS); + if (0 == limit) + return 1; + if (limit < 0) { + fprintf(stderr, "error setting max fd's to %d\n", limit); + } + else if (limit > 0) { + fprintf(stderr, "ircd fd table too big\nHard Limit: %d IRC max: %d\n", + limit, MAXCONNECTIONS); + fprintf(stderr, "set MAXCONNECTIONS to a smaller value"); + } + return 0; +} /* * connect_inet - set up address and port and make a connection @@ -329,55 +356,6 @@ unsigned int deliver_it(struct Client *cptr, const char *str, unsigned int len) return bytes_written; } -/* - * init_sys - */ -void init_sys(void) -{ - int fd; - int limit = os_set_fdlimit(MAXCONNECTIONS); - if (limit < 0) { - fprintf(stderr, "error setting max fd's to %d\n", limit); - exit(2); - } - else if (limit > 0) { - fprintf(stderr, "ircd fd table too big\nHard Limit: %d IRC max: %d\n", - limit, MAXCONNECTIONS); - fprintf(stderr, "set MAXCONNECTIONS to a smaller value"); - exit(2); - } - - for (fd = 3; fd < MAXCONNECTIONS; ++fd) - { - close(fd); - LocalClientArray[fd] = NULL; - } - LocalClientArray[2] = 0; - LocalClientArray[1] = 0; - LocalClientArray[0] = 0; - close(1); - close(0); - - if (bootopt & BOOT_TTY) { - /* debugging is going to a tty */ - init_resolver(); - return; - } - if (!(bootopt & BOOT_DEBUG)) - close(2); - - if (fork()) - exit(0); - running_in_background = 1; -#ifdef TIOCNOTTY - if ((fd = open("/dev/tty", O_RDWR)) > -1) { - ioctl(fd, TIOCNOTTY, 0); - close(fd); - } -#endif - setsid(); - init_resolver(); -} void release_dns_reply(struct Client* cptr) { diff --git a/ircd/s_conf.c b/ircd/s_conf.c index a512dd7..ab575d3 100644 --- a/ircd/s_conf.c +++ b/ircd/s_conf.c @@ -942,8 +942,8 @@ int rehash(struct Client *cptr, int sig) mark_listeners_closing(); - if (initconf(0) == -1) /* This calls check_class(), */ - check_class(); /* unless it fails */ + if (!conf_init()) /* This calls check_class(), */ + check_class(); /* unless it fails */ /* * make sure that the server listener is re-added so it doesn't get @@ -1005,18 +1005,18 @@ int rehash(struct Client *cptr, int sig) } /* - * initconf + * conf_init * * Read configuration file. * - * returns -1, if file cannot be opened - * 0, if file opened + * returns 0, if file cannot be opened + * 1, if file read */ #define MAXCONFLINKS 150 -int initconf(int opt) +int conf_init(void) { static char quotes[9][2] = { {'b', '\b'}, @@ -1035,9 +1035,9 @@ int initconf(int opt) int ccount = 0; struct ConfItem *aconf = 0; - Debug((DEBUG_DEBUG, "initconf(): ircd.conf = %s", configfile)); + Debug((DEBUG_DEBUG, "conf_init: ircd.conf = %s", configfile)); if (0 == (file = fbopen(configfile, "r"))) { - return -1; + return 0; } while (fbgets(line, sizeof(line) - 1, file)) { if ((tmp = strchr(line, '\n'))) @@ -1259,8 +1259,7 @@ int initconf(int opt) if (aconf->status & CONF_SERVER) { if (EmptyString(aconf->passwd)) continue; - else if (!(opt & BOOT_QUICK)) - lookup_confhost(aconf); + lookup_confhost(aconf); } /* Create expression tree from connect rule... @@ -1316,7 +1315,7 @@ int initconf(int opt) fbclose(file); check_class(); nextping = nextconnect = CurrentTime; - return 0; + return 1; } /* read_tlines diff --git a/ircd/s_debug.c b/ircd/s_debug.c index d1d66a8..1c21ebc 100644 --- a/ircd/s_debug.c +++ b/ircd/s_debug.c @@ -176,7 +176,7 @@ char serveropts[] = { /* - * open_debugfile + * debug_init * * If the -t option is not given on the command line when the server is * started, all debugging output is sent to the file set by LPATH in config.h @@ -185,12 +185,12 @@ char serveropts[] = { * set from the command line by -x, use /dev/null as the dummy logfile as long * as DEBUGMODE has been defined, else dont waste the fd. */ -void open_debugfile(void) +void debug_init(int use_tty) { #ifdef DEBUGMODE if (debuglevel >= 0) { printf("isatty = %d ttyname = %#x\n", isatty(2), (unsigned int)ttyname(2)); - if (!(bootopt & BOOT_TTY)) { + if (!use_tty) { int fd; /* * leave debugging output on fd 2 diff --git a/ircd/uping.c b/ircd/uping.c index 33f46bb..c84401b 100644 --- a/ircd/uping.c +++ b/ircd/uping.c @@ -29,7 +29,7 @@ #include "msg.h" #include "numeric.h" #include "numnicks.h" -#include "s_bsd.h" /* vserv */ +#include "s_bsd.h" /* VirtualHost */ #include "s_conf.h" #include "s_debug.h" #include "s_misc.h"