123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- #!/bin/sh
- # Prints the user's email address, with confirmation from the user.
- #
- # Copyright (C) 2001-2003, 2005, 2015-2016 Free Software Foundation, Inc.
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- # Prerequisites for using ${exec_prefix}/lib and ${datarootdir}/locale.
- prefix="/usr"
- exec_prefix="${prefix}"
- datarootdir="${prefix}/share"
- datadir="${datarootdir}"
- # Set variables libdir, localedir.
- libdir="${exec_prefix}/lib"
- localedir="${datarootdir}/locale"
- # Support for relocatability.
- if test "no" = yes; then
- orig_installdir="$libdir"/gettext # see Makefile.am's install rule
- # Determine curr_installdir without caring for symlinked callers.
- curr_installdir=`echo "$0" | sed -e 's,/[^/]*$,,'`
- curr_installdir=`cd "$curr_installdir" && pwd`
- # Compute the original/current installation prefixes by stripping the
- # trailing directories off the original/current installation directories.
- while true; do
- orig_last=`echo "$orig_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
- curr_last=`echo "$curr_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
- if test -z "$orig_last" || test -z "$curr_last"; then
- break
- fi
- if test "$orig_last" != "$curr_last"; then
- break
- fi
- orig_installdir=`echo "$orig_installdir" | sed -e 's,/[^/]*$,,'`
- curr_installdir=`echo "$curr_installdir" | sed -e 's,/[^/]*$,,'`
- done
- # Now relocate the directory variables that we use.
- libdir=`echo "$libdir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
- localedir=`echo "$localedir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
- fi
- # Internationalization.
- . gettext.sh
- TEXTDOMAIN=gettext-tools
- export TEXTDOMAIN
- TEXTDOMAINDIR="$localedir"
- export TEXTDOMAINDIR
- # Redirect fileno 3 to interactive I/O.
- exec 3>/dev/tty
- # Output a prompt.
- if test $# != 0; then
- echo "$1" 1>&3
- fi
- # Find the user name on the local machine.
- user=`id -u -n 2>/dev/null`
- if test -z "$user"; then
- user="$USER"
- if test -z "$user"; then
- user="$LOGNAME"
- if test -z "$user"; then
- user=unknown
- fi
- fi
- fi
- # Find the hostname.
- # hostname on some systems (SVR3.2, old Linux) returns a bogus exit status,
- # so uname gets run too, so we keep only the first line of output.
- #host=`(hostname || uname -n) 2>/dev/null | sed 1q`
- host=`"$libdir"/gettext/hostname --short 2>/dev/null | sed 1q`
- # Find the hostname.
- hostfqdn=`"$libdir"/gettext/hostname --fqdn 2>/dev/null | sed 1q`
- # Find a list of email addresses from various mailer configuration files.
- # All mailers use configuration files under $HOME. We handle them in a
- # last-modified - first-priority order.
- cd $HOME
- files=""
- # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
- # Mozilla Thunderbird addresses
- files="$files .thunderbird/*/prefs.js"
- # Mozilla addresses
- files="$files .mozilla/*/prefs.js"
- # Netscape 4 addresses
- files="$files .netscape/liprefs.js .netscape/preferences.js"
- # Netscape 3 addresses
- files="$files .netscape/preferences"
- # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
- # XEmacs mew addresses
- files="$files .emacs .emacs.el"
- # KDE2 addresses
- files="$files .kde2/share/config/emaildefaults"
- # KDE kmail addresses
- files="$files .kde2/share/config/kmailrc"
- # GNOME evolution 2 addresses
- files="$files .gconf/apps/evolution/mail/%gconf.xml"
- # GNOME evolution 1 addresses
- files="$files evolution/config.xmldb"
- # GNOME balsa addresses
- files="$files .gnome/balsa"
- # StarOffice and OpenOffice addresses
- sed_dos2unix='s/\r$//'
- sed_soffice51='s,StarOffice 5\.1=\(.*\)$,\1/sofficerc,p'
- sed_soffice52='s,StarOffice 5\.2=\(.*\)$,\1/user/sofficerc,p'
- sed_ooffice='s,^OpenOffice[^=]*=\(.*\)$,\1/user/config/registry/instance/org/openoffice/UserProfile.xml,p'
- files="$files Office51/sofficerc Office52/user/sofficerc "`sed -n -e "$sed_dos2unix" -e "$sed_soffice51" -e "$sed_soffice52" -e "$sed_ooffice" .sversionrc 2>/dev/null | sed -e 's,^file://*,/,'`
- # mutt addresses
- files="$files .muttrc"
- # pine addresses
- files="$files .pinerc"
- # xfmail addresses
- files="$files .xfmail/.xfmailrc"
- # tkrat addresses
- files="$files .ratatosk/ratatoskrc"
- # ----------------------- END MAILER SPECIFIC CODE -----------------------
- # Expand wildcards and remove nonexistent files from the list.
- nfiles=""
- for file in $files; do
- if test -r "$file" && test ! -d "$file"; then
- nfiles="$nfiles $file"
- fi
- done
- files="$nfiles"
- addresses=""
- if test -n "$files"; then
- for file in `ls -t $files`; do
- case "$file" in
- # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
- # Mozilla and Mozilla Thunderbird addresses
- .mozilla/*/prefs.js | .thunderbird/*/prefs.js)
- addresses="$addresses "`grep -h '^user_pref("mail\.identity\..*\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\..*\.useremail", "\(.*\)");$/\1/'`
- ;;
- # Netscape 4 addresses
- .netscape/liprefs.js | .netscape/preferences.js)
- addresses="$addresses "`grep -h '^user_pref("mail\.identity\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\.useremail", "\(.*\)");$/\1/'`
- ;;
- # Netscape 3 addresses
- .netscape/preferences)
- addresses="$addresses "`grep -h '^EMAIL_ADDRESS:' $file 2>/dev/null | sed -e 's/^EMAIL_ADDRESS:[ ]*//'`
- ;;
- .emacs | .emacs.el)
- # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
- addresses="$addresses "`grep -h '[ (]user-mail-address "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]user-mail-address "\([^"]*\)".*$/\1/'`
- # XEmacs mew addresses
- domains=`grep -h '[ (]mew-mail-domain "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]mew-mail-domain "\([^"]*\)".*$/\1/'`
- if test -n "$domains"; then
- for domain in $domains; do
- addresses="$addresses ${user}@$domain"
- done
- fi
- ;;
- # KDE2 addresses
- .kde2/share/config/emaildefaults)
- addresses="$addresses "`grep -h '^EmailAddress=' $file 2>/dev/null | sed -e 's/^EmailAddress=//'`
- ;;
- # KDE kmail addresses
- .kde2/share/config/kmailrc)
- addresses="$addresses "`grep -h '^Email Address=' $file 2>/dev/null | sed -e 's/^Email Address=//'`
- ;;
- # GNOME evolution 2 addresses
- .gconf/apps/evolution/mail/%gconf.xml)
- sedexpr0='s,^.*<addr-spec>\(.*\)</addr-spec>.*$,\1,p'
- addresses="$addresses "`sed -n -e "$sedexpr0" < $file`
- ;;
- # GNOME evolution 1 addresses
- evolution/config.xmldb)
- sedexpr0='s/^.*<entry name="identity_address_[0-9]*" type="string" value="\([^"]*\)".*$/\1/p'
- sedexpr1='s/\(..\)/\\x\1/g'
- sedexpr2='s,$,\\n,'
- addresses="$addresses "`sed -n -e "$sedexpr0" < $file | while read hexstring; do printf \`echo "$hexstring" | sed -e "$sedexpr1" -e "$sedexpr2"\`; done`
- ;;
- # GNOME balsa addresses
- .gnome/balsa)
- addresses="$addresses "`grep -h '^Address=' $file 2>/dev/null | sed -e 's/^Address=//'`
- ;;
- # OpenOffice addresses
- */UserProfile.xml)
- addresses="$addresses "`sed -n -e 's,^.*<mail cfg:type="string">\(.*\)</mail>.*$,\1,p' $file 2>/dev/null`
- ;;
- # StarOffice addresses
- # Not a typo. They really write "Adress" with a single d.
- # German orthography...
- */sofficerc)
- addresses="$addresses "`grep -h '^User-Adress=' $file 2>/dev/null | sed -e 's/#[^#]*$//' -e 's/^.*#//'`
- ;;
- # mutt addresses
- .muttrc)
- mutt_addresses=`grep -h '^set from="[^"]*"[ ]*$' $file 2>/dev/null | sed -e 's/^set from="\([^"]*\)"[ ]*$/\1/'`
- if test -n "$mutt_addresses"; then
- addresses="$addresses $mutt_addresses"
- else
- # mutt uses $EMAIL as fallback.
- if test -n "$EMAIL"; then
- addresses="$addresses $EMAIL"
- fi
- fi
- ;;
- # pine addresses
- .pinerc)
- domains=`grep -h '^user-domain=' $file 2>/dev/null | sed -e 's/^user-domain=//'`
- if test -n "$domains"; then
- for domain in $domains; do
- addresses="$addresses ${user}@$domain"
- done
- else
- # The use-only-domain-name option is only used if the user-domain option is not present.
- domains=`grep -h '^use-only-domain-name=' $file 2>/dev/null | sed -e 's/^use-only-domain-name=//'`
- if test "Yes" = "$domains"; then
- addresses="$addresses ${user}@"`echo "$hostfqdn" | sed -e 's/^[^.]*\.//'`
- fi
- fi
- ;;
- # xfmail addresses
- .xfmail/.xfmailrc)
- addresses="$addresses "`grep -h '^from=.*<.*>' $file 2>/dev/null | sed -e 's/^.*<\([^<>]*\)>.*$/\1/'`
- ;;
- # tkrat addresses
- .ratatosk/ratatoskrc)
- domains=`grep -h '^set option(masquerade_as) ' $file 2>/dev/null | sed -e 's/^set option(masquerade_as) //'`
- if test -n "$domains"; then
- for domain in $domains; do
- addresses="$addresses ${user}@$domain"
- done
- else
- # The domain option is used only if the masquerade_as option is not present.
- domains=`grep -h '^set option(domain) ' $file 2>/dev/null | sed -e 's/^set option(domain) //'`
- if test -n "$domains"; then
- for domain in $domains; do
- addresses="$addresses ${user}@${host}.$domain"
- done
- fi
- fi
- ;;
- # ----------------------- END MAILER SPECIFIC CODE -----------------------
- esac
- done
- fi
- # Some Debian systems have a file /etc/mailname.
- if test -r /etc/mailname; then
- hostmailname=`cat /etc/mailname`
- if test -n "$hostmailname"; then
- addresses="$addresses ${user}@$hostmailname"
- fi
- fi
- # SuSE Linux >= 8.0 systems have a file /etc/sysconfig/mail.
- if test -r /etc/sysconfig/mail; then
- hostmailname=`. /etc/sysconfig/mail && echo "$FROM_HEADER"`
- if test -n "$hostmailname"; then
- addresses="$addresses ${user}@$hostmailname"
- fi
- fi
- # elm has no user-defined addresses.
- # mailx has no user-defined addresses.
- # mh has no user-defined addresses.
- # They use the system default.
- addresses="$addresses ${user}@$hostfqdn"
- # Normalize addresses: remove addresses without @, lowercase the part after @,
- # and remove duplicates.
- lowercase_sed='{
- h
- s/^[^@]*@\(.*\)$/\1/
- y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
- x
- s/^\([^@]*\)@.*/\1@/
- G
- s/\n//
- p
- }'
- naddresses=""
- for addr in $addresses; do
- case "$addr" in
- "<"*">") addr=`echo "$addr" | sed -e 's/^<//' -e 's/>$//'` ;;
- esac
- case "$addr" in
- *@*)
- addr=`echo "$addr" | sed -n -e "$lowercase_sed"`
- case " $naddresses " in
- *" $addr "*) ;;
- *) naddresses="$naddresses $addr" ;;
- esac
- ;;
- esac
- done
- addresses="$naddresses"
- # Now it's time to ask the user.
- case "$addresses" in
- " "*" "*)
- # At least two addresses.
- lines=""
- i=0
- for addr in $addresses; do
- i=`expr $i + 1`
- lines="${lines}${i} ${addr}
- "
- done
- while true; do
- { gettext "Which is your email address?"; echo; } 1>&3
- echo "$lines" 1>&3
- { gettext "Please choose the number, or enter your email address."; echo; } 1>&3
- read answer < /dev/tty
- case "$answer" in
- *@*) ;;
- [0-9]*)
- i=0
- for addr in $addresses; do
- i=`expr $i + 1`
- if test "$i" = "$answer"; then
- break 2
- fi
- done
- ;;
- esac
- case "$answer" in
- "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
- esac
- case "$answer" in
- *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
- *@*.*) ;;
- *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
- *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
- esac
- addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
- break
- done
- ;;
- " "*)
- # One address.
- while true; do
- { gettext "Is the following your email address?"; echo; } 1>&3
- echo " $addresses" 1>&3
- { gettext "Please confirm by pressing Return, or enter your email address."; echo; } 1>&3
- read answer < /dev/tty
- if test -z "$answer"; then
- addr=`echo "$addresses" | sed -e 's/^ //'`
- break
- fi
- case "$answer" in
- "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
- esac
- case "$answer" in
- *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
- *@*.*) ;;
- *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
- *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
- esac
- addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
- break
- done
- ;;
- "")
- # No address.
- { gettext "Couldn't find out about your email address."; echo; } 1>&3
- while true; do
- { gettext "Please enter your email address."; echo; } 1>&3
- read answer < /dev/tty
- case "$answer" in
- "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
- esac
- case "$answer" in
- *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
- *@*.*) ;;
- *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
- *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
- esac
- addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
- break
- done
- ;;
- *) echo "internal error" 1>&3 ; exit 1 ;;
- esac
- # Print to standard output.
- echo "$addr"
|