/* serverinfo: contains services information */
serverinfo {
        /* name: the name of our services */
        name = "ratbox.services";

	/* sid: the unique server id of services.  This follows the same
	 * form as ircd, eg [0-9][A-Z0-9][A-Z0-9]
	 */
	sid = "36D";

        /* description: the description of our services */
        description = "ratbox services";

        /* vhost: default vhost to use for connections */
        # vhost = "127.0.0.1";

	/* dcc vhost: default vhost to use for dcc connections.
	 * this must be set for /ctcp <service> chat to work.
	 */
	# dcc_vhost = "127.0.0.1";

	/* dcc ports: specifies the portrange to use for inbound
	 * chat requests.
	 */
	dcc_low_port = 3000;
	dcc_high_port = 5000;

	/* reconnect time: time duration between reconnections to
	 * our uplinks.
	 */
	reconnect_time = 5 minutes;

	/* ping time: time duration to send PINGs after no data */
	ping_time = 5 minutes;

	/* ratbox: pure ircd-ratbox/hyb7 network */
	ratbox = yes;

	/* client flood settings: control how many commands an individual
	 * user may issue in the given time.  The limits work on a penalty
	 * points system, with between 1-3 points per command.  HELP has 
	 * a penalty of 2.
	 */
	/* client flood max: the maximum score a client may have before we
	 * stop parsing commands from them.
	 */
	client_flood_max = 20;

	/* client flood max ignore: the score at which we start ignoring a
	 * client.
	 */
	client_flood_max_ignore = 30;

	/* client flood ignore time: the duration for which we ignore a 
	 * client.
	 */
	client_flood_ignore_time = 5 minutes;

	/* client flood time: the length of time to keep the clients current
	 * flooding score for.
	 */
	client_flood_time = 1 minute;

	/* allow stats o: allow stats O requests to list opers.  This
	 * will only ever be allowed from ircops/services opers
	 */
	allow_stats_o = yes;

	/* allow sslonly: allow users to set +S (SSL only) channelmode
	 * through chanserv.  This affects chanserv only -- services will
	 * always parse and accept +S from the ircd.
	 *
	 * IMPORTANT: do not enable this, if it is not enabled on the ircd.
	 */
	allow_sslonly = no;

	/* default language: the default language to use when communicating
	 * with users.  If userserv is enabled, users may also pick their
	 * own language from the list.  Note, there is no error checking
	 * for whether this is a valid/available language.
	 *
	 * Available languages:
	 *   en		- English
	 */
	#default_language = "en";
};

/* email settings: these settings configure how (if at all) we send email.
 *
 * IMPORTANT: sending emails carries with it a risk of exposing the
 * hidden ips of services servers -- your local mail server should
 * take whatever steps are necessary to avoid disclosing private
 * ips.  Ideally, this would involve relaying through another
 * (public) mail server which strips out originating headers.
 */
email {
	/* disable email: a master switch to disable sending of emails.
	 * This will prevent ratbox-services from ever sending emails, and
	 * will disable usage of commands that require emails.
	 */
	disable_email = yes;

	/* program: email will only ever be sent through a local program,
	 * this controls the program we call to do it.  This should 
	 * be a comma seperated list of quoted strings, starting with the
	 * email program instead and then optionally any arguments it takes.
	 */
	email_program = "/usr/sbin/sendmail", "-t";

	/* email name: the "name" of the user emails originate from */
	email_name = "services";

	/* email address: the address emails originate from */
	email_address = "services@example.com";

	/* email limits: these two options control the maximum number of
	 * emails we will send in a specified duration
	 */
	email_number = 15;
	email_duration = 1 minute;
};

/* admin: contains general admin information */
admin {
	name = "IRC Admin";
	description = "Server Administrator";
	email = "<root@localhost>";
};

/* connect: specifies a server to connect to, name of uplink
 *          is specified in quotation marks
 */
connect "<%= servername %>" {
        /* host: the host to connect to */
        host = "127.0.0.1";

        /* vhost: optional vhost to use for this connection */
        # vhost = "10.0.0.2";

        /* password: the password to use */
        password = "<%= servpass %>";

        /* port: the port to connect on */
        port = <%= port %>;

	/* autoconn: auto connect to this server.  default yes */
	# autoconn = no;
};

/* operator: specifies an oper who has extended access to services.
 *           The username is specified in quotation marks.
 */
operator "root" {
        /* user: specifies a user@host who may connect.
	 * multiple may be specified, wildcards are accepted.
         */
<% operator.each do |user| -%>
	user = "<%= user %>";
<% end -%>

	/* you may also restrict the oper to a specific server, they will
	 * then only be able to connect when using that server.
	 */
	#user = "flame@127.0.0.1", "irc.ircd-ratbox.org";

        /* password: the password to login */
        password = "<%= operpass %>";

        /* encrypted: specifies whether the above password has been
         * encrypted or not.  default: yes
         */
        encrypted = yes;

	/* flags: specifies what general privs an oper has
	 *   admin       - services admin, .die etc
	 *   dcc         - ability to dcc
	 *   route       - ability to route services to uplinks
	 */
	flags = admin, dcc, route;

	/* userserv flags:
	 *   admin	- all of the below
	 *   register	- access to register any username
	 *   suspend	- access to (un)suspend users
	 *   drop	- access to drop usernames
	 *   setpass	- access to reset passwords on accounts
	 *   setemail	- access to reset email addresses on accounts
	 *   oper	- all of the below
	 *   list	- access to list registered users
	 *   info	- access to extended username info
	 */
	userserv = admin;

	/* chanserv flags:
	 *   admin	- all of the below
	 *   register	- access to register any channel to any user
	 *   suspend	- access to (un)suspend channels
	 *   drop	- access to drop channel registrations
	 *   oper	- all of the below
	 *   list	- access to list registered chans
	 *   info	- access to extended channel info
	 */
	chanserv = admin;

	/* nickserv flags:
	 *  drop	- access to drop nickname registrations
	 */
	nickserv = drop;

	/* operserv flags:
	 *  maintain	- access to OPERSERV::DIE OPERSERV::REHASH and
	 *		  OPERSERV::DBSYNC
	 *  ignore	- control over services ignore list
	 *  admin	- all of the below
	 *  channel	- access to control the channels operserv is in
	 *  takeover	- access to OPERSERV::TAKEOVER
	 *  osmode	- access to OPERSERV::OSMODE
	 */
	operserv = admin;

	/* operbot flags:
	 *   channel	- access to control the channels operbot is in
	 */
	operbot = channel;

	/* global flags:
	 *   netmsg	- access to GLOBAL::NETMSG
	 *   welcome    - ability to modify welcome messages sent when a
	 *                user connects to irc
	 */
	global = netmsg, welcome;

	/* jupeserv flags:
	 *   jupe	- access to (un)jupe
	 */
	jupeserv = jupe;

	/* banserv flags:
	 *   kline	- access to set klines
	 *   xline	- access to set xlines
	 *   resv	- access to set resvs
	 *   perm	- access to set permanent bans
	 *   remove	- access to remove other opers bans
	 *   sync       - access to sync bans to a given server  Opers 
	 *		  can always sync bans to their own server.
	 *   regexp     - access to set regular expression matches
	 *                against connecting clients
	 *   nomax	- client is exempt from any limits on maximum
	 *		  matches to a ban
	 */
	banserv = kline, xline, resv, perm, remove, regexp, sync;
};

/* userserv - provides facilities to users for the registration of
 * usernames.  Required for channel registration.
 */
service "userserv" {
	/* nick: specify the nick of the service */
	nick = "USERSERV";

	/* username: specify the username of the service */
	username = "user";

	/* host: specify the host of the service */
	host = "services.int";

	/* realname: the real name field of the service */
	realname = "user registration service";

	/* flags: specifies options for this service
	 *   opered     - this service is opered
	 *   msg_self   - messages from this service come from its nickname,
	 *                rather than our servername
	 *   disabled   - this service is disabled
	 *   short_help - send an simple list of commands, rather than an
	 *                index containing brief documentation of each command
	 *   stealth    - service ignores any messages from normal users
	 *   		  who havent issued OLOGIN.  OLOGIN itself will 
	 *                always be accepted.  ircops are exempt.
	 *   login_help - requires normal users are logged in before HELP
	 *                can be used
	 *   wallop_adm - send server wallops when admin commands are used
	 *                jupeserv sends wallops even without this
	 *   require_shortcut - require commands to this service are sent
	 *                      using the command shortcuts (eg /chanserv)
	 */
	flags = opered, msg_self;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - REGISTER
	 *   3 - SET, RESETPASS
	 *   4 - 
	 *   5 - LOGIN
	 */
	loglevel = 5;

	/* disable register: disables USERSERV::REGISTER for users */
	#disable_register = yes;

	/* register url: optional url to point users towards when
	 * disable_register is set above.
	 */
	#register_url = "http://whatever/";

	/* register limits: amount of user registrations to allow overall
	 * from all clients, in the given time
	 */
	register_time = 1 minute;
	register_amount = 5;

	/* host register limits: amount of user registrations to allow from
	 * a specific host, in the given time
	 */
	host_register_time = 1 day;
	host_register_amount = 2;

	/* register email: require an email address to register a username */
	register_email = no;

	/* register verify: ignore the password the user supplies when
	 * registering a username and email them a password instead.
	 */
	register_verify = no;

	/* expire times: these durations control how long usernames can be
	 * unused before they are expired.  Settings are for normal
	 * usernames, suspended usernames and unverified usernames.
	 */
	expire_time = 4 weeks;
	expire_suspended_time = 4 weeks;
	expire_unverified_time = 1 day;

	/* expiry bonuses: these allow you to grant extra expiry bonuses to
	 * usernames that have been registered for a given length of time,
	 * extending the length of time they can be unused before expiry.
	 */
	/* expire bonus regtime: start granting expiry bonuses once a
	 * username has been registered for this length of time
	 */
	expire_bonus_regtime = 2 months;

	/* expire bonus: grant an expiry bonus of a given duration, for
	 * every length of time a username has been registered, upto a
	 * maximum bonus of a given limit.
	 */
	expire_bonus = 1 day;
	expire_bonus_per_time = 2 weeks;
	expire_bonus_max = 4 weeks;

	/* allow set password: allow users to change their password */
	allow_set_password = yes;

	/* allow resetpass: allow users to request a reset of their
	 * password.  They will be sent an email containing a token, which
	 * they must then use to confirm the password reset.
	 */
	allow_resetpass = no;
	
	/* allow resetemail: allow users to request a reset of their
	 * email. This happens by two steps. They will be sent an email
	 * to their current email containing a token, which they must
	 * then use to confirm the email reset. Another mail is then
	 * sent to the new address to verify it's validity.
	 */
	allow_resetemail = no;

	/* resetpass_duration: the duration a USERSERV::RESETPASS request is
	 * kept around whilst waiting for confirmation.  Note: users can
	 * only have one request pending for confirmation.
	 */
	resetpass_duration = 1 day;
	
	/* resetemail_duration: the duration a USERSERV::RESETEMAIL request is
	 * kept around whilst waiting for confirmation.  Note: users can
	 * only have one request pending for confirmation.
	 */
	resetemail_duration = 1 day;

	/* reset regtime duration: duration a username must be registered for
	 * before they can use resetpass/resetemail commands on it
	 */
	reset_regtime_duration = 2 weeks;

	/* allow set email: allow users to change their email addy */
	allow_set_email = yes;

	/* max logins: maximum amount of clients who may be logged into a
	 * single username
	 */
	max_logins = 5;

	/* show suspend reasons: show suspend reasons to users (but not the
	 * admin who suspended the channel) 
	 */
	show_suspend_reasons = no;
};

/* chanserv - provides facilities for the registration of channels. */
service "chanserv" {
	nick = "CHANSERV";
	username = "chan";
	host = "services.int";
	realname = "channel registration service";
	flags = opered, login_help;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - REGISTER
	 *   3 - LISTUSERS, DELOWNER
	 *   4 - CLEARMODES, CLEAROPS, CLEARALLOPS, CLEARBANS
	 *   5 - ADDUSER, DELUSER, MODUSER
	 *   6 - Everything.
	 */
	loglevel = 3;

	/* disable register: disables CHANSERV::REGISTER for users */
	#disable_register = yes;

	/* register limits: amount of user registrations to allow overall
	 * from all clients, in the given time
	 */
	register_time = 1 minute;
	register_amount = 5;

	/* host register limits: amount of user registrations to allow from
	 * a specific host, in the given time
	 */
	host_register_time = 1 day;
	host_register_amount = 4;

	/* expire times: these durations control how long channels can be
	 * unused before they are expired.  Settings are for normal
	 * channels and suspended channels
	 */
	expire_time = 4 weeks;
	expire_suspended_time = 4 weeks;

	/* max bans: maximum amount of bans a channel may have */
	max_bans = 50;

	/* expireban frequency: how often to run the expiry of channel
	 * bans.  It is advised this is not set lower than 5 minutes, as the
	 * expiry code is quite cpu intensive.  This value is also only
	 * used on startup and is not changed on rehash.
	 */
	expireban_frequency = 15 minutes;

	/* enforcetopic frequency: how often to reset topics on channels to
	 * that stored within chanserv.
	 */
	enforcetopic_frequency = 1 hour;

	/* autojoin empty: honour autojoin flags for empty channels.  With
	 * this off (as is default) chanserv will instead automatically 
	 * remove itself from channels where its the only member, except when
	 * it needs to enforce bans etc.
	 *
	 * Enabling this can lead to lots of channels where chanserv is the
	 * only person in there.
	 */
	autojoin_empty = no;

	/* email delowner: require users removing themselves as owner of a
	 * channel to confirm the action using a token sent through email
	 */
	email_delowner = no;

	/* delowner duration: if email_delowner is enabled, the duration the
	 * tokens last.
	 */
	delowner_duration = 1 day;

	/* show suspend reasons: show suspend reasons to users (but not the
	 * admin who suspended the channel) 
	 */
	show_suspend_reasons = no;
};

/* nickserv - provides nickname registration.  These require a username
 * registration.
 */
service "nickserv" {
	nick = "NICKSERV";
	username = "nick";
	host = "services.int";
	realname = "nickname services";

	/* disabled by default */
	flags = opered, msg_self;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - REGISTER
	 *   3 - DROP
	 *   4 -
	 *   5 - INFO
	 */
	loglevel = 3;

	/* max nicks: maximum nicknames a user may register */
	max_nicks = 2;

	/* allow set warn: enable NICKSERV::SET::WARN, which allows users to
	 * set nickname warnings on their nicknames, simple notices which
	 * tell users the nickname is registered.
	 */
	allow_set_warn = yes;

	/* warn string: string give to clients when they use a registered
	 * nickname.
	 */
	warn_string = "This nickname is registered, you may be disconnected if a user regains this nickname.";
};

/* operserv - provides facilities for issuing modes and takeovers */
service "operserv" {
	nick = "OPERSERV";
	username = "oper";
	host = "services.int";
	realname = "oper services";
	flags = opered, msg_self, stealth, wallop_adm;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - DBSYNC, LISTOPERS
	 */
	loglevel = 1;

	/* allow die: allow OPERSERV::DIE over irc */
	allow_die = yes;
};

/* jupeserv - provides opers and admins the ability to jupe servers
 * preventing them from connecting to the network.
 */
service "jupeserv" {
	nick = "JUPESERV";
	username = "jupe";
	host = "services.int";
	realname = "server jupe service";
	flags = opered, msg_self, stealth;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - CALLJUPE/CALLUNJUPE
	 *   3 - PENDING
	 */
	loglevel = 2;

	/* merge into operserv: merge all of this services commands into the
	 * operserv service.  This option is only used when ratbox-services
	 * starts.
	 *
	 * Note: If this service is merged into operserv, it will follow the
	 * service flags and loglevel from operserv.
	 */
	merge_into_operserv = no;

	/* oper jupe options.  The following options control jupes/unjupes
	 * which can be initiated by any oper, without needing special
	 * services access.
	 */
	/* oper score: the score an oper contributes towards a jupe/unjupe.
	 * Set to 0 to disallow regular opers calling jupes/unjupes.
	 */
	oper_score = 3;

	/* jupe score: the score needed to trigger a jupe.
	 * Set to 0 to disallow regular opers calling jupes.
	 */
	jupe_score = 15;

	/* unjupe score: the score needed to trigger an unjupe.
	 * Set to 0 to disallow regular opers calling unjupes.
	 */
	unjupe_score = 15;

	/* pending time: how long pending jupes/unjupes last whilst
	 * untriggered.
	 */
	pending_time = 30 minutes;
};

/* operbot - a bot which will invite/op ircops in the set channels.   Useful
 * for oper only channels etc.
 */
service "operbot" {
	nick = "operbot";
	username = "operbot";
	host = "services.int";
	realname = "oper op/invite services";
	flags = opered, msg_self, stealth;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 */
	loglevel = 1;
};

/* alis - a list service that lets users list channels according to more
 * specific criteria than an ircd allows.
 */
service "alis" {
	nick = "alis";
	username = "alis";
	host = "services.int";
	realname = "Advanced List Service - /msg alis help";
	flags = msg_self;

	/* loglevel:
	 *   1 - LIST
	 */
	loglevel = 1;

	/* max matches: maximum number of channels to output from LIST */
	max_matches = 60;
};

/* global - the global messaging service.  Allows messages to be sent
 * to all users on the network.
 */
service "global" {
	nick = "GLOBAL";
	username = "global";
	host = "services.int";
	realname = "Network Message Service";

	/* this service *MUST* be opered. */
	flags = opered, msg_self, stealth;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 */
	loglevel = 1;
};

/* banserv - the ban service.  Allows bans (klines/xlines/resvs) to be
 * sent to all servers.  These bans can only be set on ircd-ratbox servers
 * running version 1.5 and above.
 */
service "banserv" {
	nick = "BANSERV";
	username = "banserv";
	host = "services.int";
	realname = "Ban Service";
	flags = opered, msg_self, stealth;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 *   2 - LISTWELCOME
	 */
	loglevel = 1;

	/* merge into operserv: merge all of this services commands into the
	 * operserv service.  This option is only used when ratbox-services
	 * starts.
	 *
	 * Note: If this service is merged into operserv, it will follow the
	 * service flags and loglevel from operserv.
	 */
	merge_into_operserv = no;

	/* unban time: duration unklines etc are kept around in the
	 * database to be synced with servers.
	 */
	unban_time = 2 weeks;

	/* regexp time: when issuing klines for users who match regexps, how
	 * long to make the kline last
	 */
	regexp_time = 1 day;

	/* max kline matches: maximum number of users a kline can match.  Set to
	 * 0 to disable.
	 */
	max_kline_matches = 200;

	/* max xline matches: maximum number of users an xline can match.  Set to
	 * 0 to disable.
	 */
	max_xline_matches = 200;

	/* max regexp matches: maximum number of users a regular expression can
	 * match.  regexps that match more than this amount of users will be
	 * rejected.  Set to 0 to disable.
	 */
	max_regexp_matches = 200;

	/* temp workaround: work around short time limits for temporary
	 * bans, by issuing an unban for it first then reissuing the ban.
	 * ratbox-2.0.8 and below, and ratbox-2.1.2 and below have a maximum
	 * temp time of 4 weeks, which can cause some bans to expire even
	 * when banserv expects them to still be set.
	 *
	 * The only way for banserv to extend the expiry on these servers is
	 * to issue an unban first.  The temp workaround does this for all
	 * temporary bans.
	 */
	temp_workaround = no;

	/* autosync frequency: how often to automatically sync bans to
	 * all servers.  Set to 0 to disable.
	 */
	autosync_frequency = 2 weeks;
};

/* watchserv - the service for watching commands issued to services. */
service "watchserv" {
	nick = "WATCHSERV";
	username = "watchserv";
	host = "services.int";
	realname = "Command Watching Service";
	flags = msg_self, stealth;

	/* loglevel: level to log at, 0 to disable logging
	 *   1 - Admin commands
	 */
	loglevel = 1;

	/* merge into operserv: merge all of this services commands into the
	 * operserv service.  This option is only used when ratbox-services
	 * starts.
	 *
	 * Note: If this service is merged into operserv, it will follow the
	 * service flags and loglevel from operserv.
	 */
	merge_into_operserv = no;
};

/* memoserv - the service for sending memos */
service "memoserv" {
	nick = "MEMOSERV";
	username = "memoserv";
	host = "services.int";
	realname = "Memo Service";
	flags = msg_self;

	/* loglevel: level to log at, 0 to disable logging
	 *
	 *   2 - SEND
	 *   3 - LIST, READ, DELETE
	 */
	loglevel = 0;

	/* max memos: maximum number of memos a user may have. */
	max_memos = 50;

	/* memo regtime duration: duration a username must be registered for
	 * before they can send memos
	 */
	memo_regtime_duration = 1 week;
};
