X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/d2b5f4111b61b45ea1790cd36eb2b7fe3adb57d8..3c586ccf3e85f5d3ba6c87cde8005166e18bbac8:/ircd/ircd.c diff --git a/ircd/ircd.c b/ircd/ircd.c index c224d40e..582964e8 100644 --- a/ircd/ircd.c +++ b/ircd/ircd.c @@ -1,5 +1,5 @@ /* - * charybdis: A slightly useful ircd. + * Solanum: a slightly advanced ircd * ircd.c: Starts up and runs the ircd. * * Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center @@ -197,7 +197,6 @@ ircd_shutdown(const char *reason) static void init_sys(void) { -#if !defined(_WIN32) && defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) struct rlimit limit; if(!getrlimit(RLIMIT_NOFILE, &limit)) @@ -206,16 +205,14 @@ init_sys(void) if(maxconnections <= MAX_BUFFER) { fprintf(stderr, "ERROR: Shell FD limits are too low.\n"); - fprintf(stderr, "ERROR: charybdis reserves %d FDs, shell limits must be above this\n", MAX_BUFFER); + fprintf(stderr, "ERROR: solanum reserves %d FDs, shell limits must be above this\n", MAX_BUFFER); exit(EXIT_FAILURE); } return; } -#endif /* RLIMIT_FD_MAX */ maxconnections = MAXCONNECTIONS; } -#ifndef _WIN32 static int make_daemon(void) { @@ -255,7 +252,6 @@ make_daemon(void) return 0; } -#endif static int printVersion = 0; @@ -296,7 +292,7 @@ check_rehash(void *unused) if(doremotd) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Got signal SIGUSR1, reloading ircd motd file"); cache_user_motd(); doremotd = false; @@ -353,104 +349,6 @@ initialize_global_set_options(void) } -/* - * initialize_server_capabs - * - * inputs - none - * output - none - */ -static void -initialize_server_capabs(void) -{ - default_server_capabs &= ~CAP_ZIP; -} - -#ifdef _WIN32 -/* - * relocate_paths - * - * inputs - none - * output - none - * side effects - items in ircd_paths[] array are relocated - */ -static void -relocate_paths(void) -{ - char prefix[PATH_MAX], workbuf[PATH_MAX]; - char *p; - - rb_strlcpy(prefix, rb_path_to_self(), sizeof prefix); - - ircd_paths[IRCD_PATH_IRCD_EXEC] = rb_strdup(prefix); - - /* if we're running from inside the source tree, we probably do not want to relocate any other paths */ - if (strstr(prefix, ".libs") != NULL) - return; - - /* prefix = /home/kaniini/ircd/bin/ircd */ - p = strrchr(prefix, RB_PATH_SEPARATOR); - if (rb_unlikely(p == NULL)) - return; - *p = 0; - - /* prefix = /home/kaniini/ircd/bin */ - p = strrchr(prefix, RB_PATH_SEPARATOR); - if (rb_unlikely(p == NULL)) - return; - *p = 0; - - /* prefix = /home/kaniini/ircd */ - ircd_paths[IRCD_PATH_PREFIX] = rb_strdup(prefix); - - /* now that we have our prefix, we can relocate the other paths... */ - snprintf(workbuf, sizeof workbuf, "%s%cmodules", prefix, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_MODULES] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cmodules%cautoload", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_AUTOLOAD_MODULES] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc", prefix, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_ETC] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%clog", prefix, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_LOG] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%chelp%cusers", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_USERHELP] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%chelp%copers", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_OPERHELP] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc%circd.conf", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_IRCD_CONF] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc%circd.motd", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_IRCD_MOTD] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc%copers.motd", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_IRCD_OMOTD] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc%cban.db", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_BANDB] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cetc%circd.pid", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_IRCD_PID] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%clogs%circd.log", prefix, RB_PATH_SEPARATOR, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_IRCD_LOG] = rb_strdup(workbuf); - - snprintf(workbuf, sizeof workbuf, "%s%cbin", prefix, RB_PATH_SEPARATOR); - ircd_paths[IRCD_PATH_BIN] = rb_strdup(workbuf); - ircd_paths[IRCD_PATH_LIBEXEC] = rb_strdup(workbuf); - - inotice("runtime paths:"); - for (int i = 0; i < IRCD_PATH_COUNT; i++) - { - inotice(" %s: %s", ircd_pathnames[i], ircd_paths[i]); - } -} -#endif - /* * write_pidfile * @@ -525,7 +423,6 @@ check_pidfile(const char *filename) static void setup_corefile(void) { -#ifdef HAVE_SYS_RESOURCE_H struct rlimit rlim; /* resource limits */ /* Set corefilesize to maximum */ @@ -534,7 +431,6 @@ setup_corefile(void) rlim.rlim_cur = rlim.rlim_max; setrlimit(RLIMIT_CORE, &rlim); } -#endif } static void @@ -553,7 +449,7 @@ ircd_restart_cb(const char *str) /* * Why EXIT_FAILURE here? * Because if ircd_die_cb() is called it's because of a fatal - * error inside libcharybdis, and we don't know how to handle the + * error inside libsolanum, and we don't know how to handle the * exception, so it is logical to return a FAILURE exit code here. * --nenolod */ @@ -627,22 +523,16 @@ seed_random(void *unused) * Side Effects - this is where the ircd gets going right now */ int -charybdis_main(int argc, char * const argv[]) +solanum_main(int argc, char * const argv[]) { int fd; -#ifndef _WIN32 /* Check to see if the user is running us as root, which is a nono */ if(geteuid() == 0) { fprintf(stderr, "Don't run ircd as root!!!\n"); return -1; } -#endif - -#ifdef _WIN32 - relocate_paths(); -#endif logFileName = ircd_paths[IRCD_PATH_IRCD_LOG]; pidFileName = ircd_paths[IRCD_PATH_IRCD_PID]; @@ -679,6 +569,7 @@ charybdis_main(int argc, char * const argv[]) me.localClient = &meLocalUser; /* Make sure all lists are zeroed */ + memset(&global_client_list, 0, sizeof(global_client_list)); memset(&unknown_list, 0, sizeof(unknown_list)); memset(&lclient_list, 0, sizeof(lclient_list)); memset(&serv_list, 0, sizeof(serv_list)); @@ -708,7 +599,6 @@ charybdis_main(int argc, char * const argv[]) if (testing_conf) server_state_foreground = true; -#ifndef _WIN32 /* Make sure fd 0, 1 and 2 are in use -- jilles */ do { @@ -718,7 +608,6 @@ charybdis_main(int argc, char * const argv[]) close(fd); else if (fd == -1) exit(1); -#endif /* Check if there is pidfile and daemon already running */ if(!testing_conf) @@ -728,10 +617,8 @@ charybdis_main(int argc, char * const argv[]) inotice("starting %s ...", ircd_version); inotice("%s", rb_lib_version()); -#ifndef _WIN32 if(!server_state_foreground) make_daemon(); -#endif } /* Init the event subsystem */ @@ -785,7 +672,6 @@ charybdis_main(int argc, char * const argv[]) rehash_bans(); - initialize_server_capabs(); /* Set up default_server_capabs */ initialize_global_set_options(); if(ServerInfo.name == NULL) @@ -866,8 +752,8 @@ charybdis_main(int argc, char * const argv[]) check_splitmode_ev = rb_event_add("check_splitmode", check_splitmode, NULL, 5); if(server_state_foreground) - inotice("now running in foreground mode from %s as pid %d ...", - ConfigFileEntry.dpath, getpid()); + inotice("now running in foreground mode from %s as pid %ld ...", + ConfigFileEntry.dpath, (long)getpid()); rb_lib_loop(0);