Imported Upstream version 0.18.1.1
[platform/upstream/gettext.git] / gettext-tools / src / user-email.sh.in
1 #!/bin/sh
2 # Prints the user's email address, with confirmation from the user.
3 #
4 # Copyright (C) 2001-2003, 2005 Free Software Foundation, Inc.
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19 # Prerequisites for using @libdir@ and @localedir@.
20 prefix="@prefix@"
21 exec_prefix="@exec_prefix@"
22 datarootdir="@datarootdir@"
23 datadir="@datadir@"
24 # Set variables libdir, localedir.
25 libdir="@libdir@"
26 localedir="@localedir@"
27
28 # Support for relocatability.
29 if test "@RELOCATABLE@" = yes; then
30   orig_installdir="$libdir"/gettext # see Makefile.am's install rule
31   # Determine curr_installdir without caring for symlinked callers.
32   curr_installdir=`echo "$0" | sed -e 's,/[^/]*$,,'`
33   curr_installdir=`cd "$curr_installdir" && pwd`
34   # Compute the original/current installation prefixes by stripping the
35   # trailing directories off the original/current installation directories.
36   while true; do
37     orig_last=`echo "$orig_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
38     curr_last=`echo "$curr_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
39     if test -z "$orig_last" || test -z "$curr_last"; then
40       break
41     fi
42     if test "$orig_last" != "$curr_last"; then
43       break
44     fi
45     orig_installdir=`echo "$orig_installdir" | sed -e 's,/[^/]*$,,'`
46     curr_installdir=`echo "$curr_installdir" | sed -e 's,/[^/]*$,,'`
47   done
48   # Now relocate the directory variables that we use.
49   libdir=`echo "$libdir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
50   localedir=`echo "$localedir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
51 fi
52
53 # Internationalization.
54 . gettext.sh
55 TEXTDOMAIN=gettext-tools
56 export TEXTDOMAIN
57 TEXTDOMAINDIR="$localedir"
58 export TEXTDOMAINDIR
59
60 # Redirect fileno 3 to interactive I/O.
61 exec 3>/dev/tty
62
63 # Output a prompt.
64 if test $# != 0; then
65   echo "$1" 1>&3
66 fi
67
68 # Find the user name on the local machine.
69 user=`id -u -n 2>/dev/null`
70 if test -z "$user"; then
71   user="$USER"
72   if test -z "$user"; then
73     user="$LOGNAME"
74     if test -z "$user"; then
75       user=unknown
76     fi
77   fi
78 fi
79
80 # Find the hostname.
81 # hostname on some systems (SVR3.2, old Linux) returns a bogus exit status,
82 # so uname gets run too, so we keep only the first line of output.
83 #host=`(hostname || uname -n) 2>/dev/null | sed 1q`
84 host=`"$libdir"/gettext/hostname --short 2>/dev/null | sed 1q`
85
86 # Find the hostname.
87 hostfqdn=`"$libdir"/gettext/hostname --fqdn 2>/dev/null | sed 1q`
88
89 # Find a list of email addresses from various mailer configuration files.
90 # All mailers use configuration files under $HOME. We handle them in a
91 # last-modified - first-priority order.
92 cd $HOME
93 files=""
94
95 # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
96
97 # Mozilla Thunderbird addresses
98 files="$files .thunderbird/*/prefs.js"
99
100 # Mozilla addresses
101 files="$files .mozilla/*/prefs.js"
102
103 # Netscape 4 addresses
104 files="$files .netscape/liprefs.js .netscape/preferences.js"
105
106 # Netscape 3 addresses
107 files="$files .netscape/preferences"
108
109 # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
110 # XEmacs mew addresses
111 files="$files .emacs .emacs.el"
112
113 # KDE2 addresses
114 files="$files .kde2/share/config/emaildefaults"
115
116 # KDE kmail addresses
117 files="$files .kde2/share/config/kmailrc"
118
119 # GNOME evolution 2 addresses
120 files="$files .gconf/apps/evolution/mail/%gconf.xml"
121
122 # GNOME evolution 1 addresses
123 files="$files evolution/config.xmldb"
124
125 # GNOME balsa addresses
126 files="$files .gnome/balsa"
127
128 # StarOffice and OpenOffice addresses
129 sed_dos2unix='s/\r$//'
130 sed_soffice51='s,StarOffice 5\.1=\(.*\)$,\1/sofficerc,p'
131 sed_soffice52='s,StarOffice 5\.2=\(.*\)$,\1/user/sofficerc,p'
132 sed_ooffice='s,^OpenOffice[^=]*=\(.*\)$,\1/user/config/registry/instance/org/openoffice/UserProfile.xml,p'
133 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://*,/,'`
134
135 # mutt addresses
136 files="$files .muttrc"
137
138 # pine addresses
139 files="$files .pinerc"
140
141 # xfmail addresses
142 files="$files .xfmail/.xfmailrc"
143
144 # tkrat addresses
145 files="$files .ratatosk/ratatoskrc"
146
147 # ----------------------- END MAILER SPECIFIC CODE -----------------------
148
149 # Expand wildcards and remove nonexistent files from the list.
150 nfiles=""
151 for file in $files; do
152   if test -r "$file" && test ! -d "$file"; then
153     nfiles="$nfiles $file"
154   fi
155 done
156 files="$nfiles"
157
158 addresses=""
159
160 if test -n "$files"; then
161
162   for file in `ls -t $files`; do
163
164     case "$file" in
165
166 # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
167
168       # Mozilla and Mozilla Thunderbird addresses
169       .mozilla/*/prefs.js | .thunderbird/*/prefs.js)
170         addresses="$addresses "`grep -h '^user_pref("mail\.identity\..*\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\..*\.useremail", "\(.*\)");$/\1/'`
171         ;;
172
173       # Netscape 4 addresses
174       .netscape/liprefs.js | .netscape/preferences.js)
175         addresses="$addresses "`grep -h '^user_pref("mail\.identity\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\.useremail", "\(.*\)");$/\1/'`
176         ;;
177
178       # Netscape 3 addresses
179       .netscape/preferences)
180         addresses="$addresses "`grep -h '^EMAIL_ADDRESS:' $file 2>/dev/null | sed -e 's/^EMAIL_ADDRESS:[        ]*//'`
181         ;;
182
183       .emacs | .emacs.el)
184         # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
185         addresses="$addresses "`grep -h '[ (]user-mail-address "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]user-mail-address "\([^"]*\)".*$/\1/'`
186         # XEmacs mew addresses
187         domains=`grep -h '[ (]mew-mail-domain "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]mew-mail-domain "\([^"]*\)".*$/\1/'`
188         if test -n "$domains"; then
189           for domain in $domains; do
190             addresses="$addresses ${user}@$domain"
191           done
192         fi
193         ;;
194
195       # KDE2 addresses
196       .kde2/share/config/emaildefaults)
197         addresses="$addresses "`grep -h '^EmailAddress=' $file 2>/dev/null | sed -e 's/^EmailAddress=//'`
198         ;;
199
200       # KDE kmail addresses
201       .kde2/share/config/kmailrc)
202         addresses="$addresses "`grep -h '^Email Address=' $file 2>/dev/null | sed -e 's/^Email Address=//'`
203         ;;
204
205       # GNOME evolution 2 addresses
206       .gconf/apps/evolution/mail/%gconf.xml)
207         sedexpr0='s,^.*&lt;addr-spec&gt;\(.*\)&lt;/addr-spec&gt;.*$,\1,p'
208         addresses="$addresses "`sed -n -e "$sedexpr0" < $file`
209         ;;
210
211       # GNOME evolution 1 addresses
212       evolution/config.xmldb)
213         sedexpr0='s/^.*<entry name="identity_address_[0-9]*" type="string" value="\([^"]*\)".*$/\1/p'
214         sedexpr1='s/\(..\)/\\x\1/g'
215         sedexpr2='s,$,\\n,'
216         addresses="$addresses "`sed -n -e "$sedexpr0" < $file | while read hexstring; do printf \`echo "$hexstring" | sed -e "$sedexpr1" -e "$sedexpr2"\`; done`
217         ;;
218
219       # GNOME balsa addresses
220       .gnome/balsa)
221         addresses="$addresses "`grep -h '^Address=' $file 2>/dev/null | sed -e 's/^Address=//'`
222         ;;
223
224       # OpenOffice addresses
225       */UserProfile.xml)
226         addresses="$addresses "`sed -n -e 's,^.*<mail cfg:type="string">\(.*\)</mail>.*$,\1,p' $file 2>/dev/null`
227         ;;
228
229       # StarOffice addresses
230       # Not a typo. They really write "Adress" with a single d.
231       # German orthography...
232       */sofficerc)
233         addresses="$addresses "`grep -h '^User-Adress=' $file 2>/dev/null | sed -e 's/#[^#]*$//' -e 's/^.*#//'`
234         ;;
235
236       # mutt addresses
237       .muttrc)
238         mutt_addresses=`grep -h '^set from="[^"]*"[     ]*$' $file 2>/dev/null | sed -e 's/^set from="\([^"]*\)"[       ]*$/\1/'`
239         if test -n "$mutt_addresses"; then
240           addresses="$addresses $mutt_addresses"
241         else
242           # mutt uses $EMAIL as fallback.
243           if test -n "$EMAIL"; then
244             addresses="$addresses $EMAIL"
245           fi
246         fi
247         ;;
248
249       # pine addresses
250       .pinerc)
251         domains=`grep -h '^user-domain=' $file 2>/dev/null | sed -e 's/^user-domain=//'`
252         if test -n "$domains"; then
253           for domain in $domains; do
254             addresses="$addresses ${user}@$domain"
255           done
256         else
257           # The use-only-domain-name option is only used if the user-domain option is not present.
258           domains=`grep -h '^use-only-domain-name=' $file 2>/dev/null | sed -e 's/^use-only-domain-name=//'`
259           if test "Yes" = "$domains"; then
260             addresses="$addresses ${user}@"`echo "$hostfqdn" | sed -e 's/^[^.]*\.//'`
261           fi
262         fi
263         ;;
264
265       # xfmail addresses
266       .xfmail/.xfmailrc)
267         addresses="$addresses "`grep -h '^from=.*<.*>' $file 2>/dev/null | sed -e 's/^.*<\([^<>]*\)>.*$/\1/'`
268         ;;
269
270       # tkrat addresses
271       .ratatosk/ratatoskrc)
272         domains=`grep -h '^set option(masquerade_as) ' $file 2>/dev/null | sed -e 's/^set option(masquerade_as) //'`
273         if test -n "$domains"; then
274           for domain in $domains; do
275             addresses="$addresses ${user}@$domain"
276           done
277         else
278           # The domain option is used only if the masquerade_as option is not present.
279           domains=`grep -h '^set option(domain) ' $file 2>/dev/null | sed -e 's/^set option(domain) //'`
280           if test -n "$domains"; then
281             for domain in $domains; do
282               addresses="$addresses ${user}@${host}.$domain"
283             done
284           fi
285         fi
286         ;;
287
288 # ----------------------- END MAILER SPECIFIC CODE -----------------------
289
290     esac
291
292   done
293
294 fi
295
296 # Some Debian systems have a file /etc/mailname.
297 if test -r /etc/mailname; then
298   hostmailname=`cat /etc/mailname`
299   if test -n "$hostmailname"; then
300     addresses="$addresses ${user}@$hostmailname"
301   fi
302 fi
303
304 # SuSE Linux >= 8.0 systems have a file /etc/sysconfig/mail.
305 if test -r /etc/sysconfig/mail; then
306   hostmailname=`. /etc/sysconfig/mail && echo "$FROM_HEADER"`
307   if test -n "$hostmailname"; then
308     addresses="$addresses ${user}@$hostmailname"
309   fi
310 fi
311
312 # elm has no user-defined addresses.
313 # mailx has no user-defined addresses.
314 # mh has no user-defined addresses.
315 # They use the system default.
316 addresses="$addresses ${user}@$hostfqdn"
317
318 # Normalize addresses: remove addresses without @, lowercase the part after @,
319 # and remove duplicates.
320 lowercase_sed='{
321 h
322 s/^[^@]*@\(.*\)$/\1/
323 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
324 x
325 s/^\([^@]*\)@.*/\1@/
326 G
327 s/\
328 //
329 p
330 }'
331 naddresses=""
332 for addr in $addresses; do
333   case "$addr" in
334     "<"*">") addr=`echo "$addr" | sed -e 's/^<//' -e 's/>$//'` ;;
335   esac
336   case "$addr" in
337     *@*)
338       addr=`echo "$addr" | sed -n -e "$lowercase_sed"`
339       case " $naddresses " in
340         *" $addr "*) ;;
341         *) naddresses="$naddresses $addr" ;;
342       esac
343       ;;
344   esac
345 done
346 addresses="$naddresses"
347
348 # Now it's time to ask the user.
349 case "$addresses" in
350   " "*" "*)
351     # At least two addresses.
352     lines=""
353     i=0
354     for addr in $addresses; do
355       i=`expr $i + 1`
356       lines="${lines}${i} ${addr}
357 "
358     done
359     while true; do
360       { gettext "Which is your email address?"; echo; } 1>&3
361       echo "$lines" 1>&3
362       { gettext "Please choose the number, or enter your email address."; echo; } 1>&3
363       read answer < /dev/tty
364       case "$answer" in
365         *@*) ;;
366         [0-9]*)
367           i=0
368           for addr in $addresses; do
369             i=`expr $i + 1`
370             if test "$i" = "$answer"; then
371               break 2
372             fi
373           done
374           ;;
375       esac
376       case "$answer" in
377         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
378       esac
379       case "$answer" in
380         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
381         *@*.*) ;;
382         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
383         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
384       esac
385       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
386       break
387     done
388     ;;
389   " "*)
390     # One address.
391     while true; do
392       { gettext "Is the following your email address?"; echo; } 1>&3
393       echo " $addresses" 1>&3
394       { gettext "Please confirm by pressing Return, or enter your email address."; echo; } 1>&3
395       read answer < /dev/tty
396       if test -z "$answer"; then
397         addr=`echo "$addresses" | sed -e 's/^ //'`
398         break
399       fi
400       case "$answer" in
401         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
402       esac
403       case "$answer" in
404         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
405         *@*.*) ;;
406         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
407         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
408       esac
409       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
410       break
411     done
412     ;;
413   "")
414     # No address.
415     { gettext "Couldn't find out about your email address."; echo; } 1>&3
416     while true; do
417       { gettext "Please enter your email address."; echo; } 1>&3
418       read answer < /dev/tty
419       case "$answer" in
420         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
421       esac
422       case "$answer" in
423         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
424         *@*.*) ;;
425         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
426         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
427       esac
428       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
429       break
430     done
431     ;;
432   *) echo "internal error" 1>&3 ; exit 1 ;;
433 esac
434
435 # Print to standard output.
436 echo "$addr"