2018-01-17 12:55:36 +01:00
|
|
|
// Matrix Construct
|
|
|
|
//
|
|
|
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
|
|
|
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
2018-02-04 03:22:01 +01:00
|
|
|
// copyright notice and this permission notice is present in all copies. The
|
|
|
|
// full license for this software is available in the LICENSE file.
|
2018-01-17 12:55:36 +01:00
|
|
|
|
2018-04-03 02:03:05 +02:00
|
|
|
#include <RB_INC_SYS_RESOURCE_H
|
2018-05-30 07:46:05 +02:00
|
|
|
#include <boost/version.hpp>
|
2018-01-17 12:55:36 +01:00
|
|
|
|
|
|
|
void
|
|
|
|
ircd::info::init()
|
2018-04-20 21:41:03 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ircd::info::dump()
|
2018-01-17 12:55:36 +01:00
|
|
|
{
|
|
|
|
// This message flashes information about IRCd itself for this execution.
|
2018-01-21 11:09:13 +01:00
|
|
|
log::info
|
|
|
|
{
|
|
|
|
"%s %ld %s. configured: %s; compiled: %s; executed: %s; %s",
|
|
|
|
BRANDING_VERSION,
|
|
|
|
__cplusplus,
|
|
|
|
__VERSION__,
|
|
|
|
configured,
|
|
|
|
compiled,
|
|
|
|
startup,
|
|
|
|
RB_DEBUG_LEVEL? "(DEBUG MODE)" : ""
|
|
|
|
};
|
2018-01-17 12:55:36 +01:00
|
|
|
|
|
|
|
// This message flashes information about our dependencies which are being
|
|
|
|
// assumed for this execution.
|
2018-01-21 11:09:13 +01:00
|
|
|
log::info
|
|
|
|
{
|
2018-02-18 06:26:47 +01:00
|
|
|
"%s. boost %u.%u.%u. rocksdb %s. sodium %s. %s. libmagic %d.",
|
2018-01-21 11:09:13 +01:00
|
|
|
PACKAGE_STRING,
|
|
|
|
boost_version[0],
|
|
|
|
boost_version[1],
|
|
|
|
boost_version[2],
|
|
|
|
db::version,
|
|
|
|
nacl::version(),
|
2018-02-18 06:26:47 +01:00
|
|
|
openssl::version(),
|
2018-02-19 07:50:37 +01:00
|
|
|
magic::version()
|
2018-01-21 11:09:13 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
// This message flashes posix information about the system and platform IRCd
|
|
|
|
// is running on when ::uname() is available
|
|
|
|
#ifdef HAVE_SYS_UTSNAME_H
|
|
|
|
log::info
|
|
|
|
{
|
|
|
|
"%s %s %s %s %s",
|
|
|
|
utsname.sysname,
|
|
|
|
utsname.nodename,
|
|
|
|
utsname.release,
|
|
|
|
utsname.version,
|
|
|
|
utsname.machine
|
|
|
|
};
|
|
|
|
#endif
|
2018-01-18 06:36:26 +01:00
|
|
|
|
2018-01-21 11:09:13 +01:00
|
|
|
// This message flashes standard information about the system and platform
|
|
|
|
// IRCd is compiled for and running on.
|
|
|
|
log::debug
|
|
|
|
{
|
|
|
|
"max_align=%zu hw_conc=%zu d_inter=%zu c_inter=%zu",
|
|
|
|
max_align,
|
|
|
|
hardware_concurrency,
|
|
|
|
destructive_interference,
|
|
|
|
constructive_interference
|
|
|
|
};
|
2018-04-20 21:37:17 +02:00
|
|
|
|
|
|
|
// This message flashes posix information about the resource limits
|
|
|
|
log::debug
|
|
|
|
{
|
|
|
|
"AS=%lu DATA=%lu RSS=%lu NOFILE=%zu",
|
|
|
|
rlimit_as,
|
|
|
|
rlimit_data,
|
|
|
|
rlimit_rss,
|
|
|
|
rlimit_nofile
|
|
|
|
};
|
2018-01-17 12:55:36 +01:00
|
|
|
}
|
|
|
|
|
2018-02-19 23:03:05 +01:00
|
|
|
extern "C" const char *const
|
|
|
|
ircd_name
|
|
|
|
{
|
|
|
|
PACKAGE_NAME
|
|
|
|
};
|
|
|
|
|
2018-02-19 22:32:34 +01:00
|
|
|
extern "C" const char *const
|
|
|
|
ircd_version
|
|
|
|
{
|
|
|
|
RB_VERSION
|
|
|
|
};
|
2018-01-17 12:55:36 +01:00
|
|
|
|
2018-02-19 23:03:05 +01:00
|
|
|
decltype(ircd::info::name)
|
|
|
|
ircd::info::name
|
|
|
|
{
|
|
|
|
PACKAGE_NAME
|
|
|
|
};
|
|
|
|
|
2018-02-19 22:32:34 +01:00
|
|
|
decltype(ircd::info::version)
|
|
|
|
ircd::info::version
|
|
|
|
{
|
|
|
|
RB_VERSION
|
|
|
|
};
|
2018-01-17 12:55:36 +01:00
|
|
|
|
2018-02-19 23:03:05 +01:00
|
|
|
decltype(ircd::info::user_agent)
|
|
|
|
ircd::info::user_agent
|
|
|
|
{
|
|
|
|
BRANDING_NAME " (IRCd " BRANDING_VERSION ")"
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::server_agent)
|
|
|
|
ircd::info::server_agent
|
|
|
|
{
|
|
|
|
BRANDING_NAME " (IRCd " BRANDING_VERSION ")"
|
|
|
|
};
|
|
|
|
|
2018-01-21 11:09:13 +01:00
|
|
|
//
|
|
|
|
// IRCd / build information
|
|
|
|
//
|
|
|
|
|
2018-04-03 01:50:51 +02:00
|
|
|
decltype(ircd::info::tag)
|
|
|
|
ircd::info::tag
|
|
|
|
{
|
|
|
|
RB_VERSION_TAG
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::branch)
|
|
|
|
ircd::info::branch
|
|
|
|
{
|
|
|
|
RB_VERSION_BRANCH
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::commit)
|
|
|
|
ircd::info::commit
|
|
|
|
{
|
|
|
|
RB_VERSION_COMMIT
|
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::configured_time)
|
|
|
|
ircd::info::configured_time
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
|
|
|
RB_TIME_CONFIGURED
|
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::compiled_time)
|
|
|
|
ircd::info::compiled_time
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
|
|
|
RB_TIME_COMPILED
|
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::startup_time)
|
|
|
|
ircd::info::startup_time
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
|
|
|
std::time(nullptr)
|
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::configured)
|
|
|
|
ircd::info::configured
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
|
|
|
ctime(&configured_time)
|
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::compiled)
|
|
|
|
ircd::info::compiled
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
2018-01-17 12:55:36 +01:00
|
|
|
//ctime(&compiled_time)
|
|
|
|
__TIMESTAMP__
|
2016-08-16 01:21:01 +02:00
|
|
|
};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::startup)
|
|
|
|
ircd::info::startup
|
2016-08-16 01:21:01 +02:00
|
|
|
{
|
|
|
|
ctime(&startup_time)
|
|
|
|
};
|
|
|
|
|
2018-01-21 11:09:13 +01:00
|
|
|
//
|
|
|
|
// System / platform information
|
|
|
|
//
|
|
|
|
|
2018-06-09 22:42:35 +02:00
|
|
|
const int
|
|
|
|
glibc[3]
|
|
|
|
{
|
|
|
|
__GNU_LIBRARY__,
|
|
|
|
__GLIBC__,
|
|
|
|
__GLIBC_MINOR__,
|
|
|
|
};
|
|
|
|
|
2018-01-21 11:09:13 +01:00
|
|
|
#ifdef HAVE_SYS_UTSNAME_H
|
|
|
|
decltype(ircd::info::utsname)
|
|
|
|
ircd::info::utsname{[]
|
|
|
|
{
|
|
|
|
struct ::utsname utsname;
|
|
|
|
syscall(::uname, &utsname);
|
|
|
|
return utsname;
|
|
|
|
}()};
|
|
|
|
#endif
|
|
|
|
|
2018-04-03 02:03:05 +02:00
|
|
|
#ifdef HAVE_SYS_RESOURCE_H
|
|
|
|
static uint64_t
|
|
|
|
_get_rlimit(const int &resource)
|
|
|
|
{
|
|
|
|
rlimit rlim;
|
2018-04-20 21:37:17 +02:00
|
|
|
ircd::syscall(getrlimit, resource, &rlim);
|
2018-04-03 02:03:05 +02:00
|
|
|
return rlim.rlim_cur;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
static uint64_t
|
|
|
|
_get_rlimit(const int &resource)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
decltype(ircd::info::rlimit_as)
|
|
|
|
ircd::info::rlimit_as
|
|
|
|
{
|
|
|
|
_get_rlimit(RLIMIT_AS)
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::rlimit_data)
|
|
|
|
ircd::info::rlimit_data
|
|
|
|
{
|
|
|
|
_get_rlimit(RLIMIT_DATA)
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::rlimit_rss)
|
|
|
|
ircd::info::rlimit_rss
|
|
|
|
{
|
|
|
|
_get_rlimit(RLIMIT_RSS)
|
|
|
|
};
|
|
|
|
|
2018-04-20 21:37:17 +02:00
|
|
|
decltype(ircd::info::rlimit_nofile)
|
|
|
|
ircd::info::rlimit_nofile
|
|
|
|
{
|
|
|
|
_get_rlimit(RLIMIT_NOFILE)
|
|
|
|
};
|
|
|
|
|
2018-01-21 11:09:13 +01:00
|
|
|
decltype(ircd::info::max_align)
|
|
|
|
ircd::info::max_align
|
|
|
|
{
|
|
|
|
alignof(std::max_align_t)
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::hardware_concurrency)
|
|
|
|
ircd::info::hardware_concurrency
|
|
|
|
{
|
|
|
|
std::thread::hardware_concurrency()
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::destructive_interference)
|
|
|
|
ircd::info::destructive_interference
|
|
|
|
{
|
|
|
|
#ifdef __cpp_lib_hardware_interference_size
|
|
|
|
std::hardware_destructive_interference_size
|
|
|
|
#else
|
|
|
|
0
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
decltype(ircd::info::constructive_interference)
|
|
|
|
ircd::info::constructive_interference
|
|
|
|
{
|
|
|
|
#ifdef __cpp_lib_hardware_interference_size
|
|
|
|
std::hardware_constructive_interference_size
|
|
|
|
#else
|
|
|
|
0
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
2018-02-19 22:32:34 +01:00
|
|
|
//
|
|
|
|
// Third party dependency information
|
|
|
|
//
|
|
|
|
|
|
|
|
/// Boost version indicator for compiled header files.
|
|
|
|
decltype(ircd::info::boost_version)
|
|
|
|
ircd::info::boost_version
|
|
|
|
{
|
|
|
|
BOOST_VERSION / 100000,
|
|
|
|
BOOST_VERSION / 100 % 1000,
|
|
|
|
BOOST_VERSION % 100,
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Provides tcmalloc version information if tcmalloc is linked in to IRCd.
|
|
|
|
struct ircd::info::tc_version
|
|
|
|
{
|
|
|
|
int major{0}, minor{0};
|
|
|
|
char patch[64] {0};
|
|
|
|
std::string version {"unavailable"};
|
|
|
|
}
|
|
|
|
const ircd::info::tc_version;
|
|
|
|
|
|
|
|
/*
|
|
|
|
const char* tc_version(int* major, int* minor, const char** patch);
|
|
|
|
ircd::tc_version::tc_version()
|
|
|
|
:version{::tc_version(&major, &minor, reinterpret_cast<const char **>(&patch))}
|
|
|
|
{}
|
|
|
|
*/
|
|
|
|
|
|
|
|
//
|
|
|
|
// Extended information
|
|
|
|
//
|
|
|
|
|
|
|
|
//TODO: XXX: integrate CREDITS text again somehow
|
|
|
|
decltype(ircd::info::credits)
|
|
|
|
ircd::info::credits
|
|
|
|
{{
|
|
|
|
|
|
|
|
"Inspired by the original Internet Relay Chat daemon from Jarkko Oikarinen",
|
|
|
|
" ",
|
|
|
|
"This - is The Construct",
|
|
|
|
" ",
|
|
|
|
"Internet Relay Chat daemon: Matrix Construct",
|
|
|
|
" ",
|
|
|
|
"Copyright (C) 2016-2018 Matrix Construct Developers, Authors & Contributors",
|
|
|
|
"Permission to use, copy, modify, and/or distribute this software for any",
|
|
|
|
"purpose with or without fee is hereby granted, provided that the above",
|
|
|
|
"copyright notice and this permission notice is present in all copies.",
|
|
|
|
" ",
|
|
|
|
}};
|
|
|
|
|
2018-01-17 12:55:36 +01:00
|
|
|
decltype(ircd::info::myinfo)
|
|
|
|
ircd::info::myinfo
|
2016-08-16 01:21:01 +02:00
|
|
|
{{
|
|
|
|
#ifdef CPATH
|
|
|
|
{"CPATH", CPATH, 0, "Path to Main Configuration File"},
|
|
|
|
#else
|
|
|
|
{"CPATH", "NONE", 0, "Path to Main Configuration File"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef DPATH
|
|
|
|
{"DPATH", DPATH, 0, "Directory Containing Configuration Files"},
|
|
|
|
#else
|
|
|
|
{"DPATH", "NONE", 0, "Directory Containing Configuration Files"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HPATH
|
|
|
|
{"HPATH", HPATH, 0, "Path to Operator Help Files"},
|
|
|
|
#else
|
|
|
|
{"HPATH", "NONE", 0, "Path to Operator Help Files"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef UHPATH
|
|
|
|
{"UHPATH", UHPATH, 0, "Path to User Help Files"},
|
|
|
|
#else
|
|
|
|
{"UHPATH", "NONE", 0, "Path to User Help Files"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef RB_IPV6
|
|
|
|
{"IPV6", "ON", 0, "IPv6 Support"},
|
|
|
|
#else
|
|
|
|
{"IPV6", "OFF", 0, "IPv6 Support"},
|
|
|
|
#endif
|
|
|
|
|
2016-11-29 16:23:38 +01:00
|
|
|
#ifdef JOIN_LEAVE_COUNT_EXPIRE_TIME
|
2016-08-16 01:21:01 +02:00
|
|
|
{"JOIN_LEAVE_COUNT_EXPIRE_TIME", "", JOIN_LEAVE_COUNT_EXPIRE_TIME, "Anti SpamBot Parameter"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef KILLCHASETIMELIMIT
|
2016-08-16 01:21:01 +02:00
|
|
|
{"KILLCHASETIMELIMIT", "", KILLCHASETIMELIMIT, "Nick Change Tracker for KILL"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
2016-08-16 01:21:01 +02:00
|
|
|
|
|
|
|
#ifdef LPATH
|
|
|
|
{"LPATH", LPATH, 0, "Path to Log File"},
|
|
|
|
#else
|
|
|
|
{"LPATH", "NONE", 0, "Path to Log File"},
|
|
|
|
#endif
|
|
|
|
|
2016-11-29 16:23:38 +01:00
|
|
|
#ifdef MAX_BUFFER
|
2016-08-16 01:21:01 +02:00
|
|
|
{"MAX_BUFFER", "", MAX_BUFFER, "Maximum Buffer Connections Allowed"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef MAX_JOIN_LEAVE_COUNT
|
2016-08-16 01:21:01 +02:00
|
|
|
{"MAX_JOIN_LEAVE_COUNT", "", MAX_JOIN_LEAVE_COUNT, "Anti SpamBot Parameter"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef MAX_JOIN_LEAVE_TIME
|
2016-08-16 01:21:01 +02:00
|
|
|
{"MIN_JOIN_LEAVE_TIME", "", MIN_JOIN_LEAVE_TIME, "Anti SpamBot Parameter"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
2016-08-16 01:21:01 +02:00
|
|
|
|
|
|
|
#ifdef MPATH
|
|
|
|
{"MPATH", MPATH, 0, "Path to MOTD File"},
|
|
|
|
#else
|
|
|
|
{"MPATH", "NONE", 0, "Path to MOTD File"},
|
|
|
|
#endif
|
|
|
|
|
2016-11-29 16:23:38 +01:00
|
|
|
#ifdef NICKNAMEHISTORYLENGTH
|
2016-08-16 01:21:01 +02:00
|
|
|
{"NICKNAMEHISTORYLENGTH", "", NICKNAMEHISTORYLENGTH, "Size of WHOWAS Array"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
2016-08-16 01:21:01 +02:00
|
|
|
|
|
|
|
#ifdef OPATH
|
|
|
|
{"OPATH", OPATH, 0, "Path to Operator MOTD File"},
|
|
|
|
#else
|
|
|
|
{"OPATH", "NONE", 0, "Path to Operator MOTD File"},
|
|
|
|
#endif
|
|
|
|
|
2016-11-29 16:23:38 +01:00
|
|
|
#ifdef OPER_SPAM_COUNTDOWN
|
2016-08-16 01:21:01 +02:00
|
|
|
{"OPER_SPAM_COUNTDOWN", "", OPER_SPAM_COUNTDOWN, "Anti SpamBot Parameter"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
2016-08-16 01:21:01 +02:00
|
|
|
|
|
|
|
#ifdef HAVE_LIBCRYPTO
|
|
|
|
{"HAVE_LIBCRYPTO", "ON", 0, "Enable OpenSSL CHALLENGE Support"},
|
|
|
|
#else
|
|
|
|
{"HAVE_LIBCRYPTO", "OFF", 0, "Enable OpenSSL CHALLENGE Support"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_LIBZ
|
|
|
|
{"HAVE_LIBZ", "YES", 0, "zlib (ziplinks) support"},
|
|
|
|
#else
|
|
|
|
{"HAVE_LIBZ", "NO", 0, "zlib (ziplinks) support"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef PPATH
|
|
|
|
{"PPATH", PPATH, 0, "Path to Pid File"},
|
|
|
|
#else
|
|
|
|
{"PPATH", "NONE", 0, "Path to Pid File"},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef SPATH
|
|
|
|
{"SPATH", SPATH, 0, "Path to Server Executable"},
|
|
|
|
#else
|
|
|
|
{"SPATH", "NONE", 0, "Path to Server Executable"},
|
|
|
|
#endif
|
|
|
|
|
2016-11-29 16:23:38 +01:00
|
|
|
#ifdef TS_MAX_DELTA_DEFAULT
|
2016-08-16 01:21:01 +02:00
|
|
|
{"TS_MAX_DELTA_DEFAULT", "", TS_MAX_DELTA_DEFAULT, "Maximum Allowed TS Delta from another Server"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TS_WARN_DELTA_DEFAULT
|
2016-08-16 01:21:01 +02:00
|
|
|
{"TS_WARN_DELTA_DEFAULT", "", TS_WARN_DELTA_DEFAULT, "Maximum TS Delta before Sending Warning"},
|
2016-11-29 16:23:38 +01:00
|
|
|
#endif
|
2016-08-16 01:21:01 +02:00
|
|
|
|
|
|
|
#ifdef USE_IODEBUG_HOOKS
|
|
|
|
{"USE_IODEBUG_HOOKS", "YES", 0, "IO Debugging support"},
|
|
|
|
#else
|
|
|
|
{"USE_IODEBUG_HOOKS", "NO", 0, "IO Debugging support"},
|
|
|
|
#endif
|
|
|
|
}};
|