$ENV{'PATH'} = '/bin:/usr/bin';
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
###########################################################################
# What to backup and when to do it
# (can be overridden in the per-PC config.pl)
###########################################################################
#
# Minimum period in days between full backups. A full dump will only be
# done if at least this much time has elapsed since the last full dump,
# and at least $Conf{IncrPeriod} days has elapsed since the last
# successful dump.
#
# Typically this is set slightly less than an integer number of days. The
# time taken for the backup, plus the granularity of $Conf{WakeupSchedule}
# will make the actual backup interval a bit longer.
#
$Conf{FullPeriod} = <%= full_period -%>;

#
# Minimum period in days between incremental backups (a user requested
# incremental backup will be done anytime on demand).
#
# Typically this is set slightly less than an integer number of days. The
# time taken for the backup, plus the granularity of $Conf{WakeupSchedule}
# will make the actual backup interval a bit longer.
#
$Conf{IncrPeriod} = <%= incr_period -%>;

#
# Number of full backups to keep.  Must be >= 1.
#
# In the steady state, each time a full backup completes successfully
# the oldest one is removed.  If this number is decreased, the
# extra old backups will be removed.
#
# If filling of incremental dumps is off the oldest backup always
# has to be a full (ie: filled) dump.  This might mean one or two
# extra full dumps are kept until the oldest incremental backups expire.
#
# Exponential backup expiry is also supported.  This allows you to specify:
#
#   - num fulls to keep at intervals of 1 * $Conf{FullPeriod}, followed by
#   - num fulls to keep at intervals of 2 * $Conf{FullPeriod},
#   - num fulls to keep at intervals of 4 * $Conf{FullPeriod},
#   - num fulls to keep at intervals of 8 * $Conf{FullPeriod},
#   - num fulls to keep at intervals of 16 * $Conf{FullPeriod},
#
# and so on.  This works by deleting every other full as each expiry
# boundary is crossed.
#
# Exponential expiry is specified using an array for $Conf{FullKeepCnt}:
#
#   $Conf{FullKeepCnt} = [4, 2, 3];
#
# Entry #n specifies how many fulls to keep at an interval of
# 2^n * $Conf{FullPeriod} (ie: 1, 2, 4, 8, 16, 32, ...).
#
# The example above specifies keeping 4 of the most recent full backups
# (1 week interval) two full backups at 2 week intervals, and 3 full
# backups at 4 week intervals, eg:
#
#    full 0 19 weeks old   \
#    full 1 15 weeks old    >---  3 backups at 4 * $Conf{FullPeriod}
#    full 2 11 weeks old   / 
#    full 3  7 weeks old   \____  2 backups at 2 * $Conf{FullPeriod}
#    full 4  5 weeks old   /
#    full 5  3 weeks old   \
#    full 6  2 weeks old    \___  4 backups at 1 * $Conf{FullPeriod}
#    full 7  1 week old     /
#    full 8  current       /
#
# On a given week the spacing might be less than shown as each backup
# ages through each expiry period.  For example, one week later, a
# new full is completed and the oldest is deleted, giving:
#
#    full 0 16 weeks old   \
#    full 1 12 weeks old    >---  3 backups at 4 * $Conf{FullPeriod}
#    full 2  8 weeks old   / 
#    full 3  6 weeks old   \____  2 backups at 2 * $Conf{FullPeriod}
#    full 4  4 weeks old   /
#    full 5  3 weeks old   \
#    full 6  2 weeks old    \___  4 backups at 1 * $Conf{FullPeriod}
#    full 7  1 week old     /
#    full 8  current       /
#
# You can specify 0 as a count (except in the first entry), and the
# array can be as long as you wish.  For example:
#
#   $Conf{FullKeepCnt} = [4, 0, 4, 0, 0, 2];
#
# This will keep 10 full dumps, 4 most recent at 1 * $Conf{FullPeriod},
# followed by 4 at an interval of 4 * $Conf{FullPeriod} (approx 1 month
# apart), and then 2 at an interval of 32 * $Conf{FullPeriod} (approx
# 7-8 months apart).
#
# Example: these two settings are equivalent and both keep just
# the four most recent full dumps:
#
#    $Conf{FullKeepCnt} = 4;
#    $Conf{FullKeepCnt} = [4];
#
$Conf{FullKeepCnt} = <%= keep_full -%>;

#
# Very old full backups are removed after $Conf{FullAgeMax} days.  However,
# we keep at least $Conf{FullKeepCntMin} full backups no matter how old
# they are.
#
# Note that $Conf{FullAgeMax} will be increased to $Conf{FullKeepCnt}
# times $Conf{FullPeriod} if $Conf{FullKeepCnt} specifies enough
# full backups to exceed $Conf{FullAgeMax}.
#
$Conf{FullKeepCntMin} = <%= keep_full -%>;
$Conf{FullAgeMax}     = <%= maxage_full -%>;

#
# Number of incremental backups to keep.  Must be >= 1.
#
# In the steady state, each time an incr backup completes successfully
# the oldest one is removed.  If this number is decreased, the
# extra old backups will be removed.
#
$Conf{IncrKeepCnt} = <%= keep_incr -%>;

#
# Very old incremental backups are removed after $Conf{IncrAgeMax} days.
# However, we keep at least $Conf{IncrKeepCntMin} incremental backups no
# matter how old they are.
#
$Conf{IncrKeepCntMin} = <%= keep_incr -%>;
$Conf{IncrAgeMax}     = <%= maxage_incr -%>;

#
# Level of each incremental.  "Level" follows the terminology
# of dump(1).  A full backup has level 0.  A new incremental
# of level N will backup all files that have changed since
# the most recent backup of a lower level.
#
# The entries of $Conf{IncrLevels} apply in order to each
# incremental after each full backup.  It wraps around until
# the next full backup.  For example, these two settings
# have the same effect:
#
#       $Conf{IncrLevels} = [1, 2, 3];
#       $Conf{IncrLevels} = [1, 2, 3, 1, 2, 3];
#
# This means the 1st and 4th incrementals (level 1) go all
# the way back to the full.  The 2nd and 3rd (and 5th and
# 6th) backups just go back to the immediate preceeding
# incremental.
#
# Specifying a sequence of multi-level incrementals will
# usually mean more than $Conf{IncrKeepCnt} incrementals will
# need to be kept, since lower level incrementals are needed
# to merge a complete view of a backup.  For example, with
#
#       $Conf{FullPeriod}  = 7;
#       $Conf{IncrPeriod}  = 1;
#       $Conf{IncrKeepCnt} = 6;
#       $Conf{IncrLevels}  = [1, 2, 3, 4, 5, 6];
#
# there will be up to 11 incrementals in this case: 
#
#       backup #0  (full, level 0, oldest)
#       backup #1  (incr, level 1)
#       backup #2  (incr, level 2)
#       backup #3  (incr, level 3)
#       backup #4  (incr, level 4)
#       backup #5  (incr, level 5)
#       backup #6  (incr, level 6)
#       backup #7  (full, level 0)
#       backup #8  (incr, level 1)
#       backup #9  (incr, level 2)
#       backup #10 (incr, level 3)
#       backup #11 (incr, level 4)
#       backup #12 (incr, level 5, newest)
#
# Backup #1 (the oldest level 1 incremental) can't be deleted
# since backups 2..6 depend on it.  Those 6 incrementals can't
# all be deleted since that would only leave 5 (#8..12).
# When the next incremental happens (level 6), the complete
# set of 6 older incrementals (#1..6) will be deleted, since
# that maintains the required number ($Conf{IncrKeepCnt})
# of incrementals.  This situation is reduced if you set
# shorter chains of multi-level incrementals, eg:
#
#       $Conf{IncrLevels}  = [1, 2, 3];
#
# would only have up to 2 extra incremenals before all 3
# are deleted.
#
# BackupPC as usual merges the full and the sequence
# of incrementals together so each incremental can be
# browsed and restored as though it is a complete backup.
# If you specify a long chain of incrementals then more
# backups need to be merged when browsing, restoring,
# or getting the starting point for rsync backups.
# In the example above (levels 1..6), browing backup
# #6 requires 7 different backups (#0..6) to be merged.
#
# Because of this merging and the additional incrementals
# that need to be kept, it is recommended that some
# level 1 incrementals be included in $Conf{IncrLevels}.
#
# Prior to version 3.0 incrementals were always level 1,
# meaning each incremental backed up all the files that
# changed since the last full.
#
$Conf{IncrLevels} = [1];

#
# Disable all full and incremental backups.  These settings are
# useful for a client that is no longer being backed up
# (eg: a retired machine), but you wish to keep the last
# backups available for browsing or restoring to other machines.
#
# There are three values for $Conf{BackupsDisable}:
#
#   0    Backups are enabled.
#
#   1    Don't do any regular backups on this client.  Manually
#        requested backups (via the CGI interface) will still occur.
#
#   2    Don't do any backups on this client.  Manually requested
#        backups (via the CGI interface) will be ignored.
#
# In versions prior to 3.0 Backups were disabled by setting
# $Conf{FullPeriod} to -1 or -2.
#
$Conf{BackupsDisable} = 0;

#
# A failed full backup is saved as a partial backup.  The rsync
# XferMethod can take advantage of the partial full when the next
# backup is run. This parameter sets the age of the partial full
# in days: if the partial backup is older than this number of
# days, then rsync will ignore (not use) the partial full when
# the next backup is run.  If you set this to a negative value
# then no partials will be saved.  If you set this to 0, partials
# will be saved, but will not be used by the next backup.
#
# The default setting of 3 days means that a partial older than
# 3 days is ignored when the next full backup is done.
#
$Conf{PartialAgeMax} = <%= maxage_partial -%>;

#
# Whether incremental backups are filled.  "Filling" means that the
# most recent full (or filled) dump is merged into the new incremental
# dump using hardlinks.  This makes an incremental dump look like a
# full dump.  Prior to v1.03 all incremental backups were filled.
# In v1.4.0 and later the default is off.
#
# BackupPC, and the cgi interface in particular, do the right thing on
# un-filled incremental backups.  It will correctly display the merged
# incremental backup with the most recent filled backup, giving the
# un-filled incremental backups a filled appearance.  That means it
# invisible to the user whether incremental dumps are filled or not.
#
# Filling backups takes a little extra disk space, and it does cost
# some extra disk activity for filling, and later removal.  Filling
# is no longer useful, since file mangling and compression doesn't
# make a filled backup very useful. It's likely the filling option
# will be removed from future versions: filling will be delegated to
# the display and extraction of backup data.
#
# If filling is off, BackupPC makes sure that the oldest backup is
# a full, otherwise the following incremental backups will be
# incomplete.  This might mean an extra full backup has to be
# kept until the following incremental backups expire.
#
# The default is off.  You can turn this on or off at any
# time without affecting existing backups.
#
$Conf{IncrFill} = 0;

#
# Number of restore logs to keep.  BackupPC remembers information about
# each restore request.  This number per client will be kept around before
# the oldest ones are pruned.
#
# Note: files/dirs delivered via Zip or Tar downloads don't count as
# restores.  Only the first restore option (where the files and dirs
# are written to the host) count as restores that are logged.
#
$Conf{RestoreInfoKeepCnt} = 10;

#
# Number of archive logs to keep.  BackupPC remembers information
# about each archive request.  This number per archive client will
# be kept around before the oldest ones are pruned.
#
$Conf{ArchiveInfoKeepCnt} = 10;

#
# List of directories or files to backup.  If this is defined, only these
# directories or files will be backed up.
#
# For Smb, only one of $Conf{BackupFilesExclude} and $Conf{BackupFilesOnly}
# can be specified per share. If both are set for a particular share, then
# $Conf{BackupFilesOnly} takes precedence and $Conf{BackupFilesExclude}
# is ignored.
#
# This can be set to a string, an array of strings, or, in the case
# of multiple shares, a hash of strings or arrays.  A hash is used
# to give a list of directories or files to backup for each share
# (the share name is the key).  If this is set to just a string or
# array, and $Conf{SmbShareName} contains multiple share names, then
# the setting is assumed to apply all shares.
#
# If a hash is used, a special key "*" means it applies to all
# shares that don't have a specific entry.
#
# Examples:
#    $Conf{BackupFilesOnly} = '/myFiles';
#    $Conf{BackupFilesOnly} = ['/myFiles'];     # same as first example
#    $Conf{BackupFilesOnly} = ['/myFiles', '/important'];
#    $Conf{BackupFilesOnly} = {
#       'c' => ['/myFiles', '/important'],      # these are for 'c' share
#       'd' => ['/moreFiles', '/archive'],      # these are for 'd' share
#    };
#    $Conf{BackupFilesOnly} = {
#       'c' => ['/myFiles', '/important'],      # these are for 'c' share
#       '*' => ['/myFiles', '/important'],      # these are other shares
#    };
#
$Conf{BackupFilesOnly} = undef;

#
# List of directories or files to exclude from the backup.  For Smb,
# only one of $Conf{BackupFilesExclude} and $Conf{BackupFilesOnly}
# can be specified per share.  If both are set for a particular share,
# then $Conf{BackupFilesOnly} takes precedence and
# $Conf{BackupFilesExclude} is ignored.
#
# This can be set to a string, an array of strings, or, in the case
# of multiple shares, a hash of strings or arrays.  A hash is used
# to give a list of directories or files to exclude for each share
# (the share name is the key).  If this is set to just a string or
# array, and $Conf{SmbShareName} contains multiple share names, then
# the setting is assumed to apply to all shares.
#
# The exact behavior is determined by the underlying transport program,
# smbclient or tar.  For smbclient the exlclude file list is passed into
# the X option.  Simple shell wild-cards using "*" or "?" are allowed.
#
# For tar, if the exclude file contains a "/" it is assumed to be anchored
# at the start of the string.  Since all the tar paths start with "./",
# BackupPC prepends a "." if the exclude file starts with a "/".  Note
# that GNU tar version >= 1.13.7 is required for the exclude option to
# work correctly.  For linux or unix machines you should add
# "/proc" to $Conf{BackupFilesExclude} unless you have specified
# --one-file-system in $Conf{TarClientCmd} or --one-file-system in
# $Conf{RsyncArgs}.  Also, for tar, do not use a trailing "/" in
# the directory name: a trailing "/" causes the name to not match
# and the directory will not be excluded.
#
# Users report that for smbclient you should specify a directory
# followed by "/*", eg: "/proc/*", instead of just "/proc".
#
# FTP servers are traversed recursively so excluding directories will
# also exclude its contents.  You can use the wildcard characters "*"
# and "?" to define files for inclusion and exclusion.  Both
# attributes $Conf{BackupFilesOnly} and $Conf{BackupFilesExclude} can
# be defined for the same share.
#
# If a hash is used, a special key "*" means it applies to all
# shares that don't have a specific entry.
#
# Examples:
#    $Conf{BackupFilesExclude} = '/temp';
#    $Conf{BackupFilesExclude} = ['/temp'];     # same as first example
#    $Conf{BackupFilesExclude} = ['/temp', '/winnt/tmp'];
#    $Conf{BackupFilesExclude} = {
#       'c' => ['/temp', '/winnt/tmp'],         # these are for 'c' share
#       'd' => ['/junk', '/dont_back_this_up'], # these are for 'd' share
#    };
#    $Conf{BackupFilesExclude} = {
#       'c' => ['/temp', '/winnt/tmp'],         # these are for 'c' share
#       '*' => ['/junk', '/dont_back_this_up'], # these are for other shares
#    };
#
$Conf{BackupFilesExclude} = ['/proc', '/mnt', '/dev', '/sys', '/tmp'];

#
# PCs that are always or often on the network can be backed up after
# hours, to reduce PC, network and server load during working hours. For
# each PC a count of consecutive good pings is maintained. Once a PC has
# at least $Conf{BlackoutGoodCnt} consecutive good pings it is subject
# to "blackout" and not backed up during hours and days specified by
# $Conf{BlackoutPeriods}.
#
# To allow for periodic rebooting of a PC or other brief periods when a
# PC is not on the network, a number of consecutive bad pings is allowed
# before the good ping count is reset. This parameter is
# $Conf{BlackoutBadPingLimit}.
#
# Note that bad and good pings don't occur with the same interval. If a
# machine is always on the network, it will only be pinged roughly once
# every $Conf{IncrPeriod} (eg: once per day). So a setting for
# $Conf{BlackoutGoodCnt} of 7 means it will take around 7 days for a
# machine to be subject to blackout. On the other hand, if a ping is
# failed, it will be retried roughly every time BackupPC wakes up, eg,
# every one or two hours. So a setting for $Conf{BlackoutBadPingLimit} of
# 3 means that the PC will lose its blackout status after 3-6 hours of
# unavailability.
#
# To disable the blackout feature set $Conf{BlackoutGoodCnt} to a negative
# value.  A value of 0 will make all machines subject to blackout.  But
# if you don't want to do any backups during the day it would be easier
# to just set $Conf{WakeupSchedule} to a restricted schedule.
#
$Conf{BlackoutBadPingLimit} = 3;
$Conf{BlackoutGoodCnt}      = 7;

#
# One or more blackout periods can be specified.  If a client is
# subject to blackout then no regular (non-manual) backups will
# be started during any of these periods.  hourBegin and hourEnd
# specify hours fro midnight and weekDays is a list of days of
# the week where 0 is Sunday, 1 is Monday etc.
#
# For example:
#
#    $Conf{BlackoutPeriods} = [
#	{
#	    hourBegin =>  7.0,
#	    hourEnd   => 19.5,
#	    weekDays  => [1, 2, 3, 4, 5],
#	},
#    ];
#
# specifies one blackout period from 7:00am to 7:30pm local time
# on Mon-Fri.
#
# The blackout period can also span midnight by setting
# hourBegin > hourEnd, eg:
#
#    $Conf{BlackoutPeriods} = [
#	{
#	    hourBegin =>  7.0,
#	    hourEnd   => 19.5,
#	    weekDays  => [1, 2, 3, 4, 5],
#	},
#	{
#	    hourBegin => 23,
#	    hourEnd   =>  5,
#	    weekDays  => [5, 6],
#	},
#    ];
#
# This specifies one blackout period from 7:00am to 7:30pm local time
# on Mon-Fri, and a second period from 11pm to 5am on Friday and
# Saturday night.
#
$Conf{BlackoutPeriods} = [
    {
	hourBegin =>  7.0,
	hourEnd   => 19.5,
	weekDays  => [1, 2, 3, 4, 5],
    },
];

#
# A backup of a share that has zero files is considered fatal. This is
# used to catch miscellaneous Xfer errors that result in no files being
# backed up.  If you have shares that might be empty (and therefore an
# empty backup is valid) you should set this flag to 0.
#
$Conf{BackupZeroFilesIsFatal} = 1;

###########################################################################
# How to backup a client
# (can be overridden in the per-PC config.pl)
###########################################################################
#
# What transport method to use to backup each host.  If you have
# a mixed set of WinXX and linux/unix hosts you will need to override
# this in the per-PC config.pl.
#
# The valid values are:
#
#   - 'smb':     backup and restore via smbclient and the SMB protocol.
#                Easiest choice for WinXX.
#
#   - 'rsync':   backup and restore via rsync (via rsh or ssh).
#                Best choice for linux/unix.  Good choice also for WinXX.
#
#   - 'rsyncd':  backup and restore via rsync daemon on the client.
#                Best choice for linux/unix if you have rsyncd running on
#                the client.  Good choice also for WinXX.
#
#   - 'tar':    backup and restore via tar, tar over ssh, rsh or nfs.
#               Good choice for linux/unix.
#
#   - 'archive': host is a special archive host.  Backups are not done.
#                An archive host is used to archive other host's backups
#                to permanent media, such as tape, CDR or DVD.
#               
#
$Conf{XferMethod} = '<%= xfer_method -%>';

#
# Level of verbosity in Xfer log files.  0 means be quiet, 1 will give
# will give one line per file, 2 will also show skipped files on
# incrementals, higher values give more output.
#
$Conf{XferLogLevel} = <%= xfer_loglevel -%>;

#
# Filename charset encoding on the client.  BackupPC uses utf8
# on the server for filename encoding.  If this is empty, then
# utf8 is assumed and client filenames will not be modified.
# If set to a different encoding then filenames will converted
# to/from utf8 automatically during backup and restore.
#
# If the file names displayed in the browser (eg: accents or special
# characters) don't look right then it is likely you haven't set
# $Conf{ClientCharset} correctly.
#
# If you are using smbclient on a WinXX machine, smbclient will convert
# to the "unix charset" setting in smb.conf.  The default is utf8,
# in which case leave $Conf{ClientCharset} empty since smbclient does
# the right conversion.
#
# If you are using rsync on a WinXX machine then it does no conversion.
# A typical WinXX encoding for latin1/western europe is 'cp1252',
# so in this case set $Conf{ClientCharset} to 'cp1252'.
#
# On a linux or unix client, run "locale charmap" to see the client's
# charset.  Set $Conf{ClientCharset} to this value.  A typical value
# for english/US is 'ISO-8859-1'.
#
# Do "perldoc Encode::Supported" to see the list of possible charset
# values.  The FAQ at http://www.cl.cam.ac.uk/~mgk25/unicode.html
# is excellent, and http://czyborra.com/charsets/iso8859.html
# provides more information on the iso-8859 charsets.
#
$Conf{ClientCharset} = '';

#
# Prior to 3.x no charset conversion was done by BackupPC.  Backups were
# stored in what ever charset the XferMethod provided - typically utf8
# for smbclient and the client's locale settings for rsync and tar (eg:
# cp1252 for rsync on WinXX and perhaps iso-8859-1 with rsync on linux).
# This setting tells BackupPC the charset that was used to store file
# names in old backups taken with BackupPC 2.x, so that non-ascii file
# names in old backups can be viewed and restored.
#
$Conf{ClientCharsetLegacy} = 'iso-8859-1';

###########################################################################
# Samba Configuration
# (can be overwritten in the per-PC log file)
###########################################################################
#
# Name of the host share that is backed up when using SMB.  This can be a
# string or an array of strings if there are multiple shares per host.
# Examples:
#
#   $Conf{SmbShareName} = 'c';          # backup 'c' share
#   $Conf{SmbShareName} = ['c', 'd'];   # backup 'c' and 'd' shares
#
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
$Conf{SmbShareName} = 'C$';

#
# Smbclient share user name.  This is passed to smbclient's -U argument.
#
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
$Conf{SmbShareUserName} = '';

#
# Smbclient share password.  This is passed to smbclient via its PASSWD
# environment variable.  There are several ways you can tell BackupPC
# the smb share password.  In each case you should be very careful about
# security.  If you put the password here, make sure that this file is
# not readable by regular users!  See the "Setting up config.pl" section
# in the documentation for more information.
#
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
$Conf{SmbSharePasswd} = '';

#
# Full path for smbclient. Security caution: normal users should not
# allowed to write to this file or directory.
#
# smbclient is from the Samba distribution. smbclient is used to
# actually extract the incremental or full dump of the share filesystem
# from the PC.
#
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
$Conf{SmbClientPath} = '/usr/bin/smbclient';

#
# Command to run smbclient for a full dump.
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
# The following variables are substituted at run-time:
#
#    $smbClientPath   same as $Conf{SmbClientPath}
#    $host            host to backup/restore
#    $hostIP          host IP address
#    $shareName       share name
#    $userName        user name
#    $fileList        list of files to backup (based on exclude/include)
#    $I_option        optional -I option to smbclient
#    $X_option        exclude option (if $fileList is an exclude list)
#    $timeStampFile   start time for incremental dump
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{SmbClientFullCmd} = '$smbClientPath \\\\$host\\$shareName'
	    . ' $I_option -U $userName -E -d 1'
            . ' -c tarmode\\ full -Tc$X_option - $fileList';

#
# Command to run smbclient for an incremental dump.
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
# Same variable substitutions are applied as $Conf{SmbClientFullCmd}.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{SmbClientIncrCmd} = '$smbClientPath \\\\$host\\$shareName'
	    . ' $I_option -U $userName -E -d 1'
	    . ' -c tarmode\\ full -TcN$X_option $timeStampFile - $fileList';

#
# Command to run smbclient for a restore.
# This setting only matters if $Conf{XferMethod} = 'smb'.
#
# Same variable substitutions are applied as $Conf{SmbClientFullCmd}.
#
# If your smb share is read-only then direct restores will fail.
# You should set $Conf{SmbClientRestoreCmd} to undef and the
# corresponding CGI restore option will be removed.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{SmbClientRestoreCmd} = '$smbClientPath \\\\$host\\$shareName'
            . ' $I_option -U $userName -E -d 1'
            . ' -c tarmode\\ full -Tx -';

###########################################################################
# Tar Configuration
# (can be overwritten in the per-PC log file)
###########################################################################
#
# Which host directories to backup when using tar transport.  This can be a
# string or an array of strings if there are multiple directories to
# backup per host.  Examples:
#
#   $Conf{TarShareName} = '/';			# backup everything
#   $Conf{TarShareName} = '/home';		# only backup /home
#   $Conf{TarShareName} = ['/home', '/src'];	# backup /home and /src
#
# The fact this parameter is called 'TarShareName' is for historical
# consistency with the Smb transport options.  You can use any valid
# directory on the client: there is no need for it to correspond to
# any Smb share or device mount point.
#
# Note also that you can also use $Conf{BackupFilesOnly} to specify
# a specific list of directories to backup.  It's more efficient to
# use this option instead of $Conf{TarShareName} since a new tar is
# run for each entry in $Conf{TarShareName}.
#
# On the other hand, if you add --one-file-system to $Conf{TarClientCmd}
# you can backup each file system separately, which makes restoring one
# bad file system easier.  In this case you would list all of the mount
# points here, since you can't get the same result with
# $Conf{BackupFilesOnly}:
#
#     $Conf{TarShareName} = ['/', '/var', '/data', '/boot'];
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
$Conf{TarShareName} = '/';

#
# Full command to run tar on the client.  GNU tar is required.  You will
# need to fill in the correct paths for ssh2 on the local host (server)
# and GNU tar on the client.  Security caution: normal users should not
# allowed to write to these executable files or directories.
#
# See the documentation for more information about setting up ssh2 keys.
#
# If you plan to use NFS then tar just runs locally and ssh2 is not needed.
# For example, assuming the client filesystem is mounted below /mnt/hostName,
# you could use something like:
#
#    $Conf{TarClientCmd} = '$tarPath -c -v -f - -C /mnt/$host/$shareName'
#                        . ' --totals';
#
# In the case of NFS or rsh you need to make sure BackupPC's privileges
# are sufficient to read all the files you want to backup.  Also, you
# will probably want to add "/proc" to $Conf{BackupFilesExclude}.
#
# The following variables are substituted at run-time:
#
#   $host        host name
#   $hostIP      host's IP address
#   $incrDate    newer-than date for incremental backups
#   $shareName   share name to backup (ie: top-level directory path)
#   $fileList    specific files to backup or exclude
#   $tarPath     same as $Conf{TarClientPath}
#   $sshPath     same as $Conf{SshPath}
#
# If a variable is followed by a "+" it is shell escaped.  This is
# necessary for the command part of ssh or rsh, since it ends up
# getting passed through the shell.
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{TarClientCmd} = '$sshPath -q -x -n -l root $host'
                    . ' env LC_ALL=C $tarPath -c -v -f - -C $shareName+'
                    . ' --totals';

#
# Extra tar arguments for full backups.  Several variables are substituted at
# run-time.  See $Conf{TarClientCmd} for the list of variable substitutions.
#
# If you are running tar locally (ie: without rsh or ssh) then remove the
# "+" so that the argument is no longer shell escaped.
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
$Conf{TarFullArgs} = '$fileList+';

#
# Extra tar arguments for incr backups.  Several variables are substituted at
# run-time.  See $Conf{TarClientCmd} for the list of variable substitutions.
#
# Note that GNU tar has several methods for specifying incremental backups,
# including:
#
#   --newer-mtime $incrDate+
#          This causes a file to be included if the modification time is
#          later than $incrDate (meaning its contents might have changed).
#          But changes in the ownership or modes will not qualify the
#          file to be included in an incremental.
#
#   --newer=$incrDate+
#          This causes the file to be included if any attribute of the
#          file is later than $incrDate, meaning either attributes or
#          the modification time.  This is the default method.  Do
#          not use --atime-preserve in $Conf{TarClientCmd} above,
#          otherwise resetting the atime (access time) counts as an
#          attribute change, meaning the file will always be included
#          in each new incremental dump.
#
# If you are running tar locally (ie: without rsh or ssh) then remove the
# "+" so that the argument is no longer shell escaped.
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
$Conf{TarIncrArgs} = '--newer=$incrDate+ $fileList+';

#
# Full command to run tar for restore on the client.  GNU tar is required.
# This can be the same as $Conf{TarClientCmd}, with tar's -c replaced by -x
# and ssh's -n removed.
#
# See $Conf{TarClientCmd} for full details.
#
# This setting only matters if $Conf{XferMethod} = "tar".
#
# If you want to disable direct restores using tar, you should set
# $Conf{TarClientRestoreCmd} to undef and the corresponding CGI
# restore option will be removed.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{TarClientRestoreCmd} = '$sshPath -q -x -l root $host'
		   . ' env LC_ALL=C $tarPath -x -p --numeric-owner --same-owner'
		   . ' -v -f - -C $shareName+';

#
# Full path for tar on the client. Security caution: normal users should not
# allowed to write to this file or directory.
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
$Conf{TarClientPath} = '/bin/tar';

###########################################################################
# Rsync/Rsyncd Configuration
# (can be overwritten in the per-PC log file)
###########################################################################
#
# Path to rsync executable on the client
#
$Conf{RsyncClientPath} = '/usr/bin/rsync';

#
# Full command to run rsync on the client machine.  The following variables
# are substituted at run-time:
#
#        $host           host name being backed up
#        $hostIP         host's IP address
#        $shareName      share name to backup (ie: top-level directory path)
#        $rsyncPath      same as $Conf{RsyncClientPath}
#        $sshPath        same as $Conf{SshPath}
#        $argList        argument list, built from $Conf{RsyncArgs},
#                        $shareName, $Conf{BackupFilesExclude} and
#                        $Conf{BackupFilesOnly}
#
# This setting only matters if $Conf{XferMethod} = 'rsync'.
#
$Conf{RsyncClientCmd} = '$sshPath -q -x -l backup $host $rsyncPath $argList+';

#
# Full command to run rsync for restore on the client.  The following
# variables are substituted at run-time:
#
#        $host           host name being backed up
#        $hostIP         host's IP address
#        $shareName      share name to backup (ie: top-level directory path)
#        $rsyncPath      same as $Conf{RsyncClientPath}
#        $sshPath        same as $Conf{SshPath}
#        $argList        argument list, built from $Conf{RsyncArgs},
#                        $shareName, $Conf{BackupFilesExclude} and
#                        $Conf{BackupFilesOnly}
#
# This setting only matters if $Conf{XferMethod} = 'rsync'.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $host $rsyncPath $argList+';

#
# Share name to backup.  For $Conf{XferMethod} = "rsync" this should
# be a file system path, eg '/' or '/home'.
#
# For $Conf{XferMethod} = "rsyncd" this should be the name of the module
# to backup (ie: the name from /etc/rsynd.conf).
#
# This can also be a list of multiple file system paths or modules.
# For example, by adding --one-file-system to $Conf{RsyncArgs} you
# can backup each file system separately, which makes restoring one
# bad file system easier.  In this case you would list all of the mount
# points:
#
#     $Conf{RsyncShareName} = ['/', '/var', '/data', '/boot'];
#
$Conf{RsyncShareName} = '/';

#
# Rsync daemon port on the client, for $Conf{XferMethod} = "rsyncd".
#
$Conf{RsyncdClientPort} = 873;

#
# Rsync daemon user name on client, for $Conf{XferMethod} = "rsyncd".
# The user name and password are stored on the client in whatever file
# the "secrets file" parameter in rsyncd.conf points to
# (eg: /etc/rsyncd.secrets).
#
$Conf{RsyncdUserName} = '';

#
# Rsync daemon user name on client, for $Conf{XferMethod} = "rsyncd".
# The user name and password are stored on the client in whatever file
# the "secrets file" parameter in rsyncd.conf points to
# (eg: /etc/rsyncd.secrets).
#
$Conf{RsyncdPasswd} = '';

#
# Whether authentication is mandatory when connecting to the client's
# rsyncd.  By default this is on, ensuring that BackupPC will refuse to
# connect to an rsyncd on the client that is not password protected.
# Turn off at your own risk.
#
$Conf{RsyncdAuthRequired} = 1;

#
# When rsync checksum caching is enabled (by adding the
# --checksum-seed=32761 option to $Conf{RsyncArgs}), the cached
# checksums can be occasionally verified to make sure the file
# contents matches the cached checksums.  This is to avoid the
# risk that disk problems might cause the pool file contents to
# get corrupted, but the cached checksums would make BackupPC
# think that the file still matches the client.
#
# This setting is the probability (0 means never and 1 means always)
# that a file will be rechecked.  Setting it to 0 means the checksums
# will not be rechecked (unless there is a phase 0 failure).  Setting
# it to 1 (ie: 100%) means all files will be checked, but that is
# not a desirable setting since you are better off simply turning
# caching off (ie: remove the --checksum-seed option).
#   
# The default of 0.01 means 1% (on average) of the files during a full
# backup will have their cached checksum re-checked.
#   
# This setting has no effect unless checksum caching is turned on.
#   
$Conf{RsyncCsumCacheVerifyProb} = 0.01;

#
# Arguments to rsync for backup.  Do not edit the first set unless you
# have a thorough understanding of how File::RsyncP works.
#
$Conf{RsyncArgs} = [
	    #
	    # Do not edit these!
	    #
            '--numeric-ids',
            '--perms',
            '--owner',
            '--group',
            '-D',
            '--links',
            '--hard-links',
            '--times',
            '--block-size=2048',
            '--recursive',

	    #
	    # Rsync >= 2.6.3 supports the --checksum-seed option
            # which allows rsync checksum caching on the server.
	    # Uncomment this to enable rsync checksum caching if
            # you have a recent client rsync version and you want
            # to enable checksum caching.
	    #
	    #'--checksum-seed=32761',
];

#
# Additional arguments added to RsyncArgs.  This can be used in
# conbination with $Conf{RsyncArgs} to allow customization of
# the rsync arguments on a part-client basis.  The standard
# arguments go in $Conf{RsyncArgs} and $Conf{RsyncArgsExtra}
# can be set on a per-client basis.
#
# Examples of additional arguments that should work are --exclude/--include,
# eg:
#
#     $Conf{RsyncArgsExtra} = [
#           '--exclude', '/proc',
#           '--exclude', '*.tmp',
#     ];
#
# Both $Conf{RsyncArgs} and $Conf{RsyncArgsExtra} are subject
# to the following variable substitutions:
#
#        $client       client name being backed up
#        $host         host name (could be different from client name if
#                                 $Conf{ClientNameAlias} is set)
#        $hostIP       IP address of host
#        $confDir      configuration directory path
#
# This allows settings of the form:
#
#     $Conf{RsyncArgsExtra} = [
#             '--exclude-from=$confDir/pc/$host.exclude',
#     ];
#
$Conf{RsyncArgsExtra} = [];

#
# Arguments to rsync for restore.  Do not edit the first set unless you
# have a thorough understanding of how File::RsyncP works.
#
# If you want to disable direct restores using rsync (eg: is the module
# is read-only), you should set $Conf{RsyncRestoreArgs} to undef and
# the corresponding CGI restore option will be removed.
#
# $Conf{RsyncRestoreArgs} is subject to the following variable
# substitutions:
#
#        $client       client name being backed up
#        $host         host name (could be different from client name if
#                                 $Conf{ClientNameAlias} is set)
#        $hostIP       IP address of host
#        $confDir      configuration directory path
#
# Note: $Conf{RsyncArgsExtra} doesn't apply to $Conf{RsyncRestoreArgs}.
#
$Conf{RsyncRestoreArgs} = [
	    #
	    # Do not edit these!
	    #
	    '--numeric-ids',
	    '--perms',
	    '--owner',
	    '--group',
	    '-D',
	    '--links',
            '--hard-links',
	    '--times',
	    '--block-size=2048',
	    '--relative',
	    '--ignore-times',
	    '--recursive',

	    #
	    # Rsync >= 2.6.3 supports the --checksum-seed option
            # which allows rsync checksum caching on the server.
	    # Uncomment this to enable rsync checksum caching if
            # you have a recent client rsync version and you want
            # to enable checksum caching.
	    #
	    #'--checksum-seed=32761',

	    #
	    # Add additional arguments here
	    #
];

###########################################################################
# FTP Configuration
# (can be overwritten in the per-PC log file)
##########################################################################
#
# Which host directories to backup when using FTP.  This can be a
# string or an array of strings if there are multiple shares per host.
#
# This value must be specified in one of two ways: either as a
# subdirectory of the 'share root' on the server, or as the absolute
# path of the directory.
#
# In the following example, if the directory /home/username is the
# root share of the ftp server with the given username, the following
# two values will back up the same directory:
#
#    $Conf{FtpShareName} = 'www';                # www directory
#    $Conf{FtpShareName} = '/home/username/www'; # same directory
#
# Path resolution is not supported; i.e.; you may not have an ftp
# share path defined as '../otheruser' or '~/games'.
#
#  Multiple shares may also be specified, as with other protocols:
#
#    $Conf{FtpShareName} = [ 'www',
#                            'bin',
#                            'config' ];
#
# Note also that you can also use $Conf{BackupFilesOnly} to specify
# a specific list of directories to backup.  It's more efficient to
# use this option instead of $Conf{FtpShareName} since a new tar is
# run for each entry in $Conf{FtpShareName}.
#
# This setting only matters if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpShareName} = '';

#
# FTP user name.  This is used to log into the server.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpUserName} = '';

#
# FTP user password.  This is used to log into the server.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpPasswd} = '';

#
# Whether passive mode is used.  The correct setting depends upon
# whether local or remote ports are accessible from the other machine,
# which is affected by any firewall or routers between the FTP server
# on the client and the BackupPC server.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpPassive} = 1;

#
# Transfer block size. This sets the size of the amounts of data in
# each frame. While undefined, this value takes the default value.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpBlockSize} = 10240;

#
# The port of the ftp server.  If undefined, 21 is used.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpPort} = 21;

#
# Connection timeout for FTP.  When undefined, the default is 120 seconds.
#
# This setting is used only if $Conf{XferMethod} = 'ftp'.
#
$Conf{FtpTimeout} = 120;

#
# Behaviour when BackupPC encounters symlinks on the FTP share.
#
# Symlinks cannot be restored via FTP, so the desired behaviour will
# be different depending on the setup of the share. The default for
# this behavor is 1.  Directory shares with more complicated directory
# structures should consider other protocols.
#
$Conf{FtpFollowSymlinks} = 0;

###########################################################################
# Archive Configuration
# (can be overwritten in the per-PC log file)
###########################################################################
#
# Archive Destination
#
# The Destination of the archive
# e.g. /tmp for file archive or /dev/nst0 for device archive
#
$Conf{ArchiveDest} = '/tmp';

#
# Archive Compression type
#
# The valid values are:
#
#   - 'none':  No Compression
#
#   - 'gzip':  Medium Compression. Recommended.
#
#   - 'bzip2': High Compression but takes longer.
#
$Conf{ArchiveComp} = 'gzip';

#
# Archive Parity Files
#
# The amount of Parity data to generate, as a percentage
# of the archive size.
# Uses the commandline par2 (par2cmdline) available from
# http://parchive.sourceforge.net
#
# Only useful for file dumps.
#
# Set to 0 to disable this feature.
#
$Conf{ArchivePar} = 0;

#
# Archive Size Split
#
# Only for file archives. Splits the output into 
# the specified size * 1,000,000.
# e.g. to split into 650,000,000 bytes, specify 650 below.
# 
# If the value is 0, or if $Conf{ArchiveDest} is an existing file or
# device (e.g. a streaming tape drive), this feature is disabled.
#
$Conf{ArchiveSplit} = 0;

#
# Archive Command
#
# This is the command that is called to actually run the archive process
# for each host.  The following variables are substituted at run-time:
#
#   $Installdir    The installation directory of BackupPC
#   $tarCreatePath The path to BackupPC_tarCreate
#   $splitpath     The path to the split program
#   $parpath       The path to the par2 program
#   $host          The host to archive
#   $backupnumber  The backup number of the host to archive
#   $compression   The path to the compression program
#   $compext       The extension assigned to the compression type
#   $splitsize     The number of bytes to split archives into
#   $archiveloc    The location to put the archive
#   $parfile       The amount of parity data to create (percentage)
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{ArchiveClientCmd} = '$Installdir/bin/BackupPC_archiveHost'
	. ' $tarCreatePath $splitpath $parpath $host $backupnumber'
	. ' $compression $compext $splitsize $archiveloc $parfile *';

#
# Full path for ssh. Security caution: normal users should not
# allowed to write to this file or directory.
#
$Conf{SshPath} = '/usr/bin/ssh' if -x '/usr/bin/ssh';

#
# Full path for nmblookup. Security caution: normal users should not
# allowed to write to this file or directory.
#
# nmblookup is from the Samba distribution. nmblookup is used to get the
# netbios name, necessary for DHCP hosts.
#
$Conf{NmbLookupPath} = '/usr/bin/nmblookup';

#
# NmbLookup command.  Given an IP address, does an nmblookup on that
# IP address.  The following variables are substituted at run-time:
#
#   $nmbLookupPath      path to nmblookup ($Conf{NmbLookupPath})
#   $host               IP address
#
# This command is only used for DHCP hosts: given an IP address, this
# command should try to find its NetBios name.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{NmbLookupCmd} = '$nmbLookupPath -A $host';

#
# NmbLookup command.  Given a netbios name, finds that host by doing
# a NetBios lookup.  Several variables are substituted at run-time:
#
#   $nmbLookupPath      path to nmblookup ($Conf{NmbLookupPath})
#   $host               NetBios name
#
# In some cases you might need to change the broadcast address, for
# example if nmblookup uses 192.168.255.255 by default and you find
# that doesn't work, try 192.168.1.255 (or your equivalent class C
# address) using the -B option:
#
#    $Conf{NmbLookupFindHostCmd} = '$nmbLookupPath -B 192.168.1.255 $host';
#
# If you use a WINS server and your machines don't respond to
# multicast NetBios requests you can use this (replace 1.2.3.4
# with the IP address of your WINS server):
#
#    $Conf{NmbLookupFindHostCmd} = '$nmbLookupPath -R -U 1.2.3.4 $host';
#
# This is preferred over multicast since it minimizes network traffic.
#
# Experiment manually for your site to see what form of nmblookup command
# works.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{NmbLookupFindHostCmd} = '$nmbLookupPath $host';

#
# For fixed IP address hosts, BackupPC_dump can also verify the netbios
# name to ensure it matches the host name.  An error is generated if
# they do not match.  Typically this flag is off.  But if you are going
# to transition a bunch of machines from fixed host addresses to DHCP,
# setting this flag is a great way to verify that the machines have
# their netbios name set correctly before turning on DCHP.
#
$Conf{FixedIPNetBiosNameCheck} = 0;

#
# Full path to the ping command.  Security caution: normal users
# should not be allowed to write to this file or directory.
#
# If you want to disable ping checking, set this to some program
# that exits with 0 status, eg:
#
#     $Conf{PingPath} = '/bin/echo';
#
$Conf{PingPath} = '/bin/ping';
$Conf{Ping6Path} = '';

#
# Ping command.  The following variables are substituted at run-time:
#
#   $pingPath      path to ping ($Conf{PingPath})
#   $host          host name
#
# Wade Brown reports that on solaris 2.6 and 2.7 ping -s returns the wrong
# exit status (0 even on failure).  Replace with "ping $host 1", which
# gets the correct exit status but we don't get the round-trip time.
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{PingCmd} = '$pingPath -c 1 $host';

#
# Maximum round-trip ping time in milliseconds.  This threshold is set
# to avoid backing up PCs that are remotely connected through WAN or
# dialup connections.  The output from ping -s (assuming it is supported
# on your system) is used to check the round-trip packet time.  On your
# local LAN round-trip times should be much less than 20msec.  On most
# WAN or dialup connections the round-trip time will be typically more
# than 20msec.  Tune if necessary.
#
$Conf{PingMaxMsec} = 20;

#
# Compression level to use on files.  0 means no compression.  Compression
# levels can be from 1 (least cpu time, slightly worse compression) to
# 9 (most cpu time, slightly better compression).  The recommended value
# is 3.  Changing to 5, for example, will take maybe 20% more cpu time
# and will get another 2-3% additional compression. See the zlib
# documentation for more information about compression levels.
#
# Changing compression on or off after backups have already been done
# will require both compressed and uncompressed pool files to be stored.
# This will increase the pool storage requirements, at least until all
# the old backups expire and are deleted.
#
# It is ok to change the compression value (from one non-zero value to
# another non-zero value) after dumps are already done.  Since BackupPC
# matches pool files by comparing the uncompressed versions, it will still
# correctly match new incoming files against existing pool files.  The
# new compression level will take effect only for new files that are
# newly compressed and added to the pool.
#
# If compression was off and you are enabling compression for the first
# time you can use the BackupPC_compressPool utility to compress the
# pool.  This avoids having the pool grow to accommodate both compressed
# and uncompressed backups.  See the documentation for more information.
#
# Note: compression needs the Compress::Zlib perl library.  If the
# Compress::Zlib library can't be found then $Conf{CompressLevel} is
# forced to 0 (compression off).
#
$Conf{CompressLevel} = 3;

#
# Timeout in seconds when listening for the transport program's
# (smbclient, tar etc) stdout. If no output is received during this
# time, then it is assumed that something has wedged during a backup,
# and the backup is terminated.
#
# Note that stdout buffering combined with huge files being backed up
# could cause longish delays in the output from smbclient that
# BackupPC_dump sees, so in rare cases you might want to increase
# this value.
#
# Despite the name, this parameter sets the timeout for all transport
# methods (tar, smb etc).
#
$Conf{ClientTimeout} = 72000;

#
# Maximum number of log files we keep around in each PC's directory
# (ie: pc/$host).  These files are aged monthly.  A setting of 12
# means there will be at most the files LOG, LOG.0, LOG.1, ... LOG.11
# in the pc/$host directory (ie: about a years worth).  (Except this
# month's LOG, these files will have a .z extension if compression
# is on).
#
# If you decrease this number after BackupPC has been running for a
# while you will have to manually remove the older log files.
#
$Conf{MaxOldPerPCLogFiles} = 12;

#
# Optional commands to run before and after dumps and restores,
# and also before and after each share of a dump.
#
# Stdout from these commands will be written to the Xfer (or Restore)
# log file.  One example of using these commands would be to
# shut down and restart a database server, dump a database
# to files for backup, or doing a snapshot of a share prior
# to a backup.  Example:
#
#    $Conf{DumpPreUserCmd} = '$sshPath -q -x -l root $host /usr/bin/dumpMysql';
#
# The following variable substitutions are made at run time for
# $Conf{DumpPreUserCmd}, $Conf{DumpPostUserCmd}, $Conf{DumpPreShareCmd}
# and $Conf{DumpPostShareCmd}:
#
#        $type         type of dump (incr or full)
#        $xferOK       1 if the dump succeeded, 0 if it didn't
#        $client       client name being backed up
#        $host         host name (could be different from client name if
#                                 $Conf{ClientNameAlias} is set)
#        $hostIP       IP address of host
#        $user         user name from the hosts file
#        $moreUsers    list of additional users from the hosts file
#        $share        the first share name (or current share for
#                        $Conf{DumpPreShareCmd} and $Conf{DumpPostShareCmd})
#        $shares       list of all the share names
#        $XferMethod   value of $Conf{XferMethod} (eg: tar, rsync, smb)
#        $sshPath      value of $Conf{SshPath},
#        $cmdType      set to DumpPreUserCmd or DumpPostUserCmd
#
# The following variable substitutions are made at run time for
# $Conf{RestorePreUserCmd} and $Conf{RestorePostUserCmd}:
#
#        $client       client name being backed up
#        $xferOK       1 if the restore succeeded, 0 if it didn't
#        $host         host name (could be different from client name if
#                                 $Conf{ClientNameAlias} is set)
#        $hostIP       IP address of host
#        $user         user name from the hosts file
#        $moreUsers    list of additional users from the hosts file
#        $share        the first share name
#        $XferMethod   value of $Conf{XferMethod} (eg: tar, rsync, smb)
#        $sshPath      value of $Conf{SshPath},
#        $type         set to "restore"
#        $bkupSrcHost  host name of the restore source
#        $bkupSrcShare share name of the restore source
#        $bkupSrcNum   backup number of the restore source
#        $pathHdrSrc   common starting path of restore source
#        $pathHdrDest  common starting path of destination
#        $fileList     list of files being restored
#        $cmdType      set to RestorePreUserCmd or RestorePostUserCmd
#
# The following variable substitutions are made at run time for
# $Conf{ArchivePreUserCmd} and $Conf{ArchivePostUserCmd}:
#
#        $client       client name being backed up
#        $xferOK       1 if the archive succeeded, 0 if it didn't
#        $host         Name of the archive host
#        $user         user name from the hosts file
#        $share        the first share name
#        $XferMethod   value of $Conf{XferMethod} (eg: tar, rsync, smb)
#        $HostList     list of hosts being archived
#        $BackupList   list of backup numbers for the hosts being archived
#        $archiveloc   location where the archive is sent to
#        $parfile      amount of parity data being generated (percentage)
#        $compression  compression program being used (eg: cat, gzip, bzip2)
#        $compext      extension used for compression type (eg: raw, gz, bz2)
#        $splitsize    size of the files that the archive creates
#        $sshPath      value of $Conf{SshPath},
#        $type         set to "archive"
#        $cmdType      set to ArchivePreUserCmd or ArchivePostUserCmd
#
# Note: all Cmds are executed directly without a shell, so the prog name
# needs to be a full path and you can't include shell syntax like
# redirection and pipes; put that in a script if you need it.
#
$Conf{DumpPreUserCmd}     = undef;
$Conf{DumpPostUserCmd}    = undef;
$Conf{DumpPreShareCmd}    = undef;
$Conf{DumpPostShareCmd}   = undef;
$Conf{RestorePreUserCmd}  = undef;
$Conf{RestorePostUserCmd} = undef;
$Conf{ArchivePreUserCmd}  = undef;
$Conf{ArchivePostUserCmd} = undef;

#
# Whether the exit status of each PreUserCmd and
# PostUserCmd is checked.
#
# If set and the Dump/Restore/Archive Pre/Post UserCmd
# returns a non-zero exit status then the dump/restore/archive
# is aborted.  To maintain backward compatibility (where
# the exit status in early versions was always ignored),
# this flag defaults to 0.
#
# If this flag is set and the Dump/Restore/Archive PreUserCmd
# fails then the matching Dump/Restore/Archive PostUserCmd is
# not executed.  If DumpPreShareCmd returns a non-exit status,
# then DumpPostShareCmd is not executed, but the DumpPostUserCmd
# is still run (since DumpPreUserCmd must have previously
# succeeded).
#
# An example of a DumpPreUserCmd that might fail is a script
# that snapshots or dumps a database which fails because
# of some database error.
#
$Conf{UserCmdCheckStatus} = 0;

#
# Override the client's host name.  This allows multiple clients
# to all refer to the same physical host.  This should only be
# set in the per-PC config file and is only used by BackupPC at
# the last moment prior to generating the command used to backup
# that machine (ie: the value of $Conf{ClientNameAlias} is invisible
# everywhere else in BackupPC).  The setting can be a host name or
# IP address, eg:
#
#         $Conf{ClientNameAlias} = 'realHostName';
#         $Conf{ClientNameAlias} = '192.1.1.15';
#
# will cause the relevant smb/tar/rsync backup/restore commands to be
# directed to realHostName, not the client name.
#
# Note: this setting doesn't work for hosts with DHCP set to 1.
#
$Conf{ClientNameAlias} = undef;

###########################################################################
# Email reminders, status and messages
# (can be overridden in the per-PC config.pl)
###########################################################################
#
# Full path to the sendmail command.  Security caution: normal users
# should not allowed to write to this file or directory.
#
$Conf{SendmailPath} = '/usr/sbin/sendmail';

#
# Minimum period between consecutive emails to a single user.
# This tries to keep annoying email to users to a reasonable
# level.  Email checks are done nightly, so this number is effectively
# rounded up (ie: 2.5 means a user will never receive email more
# than once every 3 days).
#
$Conf{EMailNotifyMinDays} = 2.5;

#
# Name to use as the "from" name for email.  Depending upon your mail
# handler this is either a plain name (eg: "admin") or a fully-qualified
# name (eg: "admin@mydomain.com").
#
$Conf{EMailFromUserName} = 'backuppc';

#
# Destination address to an administrative user who will receive a
# nightly email with warnings and errors.  If there are no warnings
# or errors then no email will be sent.  Depending upon your mail
# handler this is either a plain name (eg: "admin") or a fully-qualified
# name (eg: "admin@mydomain.com").
#
$Conf{EMailAdminUserName} = 'backuppc';

#
# Destination domain name for email sent to users.  By default
# this is empty, meaning email is sent to plain, unqualified
# addresses.  Otherwise, set it to the destintation domain, eg:
#
#    $Cong{EMailUserDestDomain} = '@mydomain.com';
#
# With this setting user email will be set to 'user@mydomain.com'.
#
$Conf{EMailUserDestDomain} = '';

#
# This subject and message is sent to a user if their PC has never been
# backed up.
#
# These values are language-dependent.  The default versions can be
# found in the language file (eg: lib/BackupPC/Lang/en.pm).  If you
# need to change the message, copy it here and edit it, eg:
#
#   $Conf{EMailNoBackupEverMesg} = <<'EOF';
#   To: $user$domain
#   cc:
#   Subject: $subj
#   
#   Dear $userName,
#   
#   This is a site-specific email message.
#   EOF
#
$Conf{EMailNoBackupEverSubj} = undef;
$Conf{EMailNoBackupEverMesg} = undef;

#
# How old the most recent backup has to be before notifying user.
# When there have been no backups in this number of days the user
# is sent an email.
#
$Conf{EMailNotifyOldBackupDays} = 7.0;

#
# This subject and message is sent to a user if their PC has not recently
# been backed up (ie: more than $Conf{EMailNotifyOldBackupDays} days ago).
#
# These values are language-dependent.  The default versions can be
# found in the language file (eg: lib/BackupPC/Lang/en.pm).  If you
# need to change the message, copy it here and edit it, eg:
#
#   $Conf{EMailNoBackupRecentMesg} = <<'EOF';
#   To: $user$domain
#   cc:
#   Subject: $subj
#   
#   Dear $userName,
#   
#   This is a site-specific email message.
#   EOF
#
$Conf{EMailNoBackupRecentSubj} = undef;
$Conf{EMailNoBackupRecentMesg} = undef;

#
# How old the most recent backup of Outlook files has to be before
# notifying user.
#
$Conf{EMailNotifyOldOutlookDays} = 5.0;

#
# This subject and message is sent to a user if their Outlook files have
# not recently been backed up (ie: more than $Conf{EMailNotifyOldOutlookDays}
# days ago).
#
# These values are language-dependent.  The default versions can be
# found in the language file (eg: lib/BackupPC/Lang/en.pm).  If you
# need to change the message, copy it here and edit it, eg:
#
#   $Conf{EMailOutlookBackupMesg} = <<'EOF';
#   To: $user$domain
#   cc:
#   Subject: $subj
#   
#   Dear $userName,
#   
#   This is a site-specific email message.
#   EOF
#
$Conf{EMailOutlookBackupSubj} = undef;
$Conf{EMailOutlookBackupMesg} = undef;

#
# Additional email headers.  This sets to charset to
# utf8.
#
$Conf{EMailHeaders} = <<EOF;
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
EOF

