mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-07-09 23:23:14 +02:00
b785d69309
These were not a surprise, but deliberate: we let the previous clang-format commit be 100% clang-format job (so reproducable) and after that we planend and did this commit, because we chose to leave some stuff alone and do it manually. This commit will (also) be added to .git-blame-ignore-revs
161 lines
3.5 KiB
C
161 lines
3.5 KiB
C
/*
|
|
* Unreal Internet Relay Chat Daemon, src/debug.c
|
|
* Copyright (C) 1990 Jarkko Oikarinen and
|
|
* University of Oulu, Computing Center
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 1, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
/** @file
|
|
* @brief Some debugging functions that should probably be moved elsewhere.
|
|
*/
|
|
|
|
/* debug.c 2.30 1/3/94 (C) 1988 University of Oulu, Computing Center and Jarkko Oikarinen */
|
|
|
|
#include "unrealircd.h"
|
|
|
|
/** String of server options in this compile (eg 'D' for debug mode).
|
|
*/
|
|
MODVAR char serveropts[] = {
|
|
#ifdef DEBUGMODE
|
|
'D',
|
|
#endif
|
|
/* FDLIST (always) */
|
|
'F',
|
|
/* Hub (always) */
|
|
'h',
|
|
/* NOSPOOF (always) */
|
|
'n',
|
|
#ifdef VALLOC
|
|
'V',
|
|
#endif
|
|
#ifdef _WIN32
|
|
'W',
|
|
#endif
|
|
#ifdef USE_SYSLOG
|
|
'Y',
|
|
#endif
|
|
'6',
|
|
#ifndef NO_OPEROVERRIDE
|
|
'O',
|
|
#endif
|
|
#ifndef OPEROVERRIDE_VERIFY
|
|
'o',
|
|
#endif
|
|
'E',
|
|
#ifdef USE_LIBCURL
|
|
'r',
|
|
#endif
|
|
'\0', /* Don't change those nuls. -- Syzop */
|
|
'\0',
|
|
'\0',
|
|
'\0',
|
|
'\0',
|
|
};
|
|
|
|
char *extraflags = NULL;
|
|
|
|
MODVAR int debugfd = 2;
|
|
|
|
void flag_add(char ch)
|
|
{
|
|
char *newextra;
|
|
if (extraflags)
|
|
{
|
|
char tmp[2] = {ch, 0};
|
|
newextra = safe_alloc(strlen(extraflags) + 2);
|
|
strcpy(newextra, extraflags);
|
|
strcat(newextra, tmp);
|
|
safe_free(extraflags);
|
|
extraflags = newextra;
|
|
} else
|
|
{
|
|
extraflags = safe_alloc(2);
|
|
extraflags[0] = ch;
|
|
extraflags[1] = '\0';
|
|
}
|
|
}
|
|
|
|
void flag_del(char ch)
|
|
{
|
|
int newsz;
|
|
char *p, *op;
|
|
char *newflags;
|
|
newsz = 0;
|
|
p = extraflags;
|
|
for (newsz = 0, p = extraflags; *p; p++)
|
|
if (*p != ch)
|
|
newsz++;
|
|
newflags = safe_alloc(newsz + 1);
|
|
for (p = newflags, op = extraflags; (*op) && (newsz); newsz--, op++)
|
|
if (*op != ch)
|
|
*p++ = *op;
|
|
*p = '\0';
|
|
safe_free(extraflags);
|
|
extraflags = newflags;
|
|
}
|
|
|
|
|
|
#ifdef DEBUGMODE
|
|
|
|
#ifndef _WIN32
|
|
#define SET_ERRNO(x) errno = x
|
|
#else
|
|
#define SET_ERRNO(x) WSASetLastError(x)
|
|
#endif /* _WIN32 */
|
|
|
|
static char debugbuf[4096];
|
|
|
|
void debug(int level, FORMAT_STRING(const char *form), ...)
|
|
{
|
|
int err = ERRNO;
|
|
|
|
va_list vl;
|
|
va_start(vl, form);
|
|
|
|
if ((debuglevel >= 0) && (level <= debuglevel))
|
|
{
|
|
(void)ircvsnprintf(debugbuf, sizeof(debugbuf), form, vl);
|
|
|
|
#ifndef _WIN32
|
|
strlcat(debugbuf, "\n", sizeof(debugbuf));
|
|
if (write(debugfd, debugbuf, strlen(debugbuf)) < 0)
|
|
{
|
|
/* Yeah.. what can we do if output isn't working? Outputting an error makes no sense */
|
|
;
|
|
}
|
|
#else
|
|
strlcat(debugbuf, "\r\n", sizeof(debugbuf));
|
|
OutputDebugString(debugbuf);
|
|
#endif
|
|
}
|
|
va_end(vl);
|
|
SET_ERRNO(err);
|
|
}
|
|
|
|
int checkprotoflags(Client *client, int flags, const char *file, int line)
|
|
{
|
|
if (!MyConnect(client))
|
|
{
|
|
unreal_log(ULOG_ERROR, "main", "BUG_ISTOKEN_REMOTE_CLIENT", client,
|
|
"IsToken($token_value) used on remote client in $file:$line",
|
|
log_data_integer("token_value", flags),
|
|
log_data_string("file", file),
|
|
log_data_integer("line", line));
|
|
}
|
|
return ((client->local->proto & flags) == flags) ? 1 : 0;
|
|
}
|
|
#endif
|