/************************************************************************
 *   IRC - Internet Relay Chat, support/config.h
 *   Copyright (C) 1990 Jarkko Oikarinen
 *
 *   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.
 */

/*
 *  ircdwatch configuration options.
 */

/* how often (in seconds) should we check that ircd runs? */
#define IRCDWATCH_POLLING_INTERVAL  30

/* 
 * should we check for config file changes and HUP the server
 * if a change is detected?
 */
#undef IRCDWATCH_HUP_ON_CONFIG_CHANGE

/* 
 * although you may not want to log ircd-messages to syslog you
 * may want to log when ircdwatch reloads the config or when
 * ircd croaks and ircdwatch has to restart it
 */
#define IRCDWATCH_USE_SYSLOG
#ifdef IRCDWATCH_USE_SYSLOG
# define IRCDWATCH_SYSLOG_IDENT     "ircdwatch"
# define IRCDWATCH_SYSLOG_OPTIONS   (LOG_PID)
# define IRCDWATCH_SYSLOG_FACILITY  LOG_DAEMON
#endif


/*
 *  irc[d] configuration options.
 *
 *  Most of the following defines are related to the server,
 *  some apply to the client.
 *
 */

/*
 * If you don't want the server to keep reading the MOTD file from the disk,
 * define CACHED_MOTD.  The server will store the MOTD in memory, and only
 * read it again from the disk when rehashing if the file has changed.
 */
#define	CACHED_MOTD


/* CHROOTDIR
 *
 * Define for value added security if you are a rooter.
 *
 * CPATH, MPATH, LPATH, PPATH, TPATH, QPATH, OPATH, 
 * FNAME_USERLOG, FNAME_OPERLOG, FNAME_CONNLOG, FNAME_AUTHLOG
 * must have RPATH as root directory! Set them in Makefile
 *
 * You may want to define IRC_UID and IRC_GID
 */
#undef CHROOTDIR

#if defined(CHROOTDIR)
  #define ROOT_PATH	"/where/to/change/root/dir"
#endif


/* ENABLE_SUMMON
 *
 * The SUMMON command requires the ircd to be run as group tty in order
 * to work properly in many cases.  If you are on a machine where it
 * won't work, or simply don't want local users to be summoned, undefine
 * this.
 */
#undef	ENABLE_SUMMON	/* local summon */
#undef	ENABLE_USERS	/* enables local /users (same as who/finger output) */


/* SHOW_INVISIBLE_LUSERS
 *
 * As defined this will show the correct invisible count for anyone who does
 * LUSERS on your server. On a large net this doesnt mean much, but on a
 * small net it might be an advantage to undefine it.
 */
#define	SHOW_INVISIBLE_LUSERS


/* NO_DEFAULT_INVISIBLE
 *
 * When defined, your users will not automatically be attributed with user
 * mode "i" (i == invisible). Invisibility means people dont showup in
 * WHO or NAMES unless they are on the same channel as you.
 */
#undef	NO_DEFAULT_INVISIBLE


/* OPER_KILL
 *
 * If you dont believe operators should be allowed to use the /KILL command
 * or believe it is uncessary for them to use it, then leave OPER_KILL
 * undefined. This will not affect other operators or servers issuing KILL
 * commands however.  OPER_REHASH and OPER_RESTART allow operators to
 * issue the REHASH and RESTART commands when connected to your server.
 * Left undefined they increase the security of your server from wayward
 * operators and accidents.  Defining OPER_REMOTE removes the restriction
 * that O-lines only become fully effective for people on the 'same network'
 * as the server.  Undefined, it increases the security of the server by
 * placing restrictions on where people can use operator powers from.
 * The 'LOCOP_' #defines are for making the respective commands available
 * to 'local' operators. Note that the 'OPER_' #defines affect both global
 * (big O) and local (little o) operators.  Defining 'LOCOP_x' has no effect
 * if 'OPER_x' is undefined so you can't give local operators more rights
 * than global ones.
 */
#undef	OPER_KILL
#define	OPER_REHASH
#undef	OPER_RESTART
#define	OPER_DIE
#undef	OPER_REMOTE
#undef	LOCOP_REHASH
#undef	LOCOP_RESTART
#undef	LOCOP_DIE

/*
 * Maximum number of network connections your server will allow.  This should
 * never exceed max. number of open file descrpitors and wont increase this.
 * Should remain LOW as possible. Most sites will usually have under 50 or so
 * connections.
 * if you have a lot of server connections, it may be worth splitting the load
 * over 2 or more servers.
 * 1 server = 1 connection, 1 user = 1 connection.
 * This should be at *least* 4: 2 listen ports (1 tcp, 1 udp)
 *				1 dns port, 1 client
 */
#define MAXCONNECTIONS	50

/* MAXIMUM LINKS
 *
 * This define is useful for leaf nodes and gateways. It keeps you from
 * connecting to too many places. It works by keeping you from
 * connecting to more than "n" nodes which you have C:blah::blah:6667
 * lines for.
 *
 * Note that any number of nodes can still connect to you. This only
 * limits the number that you actively reach out to connect to.
 *
 * Leaf nodes are nodes which are on the edge of the tree. If you want
 * to have a backup link, then sometimes you end up connected to both
 * your primary and backup, routing traffic between them. To prevent
 * this, #define MAXIMUM_LINKS 1 and set up both primary and
 * secondary with C:blah::blah:6667 lines. THEY SHOULD NOT TRY TO
 * CONNECT TO YOU, YOU SHOULD CONNECT TO THEM.
 *
 * Gateways such as the server which connects Australia to the US can
 * do a similar thing. Put the American nodes you want to connect to
 * in with C:blah::blah:6667 lines, and the Australian nodes with
 * C:blah::blah lines. Have the Americans put you in with C:blah::blah
 * lines. Then you will only connect to one of the Americans.
 *
 * This value is only used if you don't have server classes defined, and
 * a server is in class 0 (the default class if none is set).
 *
 */
#define MAXIMUM_LINKS 1


/*
 * A pure non-routing leaf server can undefine HUB for best performance.
 * If your server is running as a a HUB Server then define this.
 * A HUB Server has many servers connect to it at the same as opposed
 * to a leaf which just has 1 server (typically the uplink).
 */
/* #define	HUB */

#ifdef HUB
/*
 * MAXSERVERS is the maximum number of servers that will be linked
 * to your server at the same time.  This number is not a limit,
 * it is used to allocate memory when ircd is started.
 */
# define	MAXSERVERS 3
#else
# define	MAXSERVERS 1
#endif

/*
 * If you want to use timed klines, set it to frequence in seconds,
 * how often to check if client is to be removed; usually 60 seconds
 * (smallest granularity you can get in K:line anyway).
 *
 * Advised not to use it ;-) --Beeth
 */
#undef TIMEDKLINES

/* R_LINES:  The conf file now allows the existence of R lines, or
 * restrict lines.  These allow more freedom in the ability to restrict
 * who is to sign on and when.  What the R line does is call an outside
 * program which returns a reply indicating whether to let the person on.
 * Because there is another program involved, Delays and overhead could
 * result. It is for this reason that there is a line in config.h to
 * decide whether it is something you want or need. -Hoppie
 *
 * The default is no R_LINES as most people probably don't need it. --Jto
 */
#undef	R_LINES

#ifdef	R_LINES
/* Also, even if you have R lines defined, you might not want them to be 
   checked everywhere, since it could cost lots of time and delay.  Therefore, 
   The following two options are also offered:  R_LINES_REHASH rechecks for 
   R lines after a rehash, and R_LINES_OFTEN, which rechecks it as often
   as it does K lines.  Note that R_LINES_OFTEN is *very* likely to cause 
   a resource drain, use at your own risk.  R_LINES_REHASH shouldn't be too
   bad, assuming the programs are fairly short. */
#define R_LINES_REHASH
#define R_LINES_OFTEN
#endif


/*
 * NOTE: defining CMDLINE_CONFIG and installing ircd SUID or SGID is a MAJOR
 *       security problem - they can use the "-f" option to read any files
 *       that the 'new' access lets them. Note also that defining this is
 *       a major security hole if your ircd goes down and some other user
 *       starts up the server with a new conf file that has some extra
 *       O-lines. So don't use this unless you're debugging.
 */
#undef	CMDLINE_CONFIG /* allow conf-file to be specified on command line */


/*
 * To use m4 as a preprocessor on the ircd.conf file, define M4_PREPROC.
 * The server will then call m4 each time it reads the ircd.conf file,
 * reading m4 output as the server's ircd.conf file.
 */
#undef	M4_PREPROC


/*
 * If you wish to have the server send 'vital' messages about server
 * through syslog, define USE_SYSLOG. Only system errors and events critical
 * to the server are logged although if this is defined with FNAME_USERLOG,
 * syslog() is used instead of the above file. It is not recommended that
 * this option is used unless you tell the system administrator beforehand
 * and obtain their permission to send messages to the system log files.
 */
#undef	USE_SYSLOG

#ifdef	USE_SYSLOG
/*
 * If you use syslog above, you may want to turn some (none) of the
 * spurious log messages for KILL/SQUIT off.
 */
#undef	SYSLOG_KILL	/* log all operator kills to syslog */
#undef	SYSLOG_SQUIT	/* log all remote squits for all servers to syslog */
#undef	SYSLOG_CONNECT	/* log remote connect messages for other all servs */
#undef	SYSLOG_USERS	/* send userlog stuff to syslog */
#undef	SYSLOG_OPER	/* log all users who successfully become an Op */
#undef	SYSLOG_CONN	/* log all uncomplete/rejected connections */

/*
 * If you want to log to a different facility than DAEMON, change
 * this define.
 */
#define LOG_FACILITY LOG_DAEMON
#endif /* USE_SYSLOG */


/*
 * define this if you want to use crypted passwords for operators in your
 * ircd.conf file. See contrib/mkpasswd/README for more details on this.
 */
#undef	CRYPT_OPER_PASSWORD


/*
 * If you want to store encrypted passwords in N-lines for server links,
 * define this.  For a C/N pair in your ircd.conf file, the password
 * need not be the same for both, as long as hte opposite end has the
 * right password in the opposite line.  See INSTALL doc for more details.
 */
#undef	CRYPT_LINK_PASSWORD


/*
 * define this if you enable summon and if you want summon to look for the
 * least idle tty a user is logged in on.
 */
#undef	LEAST_IDLE


/*
 * IDLE_FROM_MSG
 *
 * Idle-time nullified only from privmsg, if undefined idle-time
 * is nullified from everything except ping/pong.
 * Added 3.8.1992, kny@cs.hut.fi (nam)
 */
#define	IDLE_FROM_MSG


/*
 * use these to setup a Unix domain socket to connect clients/servers to.
 */
#undef	UNIXPORT

/*
 * IRC_UID
 *
 * If you start the server as root but wish to have it run as another user,
 * define IRC_UID to that UID.  This should only be defined if you are running
 * as root and even then perhaps not.
 */
#undef	IRC_UID
#undef	IRC_GID

#ifdef	notdef
#define	IRC_UID	65534	/* eg for what to do to enable this feature */
#define	IRC_GID	65534
#endif

/*
 * CLIENT_FLOOD
 *
 * this controls the number of bytes the server will allow a client to
 * send to the server without processing before disconnecting the client for
 * flooding it.  Values greater than 8000 make no difference to the server.
 */
#define	CLIENT_FLOOD	1000

/* Remote query flood protection. */
#define	CHREPLLEN	8192

/* Default server for standard client */
#define	UPHOST	"irc"


/*
 * If you wish to run services, define USE_SERVICES. 
 * This can make the server noticeably bigger and slower.
 * services are not fully implemented yet, so don't use it unless you really
 * know what you are doing.
 */
#undef USE_SERVICES


/*
 * Define the following to make the delay for nicks random.
 * Some people believe a bot can exactly time the delay and don't like it,
 * I think this is a useless concern. -krys
 */
#undef RANDOM_NDELAY


/*
 * You've read the BOFH saga and you liked it, then define the following.
 *
 * The two following will change the nick delay and channel delay features
 * making them totally user unfriendly but more efficient.
 */
#undef BETTER_NDELAY
#undef BETTER_CDELAY


/*
 * Defining this will enable the use of compressed server-server links.
 * In order to have it work, you must have the zlib version 1.0 or higher.
 * The library and the include files must have been found by configure,
 * if you have installed the zlib after running configure, run it again.
 */
#undef ZIP_LINKS


/*
 * Defining this will add an artificial 2 seconds delay for accepting
 * connections.  This is the OLD behaviour of the server.
 *
 * NOTE: Undefining this leads to a significant increase in CPU usage if
 * you reject client which keeps connecting.
 */
#undef	SLOW_ACCEPT


/*
 * Defining this will make the server check for rapid connections from a single
 * host and reject new connections from this host if the limit is reached.
 *
 * NOTE: Enabling this feature will significantly increase the CPU usage
 * for servers carrying several hundred clients and getting many connections.
 *
 * IMPORTANT: This **MUST** defined if SLOW_ACCEPT is NOT defined
 */
#define	CLONE_CHECK


/*
 * Because ip6.arpa is still not delegated for the 6bone (3ffe::/16)
 * this options allows you to still resolve it using ip6.int.
 */
#define SIXBONE_HACK

/*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */
/*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */
/*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */

/* You shouldn't change anything below this line, unless absolutely needed. */


#ifdef	OPER_KILL
/* LOCAL_KILL_ONLY
 *
 * To be used, OPER_KILL must be defined.
 * LOCAL_KILL_ONLY restricts KILLs to clients which are connected to the
 * server the Operator is connected to (ie lets them deal with local
 * problem users or 'ghost' clients
 */
#define	LOCAL_KILL_ONLY
#endif

/* Default server port, used by client. */
#define	PORTNUM	6667

/* Maximum length the queue of pending connections to one port may grow to. */ 
#define LISTENQUEUE 128


/* define DEBUGMODE to enable debugging mode.*/
#undef	DEBUGMODE

/*
 * Time interval to wait and if no messages have been received, then check for
 * PINGFREQUENCY and CONNECTFREQUENCY 
 */
#define TIMESEC  60		/* Recommended value: 60 */

/*
 * If daemon doesn't receive anything from any of its links within
 * PINGFREQUENCY seconds, then the server will attempt to check for
 * an active link with a PING message. If no reply is received within
 * (PINGFREQUENCY * 2) seconds, then the connection will be closed.
 */
#define PINGFREQUENCY    120	/* Recommended value: 120 */

/*
 * If the connection to to uphost is down, then attempt to reconnect every 
 * CONNECTFREQUENCY  seconds.
 */
#define CONNECTFREQUENCY 600	/* Recommended value: 600 */

/*
 * Often net breaks for a short time and it's useful to try to
 * establishing the same connection again faster than CONNECTFREQUENCY
 * would allow. But, to keep trying on bad connection, we require
 * that connection has been open for certain minimum time
 * (HANGONGOODLINK) and we give the net few seconds to steady
 * (HANGONRETRYDELAY). This latter has to be long enough that the
 * other end of the connection has time to notice it broke too.
 */
#define HANGONRETRYDELAY 30	/* Recommended value: 30 seconds */
#define HANGONGOODLINK 900	/* Recommended value: 15 minutes */

/*
 * Number of seconds to wait for write to complete if stuck.
 */
#define WRITEWAITDELAY     15	/* Recommended value: 15 */

/*
 * Number of seconds to wait for DNS/authentication to complete.
 * Note that iauth's default timeout per module is 30 seconds, so this value
 * should be at least 30 * number of modules.  Extra time should really be
 * given to be safe.
 */
#define	ACCEPTTIMEOUT      90	/* Recommended value: 90 */

/*
 * Max time from the nickname change that still causes KILL
 * automaticly to switch for the current nick of that user. (seconds)
 */
#define KILLCHASETIMELIMIT 90   /* Recommended value: 90 */

/*
 * Max time for the channel history and nick delay to be effective.
 * It should be the same value on all servers of a same net, and
 * be greater than the split durations usually seen.
 * DELAYCHASETIMELIMIT is the default.
 */
#define DELAYCHASETIMELIMIT	1800	/* Recommended value: 1800 */

/*
 * Max time for !channel history, this *MUST* be fairly long (usually
 * much longer than the value above) to ensure shortname unicity.
 * It makes very little sense to use a short time limit here.
 */
#define LDELAYCHASETIMELIMIT	5400	/* Recommended value: 5400 */

/*
 * Max number of channels a user is allowed to join.
 */
#define MAXCHANNELSPERUSER  10	/* Recommended value: 10 */

/*
 * USE_IAUTH makes ircd use the iauth program for authentication.
 * it can always be overriden by using the -s switch
 */
#define USE_IAUTH

#ifdef ZIP_LINKS
/*
 * the compression level used. (Suggested values: 3, 4, 5)
 * Above 5 will only give a *very* marginal increase in compression for a
 * *very* large increase in CPU usage.
 */ 
# define	ZIP_LEVEL	5
#endif

#ifdef	CLONE_CHECK
/*
 * If CLONE_CHECK has been defined, these control how the checks are performed,
 * and how the alarm is triggered.
 */
# define	CLONE_MAX	10
# define	CLONE_PERIOD	2
#endif


/*
 * define NO_IDENT if you don't want to support ident (RFC1413).
 * it is a VERY bad idea to do so, since this will make it impossible to
 * efficientely track abusers.
 * NO_PREFIX should always be undefined.
 */
/* #undef	NO_IDENT */
/* #undef	NO_PREFIX */

/* ------------------------- END CONFIGURATION SECTION -------------------- */
#ifndef ENABLE_SUMMON
#  undef LEAST_IDLE
#endif

#define SEQ_NOFILE    128	/* For Dynix (sequent OS) users : 
				 * set to your current kernel impl,
				 * max number of socket connections;
				 * ignored on other OS.	
				 */
/*
 * safety margin so we can always have one spare fd, for motd/authd or
 * whatever else.  -5 allows "safety" margin of 1 and space reserved.
 */
#define	MAXCLIENTS	(MAXCONNECTIONS-5)

#if defined(CLIENT_FLOOD)
# if	(CLIENT_FLOOD > 8000) || (CLIENT_FLOOD < 512)
error CLIENT_FLOOD needs redefining.
# endif
#else
error CLIENT_FLOOD undefined
#endif

#if defined(ZIP_LINKS)
# if	(ZIP_MINIMUM > ZIP_MAXIMUM)
error ZIP_MINIMUM needs redefining.
# endif
#endif

#if !defined(SLOW_ACCEPT) && !defined(CLONE_CHECK)
# define	CLONE_CHECK
# define	CLONE_MAX       2                                     
# define	CLONE_PERIOD    10       
#endif

/*
** you wouldn't want to compress messages one by one.. would you?
** (it's not implemented anyways)
*/
#ifdef	ZIP_LINKS
# define	SENDQ_ALWAYS
#endif

#if ! USE_POLL
# if (MAXCONNECTIONS > FD_SETSIZE)
error FD_SETSIZE must be bigger than MAXCONNECTIONS
# endif
#endif

/*
** buffer used for iauth-ircd communication
** very big servers might consider increasing it
*/
#ifdef USE_IAUTH
# define       IAUTH_BUFFER    65535
#endif

/*
** Make sure that if zlib isn't found, or you don't want to use it, that you
** don't define ZIP_LINKS
*/
#ifndef	USE_ZLIB
#undef	ZIP_LINKS
#endif

/*
** Make sure TIMEDKLINES is defined along with R_LINES_OFTEN
**
*/
#if defined(R_LINES_OFTEN) && !defined(TIMEDKLINES)
error TIMEDKLINES must be defined for R_LINES_OFTEN to work (are you sure you need them?)
#endif


/*
** You should not want to change this. ;)
*/
#define	NOWRITEALARM	1


/*
** Accept only hostnames conforming to RFC1034/1035/1123.
** Conformance of the internal resolver to RFC1123.
*/
#define	RESTRICT_HOSTNAMES	1




/*
** SUN_GSO_BUG VALLOC INET6 MIN_CHANOP_SERV FAILED_OPERLOG TOPICWHOTIME NOSPOOF
** not documented (here)
*/