/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2019-2020 Matt Schatz <genius3000@g3k.solutions>
+ * Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
+ * Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
+ * Copyright (C) 2013 Adam <Adam@anope.org>
+ * Copyright (C) 2012-2015 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012-2014, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012, 2018 Robby <robby@chatbelgie.be>
+ * Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
- * Copyright (C) 2005-2008 Craig Edwards <craigedwards@brainbox.cc>
- * Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
- * Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2003-2019 Anope Team <team@anope.org>
+ * Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2005, 2007, 2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
#include "inspircd.h"
#include "xline.h"
-#include "exitcodes.h"
-#include <iostream>
/* Find a user record by nickname and return a pointer to it */
User* InspIRCd::FindNick(const std::string &nick)
((str[2] >= 'A' && str[2] <= 'Z') || isdigit(str[2])));
}
-void InspIRCd::CheckRoot()
-{
-#ifndef _WIN32
- if (geteuid() == 0)
- {
- std::cout << "ERROR: You are running an irc server as root! DO NOT DO THIS!" << std::endl << std::endl;
- this->Logs->Log("STARTUP", LOG_DEFAULT, "Can't start as root");
- Exit(EXIT_STATUS_ROOT);
- }
-#endif
-}
-
/** A lookup table of values for multiplier characters used by
* InspIRCd::Duration(). In this lookup table, the indexes for
* the ascii values 'm' and 'M' have the value '60', the indexes
}
else
{
- /* Found something thats not a number, find out how much
+ /* Found something that's not a number, find out how much
* it multiplies the built up number by, multiply the total
* and reset the built up number.
*/
std::string InspIRCd::DurationString(time_t duration)
{
- time_t years = duration / 31536000;
+ if (duration == 0)
+ return "0s";
+
+ time_t years = duration / 31449600;
time_t weeks = (duration / 604800) % 52;
time_t days = (duration / 86400) % 7;
time_t hours = (duration / 3600) % 24;
std::string InspIRCd::GenRandomStr(unsigned int length, bool printable)
{
- char* buf = new char[length];
- GenRandom(buf, length);
- std::string rv;
- rv.resize(length);
- for(size_t i = 0; i < length; i++)
- rv[i] = printable ? 0x3F + (buf[i] & 0x3F) : buf[i];
- delete[] buf;
- return rv;
+ std::vector<char> str(length);
+ GenRandom(&str[0], length);
+ if (printable)
+ for (size_t i = 0; i < length; i++)
+ str[i] = 0x3F + (str[i] & 0x3F);
+ return std::string(&str[0], str.size());
}
// NOTE: this has a slight bias for lower values if max is not a power of 2.
return rv % max;
}
-// This is overridden by a higher-quality algorithm when SSL support is loaded
+// This is overridden by a higher-quality algorithm when TLS (SSL) support is loaded
void InspIRCd::DefaultGenRandom(char* output, size_t max)
{
#if defined HAS_ARC4RANDOM_BUF