Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package supportutils for openSUSE:Factory 
checked in at 2021-03-16 15:43:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/supportutils (Old)
 and      /work/SRC/openSUSE:Factory/.supportutils.new.2401 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "supportutils"

Tue Mar 16 15:43:23 2021 rev:20 rq:878390 version:3.1.14

Changes:
--------
--- /work/SRC/openSUSE:Factory/supportutils/supportutils.changes        
2021-03-08 15:15:37.817865185 +0100
+++ /work/SRC/openSUSE:Factory/.supportutils.new.2401/supportutils.changes      
2021-03-16 15:44:28.225043524 +0100
@@ -1,0 +2,7 @@
+Thu Mar 11 18:12:31 UTC 2021 - [email protected]
+
+- Fixed mismatched taint flags (bsc#1178491)
+- Removed redundant fdisk code that can cause timeout issues (bsc#1181679)
+- Supportconfig processes -f without hanging (bsc#1182904)
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ supportutils-3.1.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/supportutils-3.1.14/bin/supportconfig 
new/supportutils-3.1.14/bin/supportconfig
--- old/supportutils-3.1.14/bin/supportconfig   2021-03-02 22:40:17.752003805 
+0100
+++ new/supportutils-3.1.14/bin/supportconfig   2021-03-11 19:11:06.227835618 
+0100
@@ -1,7 +1,7 @@
 #!/bin/bash
 
-SVER='3.1.11-1'
-SDATE='2021 02 16'
+SVER='3.1.11-4'
+SDATE='2021 03 11'
 
 ##############################################################################
 #  supportconfig - Gathers system troubleshooting information for SUSE Support
@@ -33,7 +33,7 @@
 #  along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 #  Authors/Contributors:
-#     Jason Record ([email protected])
+#     Jason Record <[email protected]>
 #
 ##############################################################################
 
@@ -91,7 +91,7 @@
        echo "  -b Screen buffer mode"
        echo "  -c Disables curl checks to SUSE update servers"
        echo "  -d Exclude detailed disk info and scans"
-       echo "  -f From directory. Don't collect report files, just use files 
in that"
+       echo "  -f From directory. Don't collect report files, just use the 
directory or files in that"
        echo "     directory."
        echo "  -g Use gzip instead of the default xz compression"
        echo "  -i <keyword list>"
@@ -244,12 +244,13 @@
        log_cmd $OF 'free -k'
        timed_log_cmd $OF 'df -h' || IO_DELAYS=1
        (( $IO_DELAYS )) || log_cmd $OF 'df -i'
-       conf_files $OF '/proc/sys/kernel/tainted'
-       TAINT=$(cat /proc/sys/kernel/tainted)
+       TAINT_SRC='/proc/sys/kernel/tainted'
+       conf_files $OF $TAINT_SRC
+       TAINT=$(cat $TAINT_SRC)
        TAINTED=0
-       if [ ${#TAINT} -gt 1 ]; then
+       if (( ${#TAINT} > 1 )); then
                TAINTED=1
-       elif [ ${TAINT} -gt 0 ]; then
+       elif (( ${TAINT} > 0 )); then
                TAINTED=1
        fi
        if (( TAINTED )); then
@@ -257,57 +258,69 @@
                # Refer to /usr/src/linux/include/linux/kernel.h and 
/usr/src/linux/kernel/panic.c (print_tainted function)
                TAINT_STRING=""
 
-               # common to all versions
-               test $((TAINT & 1))   -ne 0 && TAINT_STRING="${TAINT_STRING}P" 
|| TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 2))   -ne 0 && TAINT_STRING="${TAINT_STRING}F" 
|| TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 4))   -ne 0 && TAINT_STRING="${TAINT_STRING}S" 
|| TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 8))   -ne 0 && TAINT_STRING="${TAINT_STRING}R" 
|| TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 16))  -ne 0 && TAINT_STRING="${TAINT_STRING}M" 
|| TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 32))  -ne 0 && TAINT_STRING="${TAINT_STRING}B" 
|| TAINT_STRING="${TAINT_STRING} "
+               # common to all versions SLES15 and higher
+               test $((TAINT & 1))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}P" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 2))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}F" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 4))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}S" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 8))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}R" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 16))    -ne 0 && 
TAINT_STRING="${TAINT_STRING}M" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 32))    -ne 0 && 
TAINT_STRING="${TAINT_STRING}B" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 64))    -ne 0 && 
TAINT_STRING="${TAINT_STRING}U" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 128))   -ne 0 && 
TAINT_STRING="${TAINT_STRING}D" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 256))   -ne 0 && 
TAINT_STRING="${TAINT_STRING}A" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 512))   -ne 0 && 
TAINT_STRING="${TAINT_STRING}W" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 1024))  -ne 0 && 
TAINT_STRING="${TAINT_STRING}C" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 2048))  -ne 0 && 
TAINT_STRING="${TAINT_STRING}I" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 4096))  -ne 0 && 
TAINT_STRING="${TAINT_STRING}O" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 8192))  -ne 0 && 
TAINT_STRING="${TAINT_STRING}E" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 16384)) -ne 0 && 
TAINT_STRING="${TAINT_STRING}L" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 32768)) -ne 0 && 
TAINT_STRING="${TAINT_STRING}K" || TAINT_STRING="${TAINT_STRING} "
 
                case $SLES_VER in
-               15*|999)
-               test $((TAINT & 64))         -ne 0 && 
TAINT_STRING="${TAINT_STRING}U" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 128))        -ne 0 && 
TAINT_STRING="${TAINT_STRING}D" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 256))        -ne 0 && 
TAINT_STRING="${TAINT_STRING}A" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 512))        -ne 0 && 
TAINT_STRING="${TAINT_STRING}W" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 1024))       -ne 0 && 
TAINT_STRING="${TAINT_STRING}C" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 2048))       -ne 0 && 
TAINT_STRING="${TAINT_STRING}I" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 4096))       -ne 0 && 
TAINT_STRING="${TAINT_STRING}O" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 8192))       -ne 0 && 
TAINT_STRING="${TAINT_STRING}E" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 16384))      -ne 0 && 
TAINT_STRING="${TAINT_STRING}L" || TAINT_STRING="${TAINT_STRING} "
-               test $((TAINT & 32768))      -ne 0 && 
TAINT_STRING="${TAINT_STRING}K" || TAINT_STRING="${TAINT_STRING} "
+               150|151)
                test $((TAINT & 65536))      -ne 0 && 
TAINT_STRING="${TAINT_STRING}H" || TAINT_STRING="${TAINT_STRING} "
                test $((TAINT & 1073741824)) -ne 0 && 
TAINT_STRING="${TAINT_STRING}N" || TAINT_STRING="${TAINT_STRING} "
                test $((TAINT & 2147483648)) -ne 0 && 
TAINT_STRING="${TAINT_STRING}X" || TAINT_STRING="${TAINT_STRING} "
                ;;
+               15*|999)
+               test $((TAINT & 65536))      -ne 0 && 
TAINT_STRING="${TAINT_STRING}X" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 131072))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}T" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 262144))     -ne 0 && 
TAINT_STRING="${TAINT_STRING}H" || TAINT_STRING="${TAINT_STRING} "
+               test $((TAINT & 2147483648)) -ne 0 && 
TAINT_STRING="${TAINT_STRING}N" || TAINT_STRING="${TAINT_STRING} "
+               ;;
                esac
                log_write $OF "Kernel Status -- Tainted: $TAINT_STRING"
 
-               # common to all versions
-               test $((TAINT & 1))   -ne 0 && log_write $OF "  TAINT: (P) 
Proprietary module has been loaded"
-               test $((TAINT & 2))   -ne 0 && log_write $OF "  TAINT: (F) 
Module was forcibly loaded"
-               test $((TAINT & 4))   -ne 0 && log_write $OF "  TAINT: (S) SMP 
with CPUs not designed for SMP"
-               test $((TAINT & 8))   -ne 0 && log_write $OF "  TAINT: (R) 
Module was forcibly unloaded"
-               test $((TAINT & 16))  -ne 0 && log_write $OF "  TAINT: (M) 
Machine check exception"
-               test $((TAINT & 32))  -ne 0 && log_write $OF "  TAINT: (B) 
System has hit bad_page"
+               # common to all versions SLES15 and higher
+               test $((TAINT & 1))     -ne 0 && log_write $OF "  TAINT: (P) 
Proprietary module has been loaded"
+               test $((TAINT & 2))     -ne 0 && log_write $OF "  TAINT: (F) 
Module was forcibly loaded"
+               test $((TAINT & 4))     -ne 0 && log_write $OF "  TAINT: (S) 
SMP with CPUs not designed for SMP"
+               test $((TAINT & 8))     -ne 0 && log_write $OF "  TAINT: (R) 
Module was forcibly unloaded"
+               test $((TAINT & 16))    -ne 0 && log_write $OF "  TAINT: (M) 
Machine check exception"
+               test $((TAINT & 32))    -ne 0 && log_write $OF "  TAINT: (B) 
System has hit bad_page"
+               test $((TAINT & 64))    -ne 0 && log_write $OF "  TAINT: (U) 
Userspace-defined problems"
+               test $((TAINT & 128))   -ne 0 && log_write $OF "  TAINT: (D) 
Kernel has oopsed before"
+               test $((TAINT & 256))   -ne 0 && log_write $OF "  TAINT: (A) 
ACPI table overridden"
+               test $((TAINT & 512))   -ne 0 && log_write $OF "  TAINT: (W) 
Taint on warning"
+               test $((TAINT & 1024))  -ne 0 && log_write $OF "  TAINT: (C) 
Modules from drivers/staging are loaded"
+               test $((TAINT & 2048))  -ne 0 && log_write $OF "  TAINT: (I) 
Working around severe firmware bug"
+               test $((TAINT & 4096))  -ne 0 && log_write $OF "  TAINT: (O) 
Out-of-tree module has been loaded"
+               test $((TAINT & 8192))  -ne 0 && log_write $OF "  TAINT: (E) 
Unsigned module has been loaded"
+               test $((TAINT & 16384)) -ne 0 && log_write $OF "  TAINT: (L) A 
soft lockup has previously occurred"
+               test $((TAINT & 32768)) -ne 0 && log_write $OF "  TAINT: (K) 
Kernel has been live patched"
 
                case $SLES_VER in
-               15*|999)
-               test $((TAINT & 64))         -ne 0 && log_write $OF "  TAINT: 
(U) Userspace-defined problems"
-               test $((TAINT & 128))        -ne 0 && log_write $OF "  TAINT: 
(D) Kernel has oopsed before"
-               test $((TAINT & 256))        -ne 0 && log_write $OF "  TAINT: 
(A) ACPI table overridden"
-               test $((TAINT & 512))        -ne 0 && log_write $OF "  TAINT: 
(W) Taint on warning"
-               test $((TAINT & 1024))       -ne 0 && log_write $OF "  TAINT: 
(C) Modules from drivers/staging are loaded"
-               test $((TAINT & 2048))       -ne 0 && log_write $OF "  TAINT: 
(I) Working around severe firmware bug"
-               test $((TAINT & 4096))       -ne 0 && log_write $OF "  TAINT: 
(O) Out-of-tree module has been loaded"
-               test $((TAINT & 8192))       -ne 0 && log_write $OF "  TAINT: 
(E) Unsigned module has been loaded"
-               test $((TAINT & 16384))      -ne 0 && log_write $OF "  TAINT: 
(L) A soft lockup has previously occurred"
-               test $((TAINT & 32768))      -ne 0 && log_write $OF "  TAINT: 
(K) Kernel has been live patched"
+               150|151)
                test $((TAINT & 65536))      -ne 0 && log_write $OF "  TAINT: 
(H) System restored from unsafe hibernate snapshot image"
                test $((TAINT & 1073741824)) -ne 0 && log_write $OF "  TAINT: 
(N) Unsupported modules loaded"
                test $((TAINT & 2147483648)) -ne 0 && log_write $OF "  TAINT: 
(X) Modules with external support loaded"
                ;;
+               15*|999)
+               test $((TAINT & 65536))      -ne 0 && log_write $OF "  TAINT: 
(X) Modules with external support loaded"
+               test $((TAINT & 131072))     -ne 0 && log_write $OF "  TAINT: 
(T) Kernel built with randstruct plugin"
+               test $((TAINT & 262144))     -ne 0 && log_write $OF "  TAINT: 
(H) System restored from unsafe hibernate snapshot image"
+               test $((TAINT & 2147483648)) -ne 0 && log_write $OF "  TAINT: 
(N) Unsupported modules loaded"
+               ;;
                esac
 
                log_write $OF
@@ -1808,10 +1821,9 @@
        printlog "Disk I/O..."
        test $OPTION_DISK -eq 0 && { echolog Excluded; return 1; }
        OF=fs-diskio.txt
-       local DISK_IO_DELAYS=0
        addHeaderFile $OF
-       timed_log_cmd $OF 'fdisk -l 2>/dev/null | grep Disk' || DISK_IO_DELAYS=1
        conf_files $OF /proc/partitions /etc/fstab
+       log_cmd $OF "lsblk -o 
'NAME,KNAME,MAJ:MIN,FSTYPE,LABEL,RO,RM,MODEL,SIZE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,SCHED,MOUNTPOINT,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO'"
        [[ -x /usr/bin/findmnt ]] && log_cmd $OF "findmnt"
        log_cmd $OF "mount"
        conf_files $OF /proc/mounts /etc/mtab
@@ -1878,7 +1890,6 @@
                        log_write $OF 
"#---------------------------------------------------#"
                        log_cmd $OF 'lsscsi'
                        log_cmd $OF 'lsscsi -H'
-                       (( $DISK_IO_DELAYS )) || log_cmd $OF "lsblk -o 
'NAME,KNAME,MAJ:MIN,FSTYPE,LABEL,RO,RM,MODEL,SIZE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,SCHED,MOUNTPOINT,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO'"
                        if log_cmd $OF 'scsiinfo -l'
                        then
                                FILES=$(scsiinfo -l)
@@ -1927,20 +1938,20 @@
                [[ -x /usr/bin/findmnt ]] && log_cmd $OF "findmnt" || log_cmd 
$OF "mount"
                (( $IO_DELAYS )) || log_cmd $OF "df -h"
                log_cmd $OF "modinfo btrfs"
-                for DEVICE in $(btrfs filesystem show | awk 'NF{ print $NF }' 
| grep ^/)
-                #TODO For multi-device btrfs filesysems only use one device
-                do
-                        for FILESYS in $(findmnt -S $DEVICE --types btrfs 
--list --output target --first-only --noheadings)
-                        do
-                                log_cmd $OF "btrfs filesystem usage $FILESYS"
-                                log_cmd $OF "btrfs scrub status $FILESYS"
-                                log_cmd $OF "btrfs balance status -v $FILESYS"
-                                log_cmd $OF "btrfs subvolume get-default 
$FILESYS"
-                                log_cmd $OF "btrfs subvolume list $FILESYS"
+               for DEVICE in $(btrfs filesystem show | awk 'NF{ print $NF }' | 
grep ^/)
+               #TODO For multi-device btrfs filesysems only use one device
+               do
+                       for FILESYS in $(findmnt -S $DEVICE --types btrfs 
--list --output target --first-only --noheadings)
+                       do
+                               log_cmd $OF "btrfs filesystem usage $FILESYS"
+                               log_cmd $OF "btrfs scrub status $FILESYS"
+                               log_cmd $OF "btrfs balance status -v $FILESYS"
+                               log_cmd $OF "btrfs subvolume get-default 
$FILESYS"
+                               log_cmd $OF "btrfs subvolume list $FILESYS"
                                log_cmd $OF "btrfs qgroup show -prce $FILESYS"
                                log_cmd $OF "btrfs device stats $FILESYS"
-                        done
-                done
+                       done
+               done
 
                if rpm_verify $OF snapper; then
                        log_cmd $OF "snapper list-configs"
@@ -4185,38 +4196,56 @@
        test -z "$NOTFOUND" && BASE="${BASE}_%u" #add UID if not present already
 fi
 
-if [ -n "$FROM_DIRECTORY" ]; then
-       VAR_OPTION_LOG_DIRS=$FROM_DIRECTORY
-       BASE=$(ls -t $FROM_DIRECTORY | grep nts | head -n1)
+if [[ -n "$FROM_DIRECTORY" ]]; then
+       if [[ -s ${FROM_DIRECTORY}/${BASIC_ENVF} ]]; then
+               VAR_OPTION_LOG_DIRS=$(dirname ${FROM_DIRECTORY} 2>/dev/null)
+               BASE=$(basename ${FROM_DIRECTORY} 2>/dev/null)
+       else
+               VAR_OPTION_LOG_DIRS=$FROM_DIRECTORY
+               TBASE=$(ls -1td ${FROM_DIRECTORY}/*/ 2>/dev/null | egrep 
'scc_|nts_' | head -n1)
+               BASE=$(basename $TBASE 2>/dev/null)
+       fi
 fi
 
 for LOG in $VAR_OPTION_LOG_DIRS
 do
        # If a full path was not assigned, the cwd will be prepended to the LOG 
path
        VALID_LOG=$(echo $LOG | grep '^/')
-       if [ -z "$VALID_LOG" ]; then
+       if [[ -z "$VALID_LOG" ]]; then
                VALID_LOG=$(echo $LOG | grep '^\./')
                CURRENT_PATH="$(pwd)"
-               if [ -n "$VALID_LOG" ]; then
+               if [[ -n "$VALID_LOG" ]]; then
                        LOG="${CURRENT_PATH}/${LOG:2}"
                else
                        LOG="${CURRENT_PATH}/${LOG}"
                fi
        fi
-       # Create the paths
        normalize_base
-       [ $USE_SAVED_LOGS_ONLY -eq 0 ] && check_log_dir
-       LOG=${LOG}/${BASE}
-       if mkdir -p $LOG &>/dev/null; then 
-               unset LOGERROR
-               break
+       # Create the paths
+       if (( USE_SAVED_LOGS_ONLY )); then
+               if [[ -n $BASE ]]; then
+                       LOG=${LOG}/${BASE}
+               else
+                       echo "ERROR: Missing or invalid supportconfig directory 
in -f $LOG"
+                       LOGERROR=1
+               fi
        else
-               echo "ERROR: Cannot create $LOG"
-               LOGERROR=1
+               check_log_dir
+               LOG=${LOG}/${BASE}
+               if mkdir -p $LOG &>/dev/null; then 
+                       unset LOGERROR
+                       break
+               else
+                       echo "ERROR: Cannot create $LOG"
+                       LOGERROR=1
+               fi
        fi
 done
 
-test $LOGERROR && { echo; exit_code 3; }
+if (( $LOGERROR )); then
+       echo
+       exit_code 3
+fi
 export LOG
 
 if [ "$USE_SAVED_LOGS_ONLY" != "1" ]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/supportutils-3.1.14/man/supportconfig.8 
new/supportutils-3.1.14/man/supportconfig.8
--- old/supportutils-3.1.14/man/supportconfig.8 2021-02-16 21:15:23.213026680 
+0100
+++ new/supportutils-3.1.14/man/supportconfig.8 2021-03-09 19:17:30.984547422 
+0100
@@ -1,4 +1,4 @@
-.TH SUPPORTCONFIG 8 "16 Feb 2021" "supportutils" "Support Utilities Manual"
+.TH SUPPORTCONFIG 8 "09 Mar 2021" "supportutils" "Support Utilities Manual"
 .SH NAME
 supportconfig - Gathers system troubleshooting information
 .SH SYNOPSIS
@@ -133,7 +133,7 @@
 Exclude detailed disk information and scans. Disks are still scanned, but this 
switch attempts to minimize the disk scans.
 .TP
 \fB\-f\fR \fIdirectory\fR
-From directory. Don't collect report files, just use files in that directory.
+From directory. Don't collect report files, just use files in that directory. 
This option is most often used in connection with -t <target_directory> and the 
YaST support module. If a regular directory is used, supportconfig looks for 
the most recent supportconfig archive directory and uses it. If a valid 
supportconfig directory is specified, it is used.
 .TP
 \fB\-g\fR 
 Use gzip instead of the default bzip2 compression.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/supportutils-3.1.14/spec/supportutils.changes 
new/supportutils-3.1.14/spec/supportutils.changes
--- old/supportutils-3.1.14/spec/supportutils.changes   2021-03-03 
16:38:08.919469787 +0100
+++ new/supportutils-3.1.14/spec/supportutils.changes   2021-03-11 
19:13:37.583641400 +0100
@@ -1,4 +1,11 @@
 -------------------------------------------------------------------
+Thu Mar 11 18:12:31 UTC 2021 - [email protected]
+
+- Fixed mismatched taint flags (bsc#1178491)
+- Removed redundant fdisk code that can cause timeout issues (bsc#1181679)
+- Supportconfig processes -f without hanging (bsc#1182904)
+
+-------------------------------------------------------------------
 Wed Mar  3 14:12:42 UTC 2021 - Thorsten Kukuk <[email protected]>
 
 - Remove net-tools from requires, it does not contain any tool

Reply via email to