File: //usr/syno/bin/user.data.collector/synouserdata_fileservice
#!/bin/sh
BIN_GET_KEY_VALUE="/bin/get_key_value"
BIN_CAT="bin/cat"
BIN_SED="/bin/sed"
BIN_GREP="/bin/grep"
BIN_SCHEDULE_TASK="/usr/syno/bin/synoschedtask"
SYNOINFO_CONF="/etc/synoinfo.conf"
SMB_CONF="/etc/samba/smb.conf"
SMBINFO_CONF="/etc/samba/smbinfo.conf"
SMBSTATUS="/usr/bin/smbstatus"
WBINFO="/usr/bin/wbinfo"
NET="/usr/bin/net"
TIMEOUT="/usr/bin/timeout"
GETKEYINT() {
local File="$1"
local Key="$2"
local Value=`/usr/syno/bin/synogetkeyvalue "$File" "$Key"`
local ret=0
if [ "x$Value" = "x" ]; then
Value=0
ret=1
fi
echo -n "$Value"
return $ret
}
GETKEY() {
local File="$1"
local Key="$2"
local Value=`/usr/syno/bin/synogetkeyvalue "$File" "$Key"`
local ret=0
if [ "x$Value" = "x" ]; then
Value=""
ret=1
fi
echo -n "$Value"
return $ret
}
GETDOMAINBASICINFO() {
SERVER_OS=`GETKEY /usr/syno/etc/private/domain_info rpc:server_os`
if [ "x$SERVER_OS" = "x" ]; then
DC_HOSTNAME=`$TIMEOUT 20 $NET ads lookup 2>/dev/null | $BIN_GREP "Pre-Win2k Hostname:" | /usr/bin/cut -f2`
SERVER_OS=`$TIMEOUT 20 $NET ads search "(samaccountname=${DC_HOSTNAME}\$)" 'operatingSystem' -P 2>/dev/null | $BIN_GREP operatingSystem | $BIN_SED -e 's/operatingSystem: //'`
fi
echo -n ",\"DC_OS\":\"$SERVER_OS\""
DOMAIN_USER_NUM=`/usr/syno/sbin/synouser --enum domain 2>/dev/null | /usr/bin/wc -l`
DOMAIN_USER_NUM=`expr $DOMAIN_USER_NUM - 1`
echo -n ",\"domain_user_num\":$DOMAIN_USER_NUM"
DOMAIN_GROUP_NUM=`/usr/syno/sbin/synogroup --enum domain 2>/dev/null | /usr/bin/wc -l`
DOMAIN_GROUP_NUM=`expr $DOMAIN_GROUP_NUM - 1`
echo -n ",\"domain_group_num\":$DOMAIN_GROUP_NUM"
}
COMMA_1=""
echo -n "{"
echo -n "$COMMA_1\"collector_version\":3"
COMMA_1=","
echo -n "$COMMA_1\"domain\":{"
TRUST_DOMAIN=`GETKEY $SYNOINFO_CONF "supporttrustdomain"`
echo -n \"trust_domain\":\"$TRUST_DOMAIN\",
ADVANCED_DOMAIN_OPTION=`GETKEY $SMBINFO_CONF "advanced_domain_option"`
echo -n \"advanced_domain_option\":\"$ADVANCED_DOMAIN_OPTION\",
REGISTER_NIC=`GETKEY $SMBINFO_CONF "register nic"`
if [ "$REGISTER_NIC" == "" ]; then
echo -n \"register_nic\":\"ALL\",
else
echo -n \"register_nic\":\"OTHER\",
fi
SCHEDULE_TYPE="None"
TASK_ID=`$BIN_SCHEDULE_TASK --get state=enabled | $BIN_GREP ID | $BIN_SED 's/^.*\[//g' | $BIN_SED 's/\].*$//g'`
for x in $TASK_ID
do
RESULT=`$BIN_SCHEDULE_TASK --get id=$x`
IS_DOMAIN=`echo $RESULT | $BIN_GREP "updateDomain"`
if [ $? -eq 0 ]; then
SCHEDULE_TYPE=`echo $RESULT | $BIN_GREP "Type:" | $BIN_SED 's/^.*Type: \[//g' | $BIN_SED 's/\].*$//g'`
fi
done
echo -n \"schedule_type\":\"$SCHEDULE_TYPE\",
SYNO_SYNC_DCTIME=`GETKEY $SMB_CONF "syno sync dctime"`
echo -n \"syno_sync_dctime\":\"$SYNO_SYNC_DCTIME\",
SERVER_SIGNING=`GETKEY $SMBINFO_CONF "server signing"`
echo -n \"server_signing\":\"$SERVER_SIGNING\",
NT4_ENUM_ENABLE=`GETKEY $SMBINFO_CONF "enable nt4 enum"`
echo -n \"nt4_enum_enable\":\"$NT4_ENUM_ENABLE\",
DOMAIN_ADMINS_DISABLE=`GETKEY $SMBINFO_CONF "disable domain admins"`
echo -n \"domain_admins_disable\":\"$DOMAIN_ADMINS_DISABLE\",
WINBIND_EXPAND_GROUPS=`GETKEY $SMBINFO_CONF "winbind expand groups"`
if [ "$WINBIND_EXPAND_GROUPS" == "" ]; then
WINBIND_EXPAND_GROUPS=1
fi
echo -n \"winbind_expand_group\":$WINBIND_EXPAND_GROUPS
############# Domain ##############
SECURITY=`/usr/syno/bin/synogetkeyvalue $SMB_CONF security`
############# only collect ads domain #############
if [ "x$SECURITY" = "xads" ]; then
echo -n ",\"join_type\":\"ads\""
GETDOMAINBASICINFO
TOTAL_DOMAIN_NUM=`$WBINFO -e 2>/dev/null | /usr/bin/wc -l`
echo -n ",\"domain_num\":$TOTAL_DOMAIN_NUM"
echo -n ",\"response_time\":{"
COMMA_2=""
MAJOR=1
$WBINFO -m --verbose 2>/dev/null | while read Domain FQDN Line
do
if [ "x$FQDN" = "xName" -o "x$FQDN" = "xNone" ]; then
continue
fi
/bin/ping -w1 $FQDN 2>/dev/null > /dev/null
if [ "$?" = "0" ]; then
TIME=`/usr/bin/time -p $NET ads info -S $FQDN 2>&1 | grep real | cut -d' ' -f2`
else
TIME="\"fail\""
fi
if [ $MAJOR -eq 1 ]; then
echo -n "\"major\":$TIME,\"trust\":["
MAJOR=0
continue
fi
echo -n "${COMMA_2}${TIME}"
COMMA_2=","
done
echo -n "]"
echo -n "}"
elif [ "x$SECURITY" = "xdomain" ]; then
echo -n ",\"join_type\":\"nt4\""
GETDOMAINBASICINFO
fi
echo -n "}"
echo -n "$COMMA_1\"smb\":{"
COMMA_1=","
/usr/syno/sbin/synoservice --is-enabled samba 2>&1 > /dev/null
if [ $? = 1 ]; then
echo -n "\"is_enable\":\"yes\""
else
echo -n "\"is_enable\":\"no\""
fi
############# Samba #############
MAX_PROTOCOL=`GETKEY $SMB_CONF "max protocol"`
echo -n ,\"max_protocol\":\"$MAX_PROTOCOL\"
SMB_ENCRYPT=`GETKEY $SMBINFO_CONF "smb encrypt"`
if [ "$SMB_ENCRYPT" == "" ]; then
SMB_ENCRYPT="auto"
fi
echo -n ,\"smb_encrypt\":\"$SMB_ENCRYPT\"
ENABLE_VETO_FILE=`GETKEY ${SMBINFO_CONF} "enable veto files"`
if [ "$ENABLE_VETO_FILE" = "yes" ] ; then
VETO_FILE=`GETKEY ${SMBINFO_CONF} "veto files"`
echo -n ",\"veto files\":\"$VETO_FILE\""
else
echo -n ",\"veto files\":\"\""
fi
FOLLOW_SYMLINK=`GETKEY ${SMBINFO_CONF} "follow symlinks"`
if [ "$FOLLOW_SYMLINK" == "yes" ]; then
echo -n ,\"follow_symlink\":\"yes\"
else
echo -n ,\"follow_symlink\":\"no\"
fi
WIDELINK=`GETKEY ${SMBINFO_CONF} "wide links"`
INSECURE_WIDELINK=`GETKEY ${SMBINFO_CONF} "allow insecure widelinks"`
if [ "$WIDELINK" == "yes" -a "$INSECURE_WIDELINK" == "yes" ]; then
echo -n ,\"widelink\":\"yes\"
else
echo -n ,\"widelink\":\"no\"
fi
CREATE_MASK=`GETKEY ${SMBINFO_CONF} "create mask"`
DIR_MASK=`GETKEY ${SMBINFO_CONF} "directory mask"`
if [ "$CREATE_MASK" != "" -a "$DIR_MASK" != "" ]; then
echo -n ,\"smb_umask_enable\":\"yes\"
else
echo -n ,\"smb_umask_enable\":\"no\"
fi
MSDFS_ENABLE=`GETKEY ${SMBINFO_CONF} "msdfs root"`
if [ "$MSDFS_ENABLE" == "yes" ]; then
echo -n ,\"msdfs_enable\":\"yes\"
else
echo -n ,\"msdfs_enable\":\"no\"
fi
############# use smbstatus to get current smb connection #############
SMB_CONN_NUM=`$SMBSTATUS -S 2> /dev/null | /usr/bin/wc -l`
## remove additional line from smbstatus ##
SMB_CONN_NUM=$(($SMB_CONN_NUM - 1))
echo -n ",\"connection_num\":$SMB_CONN_NUM"
declare -A SMBX_NUM
SMBX_NUM=( ["NT1"]=0 ["SMB2_02"]=0 ["SMB2_10"]=0 ["SMB3"]=0 )
SMB_CONN_VER=`$SMBSTATUS -S 2> /dev/null | /usr/bin/awk '{{print $6;}}'`
for ver in ${SMB_CONN_VER}
do
if [ $ver = "NT1" ]; then
SMBX_NUM["NT1"]=`expr ${SMBX_NUM["NT1"]} + 1`
elif [ $ver = "SMB2_02" ]; then
SMBX_NUM["SMB2_02"]=`expr ${SMBX_NUM["SMB2_02"]} + 1`
elif [ $ver = "SMB2_10" ]; then
SMBX_NUM["SMB2_10"]=`expr ${SMBX_NUM["SMB2_10"]} + 1`
elif [[ $ver =~ SMB3* ]]; then
SMBX_NUM["SMB3"]=`expr ${SMBX_NUM["SMB3"]} + 1`
fi
done
for key in ${!SMBX_NUM[@]}
do
echo -n ",\"${key}_num\":${SMBX_NUM[$key]}"
done
echo -n "}"
echo -n "$COMMA_1\"nfs\":{"
COMMA_1=","
/usr/syno/sbin/synoservice --is-enabled nfsd 2>&1 > /dev/null
RUN_NFS=$?
if [ "$RUN_NFS" = "1" ]; then
echo -n "\"is_enable\":\"yes\""
else
echo -n "\"is_enable\":\"no\""
fi
NFS_READ_SIZE=`GETKEYINT /etc/nfs/syno_nfs_conf udp_read_size`
echo -n ",\"udp_read_size\":\"$NFS_READ_SIZE\""
NFS_WRITE_SIZE=`GETKEYINT /etc/nfs/syno_nfs_conf udp_write_size`
echo -n ",\"udp_write_size\":\"$NFS_WRITE_SIZE\""
NFS_V4=`GETKEY /etc/nfs/syno_nfs_conf nfsv4_enable`
echo -n ",\"nfsv4_enable\":\"$NFS_V4\""
NFS_KERBEROS=`GETKEY /etc/nfs/syno_nfs_conf kerberos_principal`
if [ "x$NFS_KERBEROS" = "x" ]; then
echo -n ",\"nfs_kerberos_enable\":\"no\""
else
echo -n ",\"nfs_kerberos_enable\":\"yes\""
fi
if [ "$RUN_NFS" = "1" ] ; then
NFS_CONN_NUM=`cat /var/tmp/nfs_cur_con.log 2>/dev/null | /usr/bin/wc -l`
echo -n ",\"connection_num\":$NFS_CONN_NUM"
else
echo -n ",\"connection_num\":0"
fi
NFS_UMASK_ENABLE=`GETKEY /etc/nfs/syno_nfs_conf nfs_unix_pri_enable`
if [ "$NFS_UMASK_ENABLE" == "1" ]; then
echo -n ,\"nfs_umask_enable\":\"yes\"
else
echo -n ,\"nfs_umask_enable\":\"no\"
fi
echo -n "}"
echo -n "$COMMA_1\"afp\":{"
COMMA_1=","
/usr/syno/sbin/synoservice --is-enabled atalk 2>&1 > /dev/null
if [ $? = 1 ]; then
echo -n "\"is_enable\":\"yes\""
else
echo -n "\"is_enable\":\"no\""
fi
AFP_UMASK_ENABLE=`GETKEY /etc/synoinfo.conf afp_umask`
if [ "$AFP_UMASK_ENABLE" == "yes" ]; then
echo -n ,\"afp_umask_enable\":\"yes\"
else
echo -n ,\"afp_umask_enable\":\"no\"
fi
AFP_CONN_NUM=`cat /tmp/apple/AT_LOG 2>/dev/null | grep , | /usr/bin/wc -l`
echo -n ",\"connection_num\":$AFP_CONN_NUM"
echo -n "}"
echo -n "}"