20 #include <znc/zncconfig.h>
31 static inline void SetFdCloseOnExec(
int fd) {
32 int flags = fcntl(fd, F_GETFD, 0);
33 if (flags < 0)
return;
35 fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
38 static const char g_HexDigits[] =
"0123456789abcdef";
71 unsigned int uMin = 0,
unsigned int uMax = ~0,
72 unsigned int uDefault = ~0);
172 class CTable :
protected std::vector<std::vector<CString>> {
208 size_type uRowIdx = ~0);
229 using std::vector<std::vector<CString>>::size;
232 using std::vector<std::vector<CString>>::empty;
235 unsigned int GetColumnIndex(
const CString& sName)
const;
245 #include <openssl/aes.h>
246 #include <openssl/blowfish.h>
247 #include <openssl/md5.h>
264 static unsigned char*
MD5(
const unsigned char* input,
unsigned int ilen);
270 void Crypt(
unsigned char* input,
unsigned char* output,
271 unsigned int ibytes);
274 unsigned char*
Crypt(
unsigned char* input,
unsigned int ibytes);
278 unsigned char* m_ivec;
280 int m_iEncrypt, m_num;
290 template <
typename K,
typename V =
bool>
323 void AddItem(
const K& Item,
const V& Val,
unsigned int uTTL) {
352 if (it ==
m_mItems.end())
return nullptr;
353 return &it->second.second;
388 std::map<K, V> mItems;
390 mItems[it.first] = it.second.second;
402 typedef std::pair<unsigned long long, V>
value;
403 typedef typename std::map<K, value>::iterator
iterator;
std::set< CString > SCString
Definition: ZNCString.h:35
does Blowfish w/64 bit feedback, no padding
Definition: Utils.h:249
static unsigned char * MD5(const unsigned char *input, unsigned int ilen)
output must be freed
CBlowfish(const CBlowfish &)=default
unsigned char * Crypt(unsigned char *input, unsigned int ibytes)
must free result
void Crypt(unsigned char *input, unsigned char *output, unsigned int ibytes)
output must be the same size as input
CBlowfish & operator=(const CBlowfish &)=default
CBlowfish(const CString &sPassword, int iEncrypt, const CString &sIvec="")
static CString MD5(const CString &sInput, bool bHexEncode=false)
returns an md5 of the CString (not hex encoded)
CString Crypt(const CString &sData)
EType GetType() const
Definition: Utils.h:124
virtual ~CException()
Definition: Utils.h:122
EType
Definition: Utils.h:119
@ EX_Shutdown
Definition: Utils.h:119
@ EX_Restart
Definition: Utils.h:119
EType m_eType
Definition: Utils.h:128
CException(EType e)
Definition: Utils.h:121
String class that is used inside ZNC.
Definition: ZNCString.h:68
Generate a grid-like or list-like output from a given input.
Definition: Utils.h:172
bool AddColumn(const CString &sName)
Adds a new column to the table.
std::map< CString, CString::size_type > m_msuWidths
Definition: Utils.h:240
EStyle eStyle
Definition: Utils.h:241
std::vector< CString > m_vsHeaders
Definition: Utils.h:238
virtual ~CTable()
Definition: Utils.h:176
bool SetStyle(EStyle eNewStyle)
Selects the output style of the table.
bool SetCell(const CString &sColumn, const CString &sValue, size_type uRowIdx=~0)
Sets a given cell in the table to a value.
bool GetLine(unsigned int uIdx, CString &sLine) const
Get a line of the table's output.
CString::size_type GetColumnWidth(unsigned int uIdx) const
Return the width of the given column.
EStyle
Definition: Utils.h:174
@ GridStyle
Definition: Utils.h:174
@ ListStyle
Definition: Utils.h:174
size_type AddRow()
Adds a new row to the table.
CTable()
Definition: Utils.h:175
void Clear()
Completely clear the table.
static SCString GetEncodings()
static bool CheckCIDR(const CString &sIP, const CString &sRange)
CIDR notation checker, e.g.
static CString FormatTime(time_t t, const CString &sFormat, const CString &sTZ)
static CString GetIP(unsigned long addr)
static CString GetPass(const CString &sPrompt)
static CString SaltedMD5Hash(const CString &sPass, const CString &sSalt)
static unsigned long GetLongIP(const CString &sIP)
static CString FormatServerTime(const timeval &tv)
static void PrintError(const CString &sMessage)
static CString SaltedSHA256Hash(const CString &sPass, const CString &sSalt)
static CString CTime(time_t t, const CString &sTZ)
static CString AskSaltedHashPassForConfig()
Asks password from stdin, with confirmation.
static void PrintPrompt(const CString &sMessage)
static CString SaltedHash(const CString &sPass, const CString &sSalt)
static bool GetNumInput(const CString &sPrompt, unsigned int &uRet, unsigned int uMin=0, unsigned int uMax=~0, unsigned int uDefault=~0)
static SCString GetTimezones()
static void SetMessageTags(CString &sLine, const MCString &mssTags)
static CString FormatTime(const timeval &tv, const CString &sFormat, const CString &sTZ)
Supports an additional format specifier for formatting sub-second values:
static void PrintStatus(bool bSuccess, const CString &sMessage="")
static MCString GetMessageTags(const CString &sLine)
static bool GetBoolInput(const CString &sPrompt, bool *pbDefault=nullptr)
static bool GetInput(const CString &sPrompt, CString &sRet, const CString &sDefault="", const CString &sHint="")
static void GenerateCert(FILE *pOut, const CString &sHost="")
static void PrintAction(const CString &sMessage)
static unsigned long long GetMillTime()
static bool GetBoolInput(const CString &sPrompt, bool bDefault)
static void PrintMessage(const CString &sMessage, bool bStrong=false)
static timeval ParseServerTime(const CString &sTime)
A dictionary for strings.
Definition: ZNCString.h:595
Insert an object with a time-to-live and check later if it still exists.
Definition: Utils.h:291
void AddItem(const K &Item, unsigned int uTTL)
This function adds an item to the cache using a custom time-to-live value.
Definition: Utils.h:308
bool HasItem(const K &Item)
Performs a Cleanup() and then checks to see if your item exists.
Definition: Utils.h:339
unsigned int m_uTTL
Default time-to-live duration.
Definition: Utils.h:406
void Cleanup()
Cycles through the queue removing all of the stale entries.
Definition: Utils.h:366
bool RemItem(const K &Item)
Removes a specific item from the cache.
Definition: Utils.h:361
void AddItem(const K &Item)
This function adds an item to the cache using the default time-to-live value.
Definition: Utils.h:301
unsigned int GetTTL() const
Definition: Utils.h:399
std::map< K, value > m_mItems
Map of cached items.
Definition: Utils.h:405
void AddItem(const K &Item, const V &Val, unsigned int uTTL)
This function adds an item to the cache using a custom time-to-live value.
Definition: Utils.h:323
void Clear()
Clear all entries.
Definition: Utils.h:381
virtual ~TCacheMap()
Definition: Utils.h:295
void AddItem(const K &Item, const V &Val)
This function adds an item to the cache using the default time-to-live value.
Definition: Utils.h:315
void SetTTL(unsigned int u)
Definition: Utils.h:396
std::map< K, V > GetItems()
Returns all entries.
Definition: Utils.h:386
std::map< K, value >::iterator iterator
Definition: Utils.h:403
std::pair< unsigned long long, V > value
Definition: Utils.h:402
TCacheMap(unsigned int uTTL=5000)
Definition: Utils.h:293
V * GetItem(const K &Item)
Performs a Cleanup() and returns a pointer to the object, or nullptr.
Definition: Utils.h:349