#!/bin/sh

ETHTOOL="/usr/bin/ethtool"
DMIDECODE="/usr/sbin/dmidecode"

exec > /dev/null

DIRLIST="/etc /var/log /usr/syno/etc /tmp/space /usr/syno/apache/conf /var/lib/bluetooth /var/lib/usbmodem /run /var/tmp/nginx /usr/local/etc/nginx"
SZF_MSG="/etc.defaults/VERSION /tmp/ddns.* /var/lib/nfs/*tab /tmp/usbdebug /tmp/usbmodem.* /var/log/deepsleep_tcpdump /tmp/flashcache_curr_stat /.umount_root_failed /var/lib/securityscan/*.json /var/dynlib/securityscan/ruleDB/DBVersion.json"
PROCFILES="/proc/usb/devices /proc/scsi/scsi /proc/partitions /proc/mdstat /proc/mtd /sys/class/scsi_host/host*/syno_pm_info /proc/net/dev /proc/net/route /proc/mounts /proc/meminfo /proc/swaps /proc/vmstat /proc/cpuinfo /proc/interrupts /proc/uptime /proc/cmdline /proc/bus/usb/devices /proc/slabinfo /proc/sys/kernel/syno_* /proc/net/bonding/* /proc/flashcache/*/flashcache_stats"

if [ -z "$1" ]; then
	SZD_TMP="/tmp/@`date +%s`.$$"
else
	SZD_TMP="$1"
fi

# File list to exclude. This list is FILE base, if you want to exclude a whole
# dir, add '*' to match all in the dir.
EXCLUDE_LIST=/tmp/.synomsg_exclude.list.$$
exclude_dir_but_add() { # <exclude dir> <include pattern>
	local dir=$1 pattern=$2
	/usr/bin/find $dir | /bin/grep -v "$pattern"
}
create_exclude_list() {
	/bin/cat > $EXCLUDE_LIST <<EOF
/etc/apparmor.d/cache/*
/etc/hostapd/stainfo.sh
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
/etc/mt-daapd.conf
/etc/myds.conf
/etc/portforward/router_upnp.db
/etc/portforward/routerdb/*
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets
/etc/rsyncd.secrets
/etc/shadow
/etc/shadow.bak
/etc/shadow.cfgen.bkp
/etc/synouser.conf
/etc/security/opasswd*
/run/docker
/run/netns
/etc/gogoc/.tunnel_passwd
/usr/syno/etc/audio/password.json
/usr/syno/etc/ddnsreg.conf
/usr/syno/etc/download/host.conf
/usr/syno/etc/indexdb/*
/usr/syno/etc/openldap/data/*
/usr/syno/etc/openldap/schema/*
/usr/syno/etc/packages/AudioStation/password.json
/usr/syno/etc/packages/iTunesServer/mt-daapd.conf
/usr/syno/etc/packages/VPNCenter/l2tp/ipsec.secrets.encrypt
/usr/syno/etc/packages/VPNCenter/openvpn/keys/server.key
/usr/syno/etc/packages/VPNCenter/syno_conf/*
/usr/syno/etc/packages/SynologyApplicationService/vapid/*
/usr/syno/etc/private/.db.domain_*
/usr/syno/etc/private/domain_group*
/usr/syno/etc/private/domain_user*
/usr/syno/etc/private/ldap.secret
/usr/syno/etc/private/ldapbrowser.conf
/usr/syno/etc/private/secrets.tdb*
/usr/syno/etc/private/smbpasswd*
/usr/syno/etc/private/credentials.sqlite
/usr/syno/etc/private/session/*
/usr/syno/etc/.encrypt
/usr/syno/etc/.tpyrcne
/usr/syno/etc/keymanager
/etc/samba/private/secrets.*
/etc/samba/private/passdb.tdb*
/etc/samba/private/smbpasswd*
/usr/syno/etc/ssl/*
/usr/syno/etc/synosmtp.conf
/usr/syno/etc/synosyslog/client_key/*
/usr/syno/etc/synosyslog/keys/*
/usr/syno/etc/synovpn/openvpn/keys/*
/usr/syno/etc/usb.map
/usr/syno/etc/wireless.conf
/usr/syno/etc/opencc
/usr/syno/etc/synoindex/packages
/var/log/cloudsync
/var/log/cstn
/usr/syno/etc/geoip
/usr/syno/etc/certificate
/usr/local/etc/certificate
/usr/syno/etc/letsencrypt
/usr/syno/etc/packages/MailPlus-Server
/usr/syno/etc/packages/MailServer
/usr/syno/etc/payment
/usr/syno/etc/packages/SiteRecovery/synosystemdr_conf.tgz
/usr/syno/etc/packages/SiteRecovery/tunnel_secret.key
/usr/syno/etc/synodrive
$(exclude_dir_but_add '/usr/syno/etc/amule/*' 'amule.conf$')
$(exclude_dir_but_add '/usr/syno/etc/packages/DownloadStation/amule/*' '\(amule\|synouser_default_destination\).conf$')
$(exclude_dir_but_add '/usr/syno/etc/packages/DownloadStation/download/*' 'blocklists\|userhosts\|userplugins\|\(settings\|stats\).json$')
$(exclude_dir_but_add '/usr/syno/etc/packages/DownloadStation/pyload/*' 'plugin.conf$')
$(exclude_dir_but_add '/usr/syno/etc/audio/radio/*' '\(userdef\|favorite\).json$')
$(exclude_dir_but_add '/usr/syno/etc/packages/AudioStation/radio/*' '\(userdef\|favorite\).json$')
$(exclude_dir_but_add '/etc/ssh/*' 'sshd_config$')
EOF
}

create_exclude_list

copy_proc_to_tmp()
{
	local file=$1 dir=
	[ -r "$file" ] || return 1
	dir=${SZD_TMP}/`/usr/bin/dirname "$file"`
	[ -w "$dir" ] || /bin/mkdir -p "$dir"
	/bin/cp -f $file ${SZD_TMP}/$file
}
copy_and_filter_out() { # <fileter pattern> <file>
	local pattern=$1 file=$2 dir=
	[ -r "$file" ] || return 1
	dir=${SZD_TMP}/`/usr/bin/dirname "$file"`
	[ -w "$dir" ] || /bin/mkdir -p "$dir"
	/bin/grep -v "$pattern" "$file" > ${SZD_TMP}/${file}

	# concate file list for later `ls -l', because the grep command can
	# not restore original file stat like mtime.
	# FIXME if file name include white space, this list will be wrong
	TMP_LIST="$TMP_LIST $file"
}

gen_cmd_result() {
	local SZ_CMD="dmesg free ifconfig iwconfig uptime lsof"
	local UPS_V_SERVER="localhost"

	# Runtime commands
	for cmd in $SZ_CMD; do
		`/usr/bin/which $cmd` > $SZD_TMP/result/$cmd.result
	done

	/bin/ps -e -o pid,user,vsz,stat,command > $SZD_TMP/result/ps.result
	/bin/pstree -p > $SZD_TMP/result/pstree.result
	/usr/sbin/ntpq -pn > $SZD_TMP/result/ntpq.result 2>&1

	/bin/df -h > $SZD_TMP/result/df.result

	mv /etc/mtab /etc/mtab.$$
	/bin/ln -s /proc/mounts /etc/mtab
	/bin/df > $SZD_TMP/result/df2.result
	rm /etc/mtab
	mv /etc/mtab.$$ /etc/mtab

	# collect all nfs mount clients
	/usr/sbin/showmount --all > $SZD_TMP/result/showmount.result

	/usr/bin/top -b -n 1 -w 1024 > $SZD_TMP/result/top.result
	route -n > $SZD_TMP/result/route.result

	/usr/bin/dpkg -l > $SZD_TMP/result/dpkg.result

	if [ -x /usr/syno/bin/spacetool ]; then
		/usr/syno/bin/spacetool --synoblock-enum > $SZD_TMP/result/synoblock_enum.result
	fi

	for i in $(ls /sys/class/net); do
		[ "$i" = "bonding_masters" ] && continue
		${ETHTOOL} $i &> $SZD_TMP/result/ethtool.$i.result
		${ETHTOOL} -S $i &> $SZD_TMP/result/ethtool_stats.$i.result
	done

	# network and firewall related information
	/bin/netstat -neap > $SZD_TMP/result/netstat.result
	/sbin/iptables-save > $SZD_TMP/result/iptables-save.result

	# samba related information
	/usr/bin/smbstatus -v > $SZD_TMP/result/smbstatus.result

	# core-dump file list
	/bin/ls -al /var/crash/*.core > $SZD_TMP/result/core-files.result
	/bin/ls -al /volume*/*.core >> $SZD_TMP/result/core-files.result

	# for upnp router info, only get them if any port-forwarding rule exists
	if [ -s /etc/portforward/rule.conf ]; then
		/usr/syno/bin/synoupnp --get-all-info > $SZD_TMP/result/upnp-info.result
	fi

	# for Bluetooth info
	/usr/bin/hciconfig -a > $SZD_TMP/result/bluetooth-hciconfig.result

	# for upsc info
	case `/usr/syno/bin/synogetkeyvalue /etc/synoinfo.conf ups_mode`  in
		slave)
		UPS_V_SERVER=`/usr/syno/bin/synogetkeyvalue /etc/synoinfo.conf upsslave_server`
		;;
	esac
	/usr/bin/upsc ups@$UPS_V_SERVER > $SZD_TMP/result/upsc.result

	# for wireless info
	[ -f /usr/syno/sbin/rfkill ] && /usr/syno/sbin/rfkill list all > $SZD_TMP/result/rfkill.result
	: > $SZD_TMP/result/wifi_signal_antenna.result
	for wsa in `ls /proc/sys/kernel/syno_wifi_signal_antenna*` ;
	do
		/bin/cat $wsa > $SZD_TMP/result/wifi_signal_antenna.result
	done

	# for service info
	/usr/syno/sbin/synoservice --status > $SZD_TMP/result/syno_service.result 2>&1

	# for disk partition info
	for i in `ls /sys/block | grep sd`; do
		/usr/syno/sbin/synopartition --check /dev/${i} >> $SZD_TMP/result/disk_part_ver.result
	done

	# total snapshot count, total subvolume number and metadata
	local subvolume_num=0
	local SZD_SNAPSHOT="$SZD_TMP/result/snapinfo"
	mkdir -p $SZD_SNAPSHOT

	for vol in `ls -d /volume*`; do
		if [ `/usr/syno/sbin/synofstool --get-fs-type $vol` = "btrfs" ]; then
			subvolume_num=$(($subvolume_num+`btrfs sub list $vol | wc -l`))
			cp $vol/@sharesnap/@*.meta $SZD_SNAPSHOT
		fi
	done

	echo $subvolume_num > $SZD_SNAPSHOT/subvolume_num.result
	/usr/syno/sbin/synosharesnapshot snapcount get > $SZD_SNAPSHOT/snapshot_count.result
}
IsMvSocDriver() {
	local KernelVersion Chip
	if [ -z "$1" ]; then
		return 255
	fi
	KernelVersion=`/bin/uname -r | cut -d'.' -f-2`
	if [ "x$KernelVersion" = "x2.4" ]; then
		return 0
	fi
	Chip=`/bin/cat /sys/block/$1/device/../../scsi*/proc_name`
	if [ "x$Chip" = "xmvSata" ]; then
		return 1
	fi
	return 0
}
gen_raid_result() {
	local SZF_RAID_RESULT="$SZD_TMP/result/raid_superblock_enum.result"
	local SZF_SFDISK_RESULT="$SZD_TMP/result/sfdisk_enum.result"

	local i D N ret
	local wait_pid=""
	local _raid_tmp=""
	local _sfdisk_tmp=""

	for i in `cat /proc/partitions | awk '{print $4}'`;
	do
		if [ ! -e /dev/$i ]; then
			continue;
		fi

		# seperate sdXXyy to D=sdXX N=yy
		D=""
		N=""

		case "$i" in
		    hd*)
		    `echo $i | sed -n 's/hd\([a-z]*\)\([0-9]*\)/eval D=hd\1; eval N=\2;/p'`
		    ;;
		    sd*)
		    `echo $i | sed -n 's/sd\([a-z]*\)\([0-9]*\)/eval D=sd\1; eval N=\2;/p'`
		    ;;
		    sas*)
		    `echo $i | sed -n 's/sas\([0-9]*\)p*\([0-9]*\)/eval D=sas\1; eval N=\2;/p'`
		    ;;
		esac

		_raid_tmp="$_raid_tmp $SZF_RAID_RESULT.$i"
		if [ ! -z $N ]; then
			_sfdisk_tmp="$_sfdisk_tmp $SZF_SFDISK_RESULT.$D$N"
		fi

		{
		if [ -x /sbin/mdadm ]; then
			if [ `cat /proc/mdstat | grep -c ${i}` -ne 0 ]; then
				echo "$i:" >> $SZF_RAID_RESULT.$i
				/sbin/mdadm -E -b /dev/$i >> $SZF_RAID_RESULT.$i
				echo "" >> $SZF_RAID_RESULT.$i
			fi
		fi

		if [ ! -z $N ]; then
			# Partition Info for sdXXyy
			/sbin/sfdisk -l -uS -N$N /dev/$D >> $SZF_SFDISK_RESULT.$D$N
			if [ $? -ne 0 ]; then
				echo "/dev/$i error" >> $SZF_SFDISK_RESULT.$D$N
			fi
		elif [ ! -z $D ]; then
			# SMART test for sasX
			if [ `echo $D | grep -c 'sas'` -ne 0 ]; then
				/usr/bin/smartctl -a -d auto /dev/$D > $SZD_TMP/result/smart_$D.result
				continue;
			fi

			# SMART test for sdXX
			IsMvSocDriver $D
			ret=$?
			if [ $ret -eq 0 ]; then
				/usr/bin/smartctl -a -d ata /dev/$D > $SZD_TMP/result/smart_$D.result
			elif [ $ret -eq 1 ]; then
				/usr/bin/smartctl -a -d marvell /dev/$D > $SZD_TMP/result/smart_$D.result
			fi
		fi
		}&
		wait_pid="$wait_pid $!"
	done
	wait $wait_pid
	cat $_raid_tmp 2>/dev/null > $SZF_RAID_RESULT
	cat $_sfdisk_tmp 2>/dev/null > $SZF_SFDISK_RESULT
	rm -f $_raid_tmp $_sfdisk_tmp
}

gen_lv_result()
{
	local SZF_LV_RESULT="$SZD_TMP/result/lv.result"
	lvs=`/sbin/lvs | tail -n +2 | awk '{print "/dev/" $2 "/" $1}' | grep -v syno_vg_reserved_area`
	for lv in $lvs ; do
		echo "  --- Logical volume ---" >> $SZF_LV_RESULT
		echo "  Filesystem created     `/usr/syno/bin/synofstool --get-fs-type $lv`" >> $SZF_LV_RESULT
		/sbin/lvdisplay $lv | tail -n +2 >> $SZF_LV_RESULT
		echo "" >> $SZF_LV_RESULT
	done
}

gen_dm_result()
{
	local SZF_DM_PATH=`/bin/ls /sys/block/dm-*/dm/name`
	local dm name

	for dm_path in ${SZF_DM_PATH}; do
		dm=`printf ${dm_path} | /bin/grep -o 'dm-[0-9]\+'`
		name=`/bin/cat ${dm_path}`
		echo ${dm}"	"${name} >> $SZD_TMP/result/dm.result
	done
}

gen_md_examine_result()
{
	local SZF_MD_EXAM_RESULT="$SZD_TMP/result/md_examine/"
	local DISKS=""
	local PARTS=""
	local wait_pid=""

	mkdir -p $SZF_MD_EXAM_RESULT

	for part in `cat /proc/partitions | awk '{print $4}'`; do
		{
		exam_result="`/sbin/mdadm -E /dev/${part} 2> /dev/null`"
		if [ 0 -eq $? ]; then
			md_dev=`grep "\<${part}\>" /proc/mdstat | awk '{print $1}'`
			echo "${exam_result}" > ${SZF_MD_EXAM_RESULT}/${md_dev}_${part}.log
		fi
		}&
		wait_pid="$wait_pid $!"
	done
	wait $wait_pid
}

gen_tc_result()
{
	local interfaces=`ifconfig | grep "Link encap" | awk '{print $1}'`
	local tc_log="$SZD_TMP/result/tc.result"

	echo "" > $tc_log

	for tc_if in $interfaces ;
	do
		echo "==== $tc_if ====" >> $tc_log
		echo "qdisc:" >> $tc_log
		/usr/sbin/tc qdisc show dev $tc_if >> $tc_log

		echo "class:" >> $tc_log
		/usr/sbin/tc class show dev $tc_if >> $tc_log

		echo "filter:" >> $tc_log
		/usr/sbin/tc filter show dev $tc_if >> $tc_log
	done
}

gen_asound_result()
{
	local base_dir="/proc/asound"

	if [ -d ${base_dir} ]; then
		local card_dir=`ls -d ${base_dir}/card* | sed '/[0-9]$/!d'`
		for card in ${card_dir}; do
			copy_proc_to_tmp "${card}/stream0"
			local sub_dir=`ls -d ${card}/pcm0p/sub* | sed '/[0-9]$/!d'`
			for sub in ${sub_dir}; do
				local sub_list=`ls -d ${sub}/*`
				for sub_file in ${sub_list}; do
					copy_proc_to_tmp "${sub_file}"
				done
			done
		done
	fi
}

gen_sas_topology()
{
	supportSAS=`get_key_value /etc.defaults/synoinfo.conf supportsas`
	if [ "yes" = "${supportSAS}" ]; then
		PROCFILES="${PROCFILES} /sys/class/sas_expander/*/*id /sys/class/sas_expander/*/*rev"
		/bin/cp /tmp/sasdiskmaps $SZD_TMP/result/sasdiskmaps_boot.result
		/usr/syno/bin/synoenc --dump_enc_disk $SZD_TMP/result/sasdiskmaps_curr.result
		/usr/syno/bin/synoenc --enc_enum > $SZD_TMP/result/enc_enum.result
		/usr/syno/bin/synoenc --enc_enum_by_valid_link > $SZD_TMP/result/enc_enum_valid.result
		expAddrs=`/bin/cat /sys/class/sas_device/expander-*/sas_address`
		for exp in ${expAddrs}; do
			/usr/syno/bin/synoses --phy_enum $exp > $SZD_TMP/result/enc.${exp}_phy.result
		done
	fi
}

gen_filesystem_info()
{
	local devPath resultName devName mdList lvList volumePathList volumePath grepPattern
	local tune2FSCmd="`/usr/bin/which tune2fs`"
	local btrfsCmd="`/usr/bin/which btrfs`"
	local btrfsShowSuperCmd="`/usr/bin/which btrfs-show-super` -a"
	local fsTypeCmd="`/usr/bin/which synofstool` --get-fs-type"
	local tune2FSResultDir="$SZD_TMP/var/log/tune2fs"
	local btrfsResultDir="$SZD_TMP/var/log/btrfs"
	mkdir -p "$tune2FSResultDir"
	mkdir -p "$btrfsResultDir"
	mdList=`grep "^md[0-9]*" /proc/mdstat | awk '{print $1}'`
	for devName in $mdList
	do
		devPath="/dev/$devName"
		resultName=`echo "$devPath" | tr '/' '.' | sed -e 's/\.//'`
		if `$fsTypeCmd $devPath | grep -q "^ext[2-4]$"` ; then
			$tune2FSCmd -l "$devPath" > "$tune2FSResultDir/$resultName".result
		elif `$fsTypeCmd $devPath | grep -q "^btrfs$"` ; then
			$btrfsShowSuperCmd "$devPath" > "$btrfsResultDir/$resultName".super.result
			grepPattern="^${devPath%/*}/\<${devPath##*/}\>"
			volumePathList=`df | grep "^$grepPattern" | awk '{print $6}'`
			for volumePath in $volumePathList
			do
				if [ ! -z $volumePath ] ; then
					$btrfsCmd file df $volumePath > "$btrfsResultDir/$resultName".df.result
					$btrfsCmd file show $volumePath > "$btrfsResultDir/$resultName".show.result
					$btrfsCmd filesystem usage $volumePath > "$btrfsResultDir/$resultName".usage.result
				fi
			done
		fi
	done

	lvList=`lvdisplay | grep "LV Path" | awk '{print $3}'`
	for devPath in $lvList
	do
		resultName=`echo "$devPath" | tr '/' '.' | sed -e 's/\.//'`
		if `$fsTypeCmd $devPath | grep -q "^ext[2-4]$"` ; then
			$tune2FSCmd -l "$devPath" > "$tune2FSResultDir/$resultName".result
		elif `$fsTypeCmd $devPath | grep -q "^btrfs$"` ; then
			$btrfsShowSuperCmd "$devPath" > "$btrfsResultDir/$resultName".super.result
			grepPattern="^${devPath%/*}/\<${devPath##*/}\>"
			volumePathList=`df | grep "$grepPattern" | awk '{print $6}'`
			for volumePath in $volumePathList
			do
				if [ ! -z $volumePath ] ; then
					$btrfsCmd file df $volumePath > "$btrfsResultDir/$resultName".df.result
					$btrfsCmd file show $volumePath > "$btrfsResultDir/$resultName".show.result
					$btrfsCmd filesystem usage $volumePath > "$btrfsResultDir/$resultName".usage.result
				fi
			done
		fi
	done
}

gen_selfcheck_result()
{
	/usr/syno/bin/synoselfcheck dsm full
}

gen_dmidecode_result()
{
	if [ -f $DMIDECODE ]; then
            $DMIDECODE > $SZD_TMP/result/dmidecode.result
	fi
}

gen_disk_db_info()
{
	local drivedb="/var/lib/smartmontools/drivedb.version";
	local synodrivedb="/var/lib/smartmontools/synodrivedb.version";
	local tempdb="/var/lib/temperature/disk_temperature.version";
	local infoResult="$SZD_TMP/result/diskdb.result";

	if [ -f $drivedb ]; then
		echo "drivedb.version=`cat $drivedb`" >> $infoResult;
	fi

	if [ -f $synodrivedb ]; then
		echo "synodrivedb.version=`cat $synodrivedb`" >> $infoResult;
	fi

	if [ -f $tempdb ]; then
		echo "disk_temperature.version=`cat $tempdb`" >> $infoResult
	fi
}

mkdir -p $SZD_TMP/result

if [ -x /usr/syno/synoha/etc.defaults/rc.ha ]; then
	/usr/syno/synoha/etc.defaults/rc.ha get-ha-debug-info-pre "$SZD_TMP" "$$" &> /dev/null
fi

gen_cmd_result
gen_raid_result
gen_lv_result
gen_dm_result
gen_md_examine_result
gen_tc_result
gen_asound_result
gen_sas_topology
gen_filesystem_info
gen_dmidecode_result
gen_disk_db_info

for f in $PROCFILES; do
	copy_proc_to_tmp "$f"
done
copy_and_filter_out "\(download_[a-z]*_password\|smspass\|eventpasscrypted\)=" /etc/synoinfo.conf
copy_and_filter_out "\(download_[a-z]*_\(user\|password_en\)\)=" /usr/syno/etc/packages/DownloadStation/settings.conf
copy_and_filter_out "\"rpc-password\"" /usr/syno/etc/packages/DownloadStation/download/settings.json
copy_and_filter_out "^\[" /usr/syno/etc/iscsi_acl.conf
copy_and_filter_out "\(username\|password\)" /usr/syno/etc/iscsi_target.conf
copy_and_filter_out "passwd=" /usr/syno/etc/synosms.conf
copy_and_filter_out "passwd=" /etc/ddns.conf
copy_and_filter_out "\(user\|pass\)=" /etc/portforward/router.conf
copy_and_filter_out "\(remote_pass\|remote_secret\|remote_access_token\|remote_refresh_token\)=" /usr/syno/etc/synobackup.conf
/bin/ls -l $TMP_LIST >> "$SZD_TMP/grep_files.list"

/bin/ls -l /var/packages >> "$SZD_TMP/packages.list"
/bin/ls -lt /etc/apparmor.d/cache >> "$SZD_TMP/apparmor_cache.list"

if [ -x /usr/syno/synoha/etc.defaults/rc.ha ]; then
	/usr/syno/synoha/etc.defaults/rc.ha get-ha-debug-info-post "$SZD_TMP" "$$" &> /dev/null
fi

if [ "yes" = "`/bin/get_key_value /etc.defaults/synoinfo.conf support_dual_head`" ]; then
	/usr/syno/synoaha/bin/synoaha --get-passive-debug-dat "$SZD_TMP" &> /dev/null
fi

for f in $SZF_MSG; do
	mkdir -p $SZD_TMP`/usr/bin/dirname "$f"`
	cp -rsx "$f" $SZD_TMP"$f"
done

for d in $DIRLIST; do
	mkdir -p $SZD_TMP$d
	cp -rsx $d/ $SZD_TMP$d/../
done

/usr/syno/sbin/synologconvert -o "$SZD_TMP/var/log/synolog/synosys.log" /var/log/synolog/.SYNOSYSDB
/usr/syno/sbin/synologconvert -o "$SZD_TMP/var/log/synolog/synoconn.log" /var/log/synolog/.SYNOCONNDB

rm -rf $SZD_TMP/var/log/httpd/
mkdir -p $SZD_TMP/var/log/httpd/
cp -r /var/log/httpd/* $SZD_TMP/var/log/httpd/

cat $EXCLUDE_LIST | while read LINE
do
	if [ -z "$LINE" ]; then
		continue;
	fi
	rm -rf $SZD_TMP$LINE
done

rm -rf $EXCLUDE_LIST


